微信小程序支付验证签名错误的坑注意事项

微信小程序的支付和微信公众号的支付是一样的,如果之前对接过 jsapi,其基本逻辑是一样的,基本可以拿过来继续使用。

通过以下返回的数据可以发给小程序端使用

1
$order = \WxPayApi::unifiedOrder($input);

返回的参数有

1
2
3
4
5
6
7
8
9
appid:"***"
mch_id:"***"
nonce_str:"***"
prepay_id:"wx***"
result_code:"SUCCESS",
return_code:"SUCCESS",
return_msg:"ok",
sign:"***"
trade_type:"***"

你可能看到微信小程序的支付接口( https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5 )写有

1
2
3
4
5
6
7
8
9
10
wx.requestPayment({
timeStamp: "",
nonceStr: "",
package: "",
signType: "MD5",
paySign: "",
success: function (res) {},
fail: function (res) {},
complete: function (res) {},
});

特别要注意 paySign,不能直接拿上面返回的 sign 还是按照其官方文档在 php 端接接完成后再返回。如官方示例

1
paySign = MD5(appId=wxd678efh567hg6787&nonceStr=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&package=prepay_id=wx2017033010242291fcfe0db70013231072&signType=MD5&timeStamp=1490840662&key=qazwsxedcrfvtgbyhnujmikolp111111) = 22D9B4E54AB1950F51E0649E8810ACD6

在 php 可自行增加返回数据 paysign 和 timeStamp 以供前端使用。