商业管理系统对外接口

商业管理系统对外接口


加密工具类(JAVA 带demo)

<pre><code>public class SignUtils { //编码格式 private static String inputCharset = &amp;quot;utf-8&amp;quot;; /** * 生成MD5 32位小写加密 * @param prestr 需要签名的字符串 * @param appsecret * @return */ private static String Sign(String prestr, String appsecret){ StringBuffer buf = new StringBuffer(32); String str = prestr + appsecret; try { MessageDigest md = MessageDigest.getInstance(&amp;quot;MD5&amp;quot;); md.update(str.getBytes()); byte b[] = md.digest(); int i; for (int offset = 0; offset &amp;lt; b.length; offset++) { i = b[offset]; if (i &amp;lt; 0) i += 256; if (i &amp;lt; 16) buf.append(&amp;quot;0&amp;quot;); buf.append(Integer.toHexString(i)); } str = buf.toString(); } catch (Exception e) { e.printStackTrace(); } return str; } /** * 生成请求时的签名 * @param sPara 参与签名参数,包含header和body中的参数,其中不能包含sign和appsecret * @param appsecret 秘钥和appid对应,由脉餐宝提供 * @return md5 32位小写签名 */ public static String BuildSign(Map&amp;lt;String, String&amp;gt; sPara, String appsecret){ //把数组所有元素,按照“参数=参数值”的模式用“&amp;amp;”字符拼接成字符串 String prestr = CreateLinkString(sortMapByKey(sPara)); //把最终的字符串签名,获得签名结果 String mysign = Sign(prestr, appsecret); return mysign; } /// &amp;lt;summary&amp;gt; /// 把数组所有元素,按照“参数=参数值”的模式用“&amp;amp;”字符拼接成字符串 /// &amp;lt;/summary&amp;gt; /// &amp;lt;param name=&amp;quot;dicArray&amp;quot;&amp;gt;需要拼接的数组&amp;lt;/param&amp;gt; /// &amp;lt;returns&amp;gt;拼接完成以后的字符串&amp;lt;/returns&amp;gt; private static String CreateLinkString(Map&amp;lt;String, String&amp;gt; dicArray){ StringBuilder prestr = new StringBuilder(); //C#代码 // foreach (Map&amp;lt;String, String&amp;gt; temp in dicArray) // { // prestr.Append(temp.Key + &amp;quot;=&amp;quot; + temp.Value + &amp;quot;&amp;amp;&amp;quot;); // } // // //去掉最後一個&amp;amp;字符 // int nLen = prestr.Length; // prestr.Remove(nLen - 1, 1); // // return prestr.ToString(); //JAVA for(Map.Entry&amp;lt;String,String&amp;gt; entry:dicArray.entrySet()){ prestr.append(entry.getKey() + &amp;quot;=&amp;quot; + entry.getValue() + &amp;quot;&amp;amp;&amp;quot;); } //去掉最後一個&amp;amp;字符 String str = prestr.substring(0,prestr.length() -1); return str; } /** * 使用 Map按key进行排序 * @param map * @return */ private static Map&amp;lt;String, String&amp;gt; sortMapByKey(Map&amp;lt;String, String&amp;gt; map) { if (map == null || map.isEmpty()) { return null; } Map&amp;lt;String, String&amp;gt; sortMap = new TreeMap&amp;lt;&amp;gt;(new Comparator&amp;lt;String&amp;gt;() { public int compare(String obj1, String obj2) { return obj1.compareTo(obj2);//升序排序 } }); sortMap.putAll(map); return sortMap; } public static void main(String[] args) throws UnsupportedEncodingException { //unix时间戳,精确到秒 Long ticks = System.currentTimeMillis() / 1000; //请求参数,请向脉餐宝工作人员获取 String apiUrl = &amp;quot;https://api.maicanbao.com/Out/Member/SycnPersonFiles&amp;quot;; String appid=&amp;quot;9c145a40-8c3a-48c4-8ab3-cbf8c937320b&amp;quot;; String appsecret = &amp;quot;123654789&amp;quot;; String appsecretcode = &amp;quot;99&amp;quot;; //放入请求头中 Map&amp;lt;String, String&amp;gt; headerMap = new HashMap&amp;lt;&amp;gt;(); headerMap.put(&amp;quot;ticks&amp;quot;,ticks.toString()); headerMap.put(&amp;quot;appid&amp;quot;, appid); headerMap.put(&amp;quot;appsecretcode&amp;quot;,appsecretcode); //请求参数:POST请求放入BODY中 Map&amp;lt;String, Object&amp;gt; params = new HashMap&amp;lt;&amp;gt;(); User user = new User(); user.setNumbercode(&amp;quot;01002&amp;quot;); user.setName(&amp;quot;测试&amp;quot;); user.setMemberId(0); user.setStatus(0); user.setFirm(&amp;quot;&amp;quot;); user.setDepartment(&amp;quot;&amp;quot;); user.setIdcard(&amp;quot;&amp;quot;); user.setPhone(&amp;quot;&amp;quot;); // badyData.delete = delList; List&amp;lt;User&amp;gt; userList = new ArrayList&amp;lt;&amp;gt;(); userList.add(user); List&amp;lt;String&amp;gt; delList = new ArrayList&amp;lt;&amp;gt;(); //此处value不能放序列化后的,应该直接存入对象 params.put(&amp;quot;update&amp;quot;,userList); params.put(&amp;quot;delete&amp;quot;,delList); HashMap&amp;lt;String,String&amp;gt; preSignMap=new HashMap&amp;lt;&amp;gt;(); preSignMap.putAll(headerMap); // preSignMap.put(badyData); for(Map.Entry&amp;lt;String,Object&amp;gt; entry:params.entrySet()){ //URLENCODE时将+号转换成%20,生成大写的%+符号 //value应该进行json序列化后再进行urlencoder preSignMap.put(entry.getKey(),java.net.URLEncoder.encode(JSON.toJSONString(entry.getValue()),&amp;quot;utf-8&amp;quot;).replaceAll(&amp;quot;\\+&amp;quot;, &amp;quot;%20&amp;quot;)); } //计算sign String newSign = BuildSign(preSignMap,appsecret); headerMap.put(&amp;quot;sign&amp;quot;,newSign); //请求 String resultStr=doPost(apiUrl,params,headerMap); JSONObject result = JSON.parseObject(resultStr); System.out.println(result.toString()); } //////////////////////////httpClient Post方法///////////////// private static final int SocketTimeout = 60000; private static final int ConnectTimeout = 60000; private static final int ConnectionRequestTimeout = 60000; private static RequestConfig defaultRequestConfig = RequestConfig.custom() .setSocketTimeout(SocketTimeout) .setConnectTimeout(ConnectTimeout) .setConnectionRequestTimeout(ConnectionRequestTimeout) .setStaleConnectionCheckEnabled(true) .build(); /** * 发送 POST 请求(HTTP),带输入数据 带header * * @param paramMap 请求Body中参数Map,值不需要进行UrlEncode * @param headerMap 请求头header Map * @return */ public static String doPost(String apiUrl, Map&amp;lt;String, Object&amp;gt; paramMap,Map&amp;lt;String, String&amp;gt; headerMap) { CloseableHttpClient httpClient = HttpClients.createDefault(); String httpStr = null; HttpPost httpPost = new HttpPost(apiUrl); CloseableHttpResponse response = null; httpPost.addHeader(&amp;quot;Content-type&amp;quot;,&amp;quot;application/json; charset=utf-8&amp;quot;); httpPost.setHeader(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;); for (Map.Entry&amp;lt;String, String&amp;gt; header : headerMap.entrySet()) { httpPost.setHeader(header.getKey(),header.getValue()); } try { httpPost.setConfig(defaultRequestConfig); httpPost.setEntity(new StringEntity(JSON.toJSONString(paramMap),&amp;quot;UTF-8&amp;quot;)); response = httpClient.execute(httpPost); // System.out.println(response.toString()); HttpEntity entity = response.getEntity(); httpStr = EntityUtils.toString(entity, &amp;quot;UTF-8&amp;quot;); } catch (IOException e) { e.printStackTrace(); } finally { if (response != null) { try { EntityUtils.consume(response.getEntity()); } catch (IOException e) { e.printStackTrace(); } } } return httpStr; } }</code></pre>

页面列表

ITEM_HTML