这两天做微信现金红包,返回数据总是提示签名错误,我自己生成的签名和微信提供的签名验证接口生产的一模一样 ,API密钥也没有错,就是不知道什么问题,网上查了一圈,发现是微信文档有点坑,参数一定要按照下面的顺序生产签名才可以,对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)
act_name
client_ip
mch_billno
mch_id
nonce_str
re_openid
remark
send_name
total_amount
total_num
wishing
wxappid
sign
下面是部分代码
Map map = new LinkedHashMap();
//生成签名
map.put("act_name", sendRedPack.getAct_name());
map.put("client_ip", sendRedPack.getClient_ip());
map.put("mch_billno", sendRedPack.getMch_billno());
map.put("mch_id", sendRedPack.getMch_id());
map.put("nonce_str", sendRedPack.getNonce_str());
map.put("re_openid", sendRedPack.getRe_openid());
map.put("remark", sendRedPack.getRemark());
map.put("send_name", sendRedPack.getSend_name());
map.put("total_amount", sendRedPack.getTotal_amount());
map.put("total_num", sendRedPack.getTotal_num());
map.put("wishing", sendRedPack.getWishing());
map.put("wxappid", sendRedPack.getWxappid());
String sign = WXPayUtil.generateSignature(map, key); //采用Md5签名