调用支付jsapi缺少参数:appid_关于微信小程序之支付验证签名失败

最近做了一个微信小程序,小程序在调起微信支付时,第一次弹出调用支付JSAPI缺少参数total_fee,如下图所示:

3adfa3e50cd883e73223abdc255926ac.png

然后,百度了很久,有人支出,wx.requestPayment的参数:package应该是:prepay_id=xxxxxxxxxx,这个prepay_id当然是第一次使用威胁你支付API签名获得的,加上后,该错误不再出现,

在返回prepay_id的同时,顺便返回了sign这个参数,这时就把这个参数给前端:wx.requestPayment调起时,所需要的参数:paySign,

这时,又出现了支付验证签名失败这个错误,入下图所示:

293ecf36317f162e247727eb84e7c86a.png

这次搞了好久,搞了好几个小时,百度网上资料,有人说MD5加密问题,有人说参数顺序问题,等等诸如此类,也有人说需要二次签名,最终发现,的确是需要二次签名的,但是什么是二次签名,网上资料又嘎然而止了。

第一次签名获得prepay_id后,我们还需要用利用prepay_id,加上其它4个参数,共5个参数,获得二次签名,Java源代码如下:

Map map = new HashMap();

map.put("appId", appId);// 公众号id

map.put("nonceStr", nonceStr);// 随机字符串

map.put("timeStamp",String.valueOf(timeStamp));

map.put("nonceStr", nonceStr);// 随机字符串

map.put("package", "prepay_id="+prepayId);

map.put("signType", "MD5");

String sign2 = WXPayUtil.generateSignature(map,mchKey);

这时获得的sign2,才是我们真正要传给前端的参数paySign

至此,再次调用小程序微信支付,就可以正确弹出支付窗口了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值