调用三方接口的时候Encoder需要对参数进行Ascii顺序排序,记录下
public static void main(String[] args) {
// SortedMap接口主要提供有序的Map实现。
SortedMap<Object,Object> parameters = new TreeMap<Object,Object>();
String merchant_id="190010002";
String business_type="1005";
String out_trade_no="1400000001";
String key="3A4BC4A4000CF1B5FFA9E351E6C1539E";
parameters.put("merchant_id", merchant_id);
parameters.put("business_type", business_type);
parameters.put("out_trade_no",out_trade_no);
String characterEncoding = "UTF-8"; //指定字符集UTF-8
String mySign = createSign(parameters,key);
}
public static String createSign(SortedMap<Object,Object> parameters, String key){
StringBuffer sb = new StringBuffer();
StringBuffer sbkey = new StringBuffer();
Set es = parameters.entrySet(); //所有参与传参的参数按照accsii排序(升序)
Iterator it = es.iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
String k = (String)entry.getKey();
Object v = entry.getValue();
//空值不传递,不参与签名组串
if(null != v && !"".equals(v)) {
sb.append(k + "=" + v + "&");
sbkey.append(k + "=" + v + "&");
}
}
sbkey=sbkey.append("key="+key);
System.out.println("字符串:"+sbkey.toString());
return sb.toString()+"sign="+sbkey;
}
然后一般都需要进行MD5加密:
// 使用Spring自带的DigestUtils
String s = DigestUtils.md5DigestAsHex(sign.getBytes());