最近在开发过程中发遇到了对于微信下单的功能,签名不正确特意留下了目前可行的签名方法代码,记录一下对应的代码,学习和备用。
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
//在线验证网址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1 请在非IE浏览器下打开
public class TestSign {
private static String Key = "15246652111";
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("==========》微信签名开始");
//微信api提供的参数
SortedMap<Object,Object> parameters = new TreeMap<Object,Object>();
parameters.put("appid", "wx1236544788");
parameters.put("attach", "铃铛");
parameters.put("body", "铃铛购买");
parameters.put("mch_id", "15246652111");
parameters.put("nonce_str", "bkvYgKB14He08vWx");
parameters.put("notify_url", "http://www.lvnnet.com/lincombPay/wcpay/wechatPayNotify");
parameters.put("openid", "oPYQ-v-QWERTYUIhddryuiHKlsmMM");
parameters.put("out_trade_no", "032018032916420100479947");
parameters.put("spbill_create_ip", "172.16.107.206");
parameters.put("total_fee", "1");
parameters.put("trade_type", "JSAPI");
String signStr = createSign("UTF-8", parameters);
System.out.println("生成微信签名==========》" + signStr);
System.out.println("==========》微信签名结束");
}
/**
* 微信支付签名算法sign
* @param characterEncoding
* @param parameters
* @return
*/
@SuppressWarnings({"rawtypes" })
public static String createSign(String characterEncoding,SortedMap<Object,Object> parameters){
StringBuffer sb = new StringBuffer();
//所有参与传参的参数按照accsii排序(升序)
Set<?> es = parameters.entrySet();
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)
&& !"sign".equals(k) && !"key".equals(k)) {
sb.append(k + "=" + v + "&");
}
}
//重点说明:这个Key是对应的商户编码 是针对于支付发起的是有有个商户编号
sb.append("key=" + Key);
System.out.println("加密前封装的字符串:"+sb.toString());
String sign = Md5.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
return sign;
}
}
执行结果:
==========》微信签名开始
加密前封装的字符串:appid=wx1236544788&attach=铃铛&body=铃铛购买&mch_id=15246652111&nonce_str=bkvYgKB14He08vWx¬ify_url=http://www.lvnnet.com/lincombPay/wcpay/wechatPayNotify&openid=oPYQ-v-QWERTYUIhddryuiHKlsmMM&out_trade_no=032018032916420100479947&spbill_create_ip=172.16.107.206&total_fee=1&trade_type=JSAPI&key=15246652111
生成微信签名==========》673DFF272B6168529BA0830ABF3095C4
==========》微信签名结束