|
@@ -0,0 +1,131 @@
|
|
|
|
+package com.jpsoft.smart;
|
|
|
|
+
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
|
+import org.junit.Test;
|
|
|
|
+
|
|
|
|
+import java.io.BufferedReader;
|
|
|
|
+import java.io.InputStreamReader;
|
|
|
|
+import java.io.Reader;
|
|
|
|
+import java.net.HttpURLConnection;
|
|
|
|
+import java.net.URL;
|
|
|
|
+import java.security.MessageDigest;
|
|
|
|
+import java.security.NoSuchAlgorithmException;
|
|
|
|
+import java.util.Date;
|
|
|
|
+import java.util.TreeMap;
|
|
|
|
+
|
|
|
|
+public class OpenAPITest {
|
|
|
|
+
|
|
|
|
+ @Test
|
|
|
|
+ public void signTest(){
|
|
|
|
+ /**
|
|
|
|
+ 接口参数签名方法
|
|
|
|
+ 第一步:拼接参数字符串
|
|
|
|
+ 将除sign以外的请求参数(包括标准参数,除非有特别说明)按照参数名称的字典升序排列,
|
|
|
|
+ 然后按此顺序,将”参数名=参数值”用”&”符号连接。
|
|
|
|
+ appid=appcode123&data=[]&format=json&iscompany=2&method=employee.create&nonce=11223344×tamp=1558593970&version=2.0
|
|
|
|
+ **/
|
|
|
|
+ TreeMap<String,Object> treeMap = new TreeMap<>();
|
|
|
|
+ treeMap.put("method","Project.Add");
|
|
|
|
+ treeMap.put("version","1.0");
|
|
|
|
+ treeMap.put("appid","yOtqoojmsmz");
|
|
|
|
+ treeMap.put("iscompany","1");
|
|
|
|
+ treeMap.put("format","json");
|
|
|
|
+
|
|
|
|
+ long timestamp = (new Date()).getTime()/1000;
|
|
|
|
+ treeMap.put("timestamp", timestamp);
|
|
|
|
+ treeMap.put("nonce", timestamp);
|
|
|
|
+
|
|
|
|
+ treeMap.put("data","[{\"ADDRESS\":\"湖北省\",\"CONTRACTPRICE\":\"80000.00\",\"DEPARTMENTINDUSTRYID\":\"68\",\"DISTRICTCCODE\":421002,\"DISTRICTCODE\":421002,\"ENDTIME\":\"859\",\"GCPROCESS\":\"1\",\"LATLNG\":\"114.225446,30.560052\",\"MONEYSOURCE\":130,\"NAME\":\"沙北碧桂园\",\"PROJECTDESC\":\".\",\"PROJECTTYPE\":\"117\",\"STARTTIME\":\"2018-11-02\"}]");
|
|
|
|
+ //treeMap.put("data","[{\"ADDRESS\":\"湖北省\",\"CONTRACTPRICE\":80000.00}]");
|
|
|
|
+
|
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
|
+
|
|
|
|
+ for (String key : treeMap.keySet()) {
|
|
|
|
+ if (sb.length()>0){
|
|
|
|
+ sb.append("&");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ sb.append(key + "=" + treeMap.get(key));
|
|
|
|
+
|
|
|
|
+ System.out.println(key + ":" + treeMap.get(key));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 第二步:在拼接参数字符串后再拼接&appsecret,如&appsecret=df23hlir85353;appsecret即密钥,由服务信息平台技术支持人员提供。
|
|
|
|
+ * 示例:appid=appcode123&data=[]&format=json&iscompany=2&method=employee.create&nonce=11223344×tamp=1558593970&version=2.0&appsecret=df23hlir85353gfgd86775jjdh6322
|
|
|
|
+ **/
|
|
|
|
+ sb.append("&appsecret=534a33e888b001a246b635b76e42d0dd");
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * (3)第三步:将上一步的获得的字符串全部转换为小写。再进行SHA256加密(SHA256 64位),生成的字符串就是验签数据sign。注意:SHA256加密哈希值请转换为16进制表示。
|
|
|
|
+ **/
|
|
|
|
+ // String plainText = "appid=appcode123&data=[]&format=json&iscompany=2&method=employee.create&nonce=11223344×tamp=1558593970&version=2.0&appsecret=df23hlir85353gfgd86775jjdh6322";
|
|
|
|
+ String plainText = sb.toString();
|
|
|
|
+
|
|
|
|
+ StringBuilder postDataSb = new StringBuilder();
|
|
|
|
+ postDataSb.append(plainText);
|
|
|
|
+
|
|
|
|
+ System.out.println(plainText);
|
|
|
|
+
|
|
|
|
+ System.out.println("转小写");
|
|
|
|
+ plainText = plainText.toLowerCase();
|
|
|
|
+ System.out.println(plainText);
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
|
|
|
|
+ messageDigest.update(plainText.getBytes("UTF-8"));
|
|
|
|
+ byte[] bytes = messageDigest.digest();
|
|
|
|
+
|
|
|
|
+ StringBuffer stringBuffer = new StringBuffer();
|
|
|
|
+
|
|
|
|
+ for (int i=0;i<bytes.length;i++) {
|
|
|
|
+ String temp = Integer.toHexString(bytes[i] & 0xFF);
|
|
|
|
+
|
|
|
|
+ if (temp.length() == 1) {
|
|
|
|
+ stringBuffer.append("0");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ stringBuffer.append(temp);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ System.out.println("sign:" + stringBuffer.toString());
|
|
|
|
+
|
|
|
|
+ postDataSb.append("&sign=" + stringBuffer.toString());
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ System.out.println("postData:" + postDataSb);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ byte[] postDataBytes = postDataSb.toString().getBytes("UTF-8");
|
|
|
|
+
|
|
|
|
+ HttpURLConnection conn = (HttpURLConnection)(new URL("http://jztest.e2r.cn:8115/foreign/upload/check")).openConnection();
|
|
|
|
+ conn.setRequestMethod("POST");
|
|
|
|
+ conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
|
|
|
|
+ conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
|
|
|
|
+ conn.setConnectTimeout(2000);
|
|
|
|
+ conn.setReadTimeout(5000);
|
|
|
|
+ conn.setDoOutput(true);
|
|
|
|
+ conn.getOutputStream().write(postDataBytes);
|
|
|
|
+
|
|
|
|
+ Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "GBK"));
|
|
|
|
+
|
|
|
|
+ StringBuilder sb2 = new StringBuilder();
|
|
|
|
+ for (int c; (c = in.read()) >= 0;) {
|
|
|
|
+ sb2.append((char)c);
|
|
|
|
+ }
|
|
|
|
+ in.close();
|
|
|
|
+ conn.disconnect();
|
|
|
|
+
|
|
|
|
+ String responseStr = sb2.toString();
|
|
|
|
+
|
|
|
|
+ System.out.println(responseStr);
|
|
|
|
+
|
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(responseStr);
|
|
|
|
+
|
|
|
|
+ //1575542056612
|
|
|
|
+ System.out.println("返回消息:" + jsonObject.get("message"));
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|