使用小程序调起支付的流程如下:
1 小程序端向后台服务器发起支付申请(wx.request),并传送订单的一些基本参数
2 后台服务器收到申请生成订单, prepay_id返回到小程序
3 小程序收到prepay_id 后会调用支付功能API(wx.requestPayment),调起支付页面
4 用户在小程序中完成支付
5 微信服务器推送用户支付的消息到后台(notify_url),后台进行订单完成处理
前端js:
applet_pay: function (e) {
console.log('支付调起')
var dev_uuid = e.target.id;
var applet_openid = wx.getStorageSync('applet_openid');
let cookie = wx.getStorageSync('cookieKey');
let header = {};
if (cookie) {
header.Cookie = cookie;
}
wx.request({
url: 'https://applet_pay',
data: { 'openid': applet_openid, 'dev_uuid':dev_uuid, 'product_id':1, 'product_price':1},
method: 'GET',
header: header,
success: function (res) {
console.log(res.data)
console.log(res.data.paySign)
wx.requestPayment({
timeStamp: res.data.timeStamp,
nonceStr: res.data.nonceStr,
package: res.data.package,
signType: res.data.signType,
paySign: res.data.paySign,
'success': function (res) {
console.log(res)
},
'fail': function (res) {
console.log(res)
}
})
}
})
},
后台服务器程序:
wechat_pay = WeChatPay(appid, app_key, mch_id, mch_cert=mch_cert_path, mch_key=mch_key_path)
注意事项:
如果用小程序吊起支付:
1 小程序需要和商户平台做账号关联(AppID绑定)
2 第一个参数appid 要使用小程序的ID,如果用微信公众号的ID,小程序会出现“商户传入的appid参数不正确,请联系商户处理” 弹框
3 第二个参数appkey 要使用微信公众号 的密钥(鬼知道微信为什么这么做),否则后台在创建订单的时候会出现“Error code: FAIL, message: 签名错误”
order_result = wechat_pay.order.create(trade_type=u'JSAPI',
body=str(dev_uuid),
total_fee=int(int(product_price)*100),
notify_url='https://xxxx/wx_appletpay_notify',
user_id=openid,
detail=dev_uuid,
out_trade_no=out_trade_no,
product_id=product_id,
device_info=dev_uuid,
attach=product_id)
4 创建订单参数中,必须要传 user_id 参数,将openid传进去,否则后台报告“PARAM_ERROR, message: JSAPI支付必须传openid”
5 传进去的这个openid 必须是小程序获取的的openid,和公众号获取的openid是不同的,否则后台会报告”Pay Error code: PARAM_ERROR, message: appid和openid不匹配“