一、准备资料
1、需要注册一个微信商户平台https://pay.weixin.qq.com/ (主要是需要mch_id(微信支付商户号)商户Key(其实就是API密钥)
2、申请一个微信小程序账号(需要有微信支付、微信认证) (主要是需要appid、AppSecret(小程序密钥))
二、操作流程(https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=3建议多多看看操作流程图,之前就是因为,没注意再次签名这个步骤一直失败)
1、使用 wx.login({success: function(res){console.log(res); } }),获取code({errMsg: "login:ok", code: "***********"})
2、根据code、appid、AppSecret(小程序密钥) 去获取openid
https://api.weixin.qq.com/sns/jscode2session?appid=-你的openId&secret=你的小程序密钥ceda&js_code=wx.login返回的code值&grant_type=authorization_code
返回值{"session_key":"返回的session_key","openid":"返回的openid"}
3、生成签名https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=20_1(这里是以前端思路流程为主)
(1)根据统一下单的接口https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1&index=1需要上传的参数以此输入地址https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=20_1生成签名sign 这一步感觉有点坑爹
let xmlData = '<xml>
<appid><![CDATA[************]]></appid>
<body><![CDATA[JSAPI支付测试]]></body>
<mch_id><![CDATA[************]]></mch_id>
<nonce_str><![CDATA[************]]></nonce_str>
<notify_url><![CDATA[http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php]]></notify_url>
<openid><![CDATA[************]]></openid>
<out_trade_no><![CDATA[************]]></out_trade_no>
<spbill_create_ip><![CDATA[14.23.150.211]]></spbill_create_ip>
<total_fee><![CDATA[1]]></total_fee>
<trade_type><![CDATA[JSAPI]]></trade_type>
<sign>F9C47A514D2F49E2D39A61915BD6D313</sign>
</xml>';
wx.request({
url: URL,
data: xmlData,
header: {
'content-type': 'application/x-www-form-urlencoded'
},
method: 'POST',
success (res) {
console.log(res.data);
}
})
//返回值
<xml><return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[*********]]></appid>
<mch_id><![CDATA[*********]]></mch_id>
<nonce_str><![CDATA[*********]]></nonce_str>
<sign><![CDATA[*********]]></sign>
<result_code><![CDATA[*********]]></result_code>
<prepay_id><![CDATA[*********]]></prepay_id>
<trade_type><![CDATA[*********]]></trade_type>
</xml>
(2)你以为这样就可以了吗?可以通过wx.requestPayment进行支付了吗?不你想多了,接下来进行再次签名。
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3
根据返回的值(主要是prepay_id)按文档的顺序依次输入再次签名
3、拿到后端的返回值调用wx.requestPayment进行小程序的微信支付(其实前端的工作只要相应的参数调用支付接口就行了)
wx.requestPayment({
// timeStamp: ''+parseInt(new Date().getTime()/1000),
timeStamp: '1600324751',
nonceStr: '*******',
package: 'prepay_id=************',
signType: 'MD5',
paySign: '****************',
success (res) { },
fail (res) { }
})