uniapp微信支付
1、uni.login 登录 拿到code值
// An highlighted block
var foo = 'bar';
uni.login({
provider: 'weixin',
success: function(loginRes) {
let code = loginRes.code;
}
});
2、发送code给后端进行授权
后端使用 GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
参数:
let obj={
appid
secret
js_code
grant_tyoe
}
获取 openid 和 session_key
3、获取供应商,判断是否有微信供应商
// An highlighted block
var foo = 'bar';
uni.getProvider({
service: 'oauth',
success: function (res) {
console.log(res.provider)
if (~res.provider.indexOf('weixin')) {
}
}
});
4、有此供应商,
let obj = {
openid: tthis.userInfo.openId,
};
前端发比如如上的数据给后端进行预下单接口,
后端操作接文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
后端预下单处理
这里面要处理 prepay_id 和 paySign
处理 规范文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3
prepay_id
用统一下单接口 https://api.mch.weixin.qq.com/pay/unifiedorder获取
参数比如
let obj = {
appid: wxd930ea5d5a258f4f,
mch_id: 10000100,
device_info: 1000,
body: '5斤白菜',
nonce_str: ibuaiVcKdpRxkhJA,
};
// 注意 数据要处理<xml>
let str1 = "",
let keys = Object.keys(obj).sort()//排序
keys.map((p) => {
str1 += ` ${p} = {keys[p]}& `
})
str1 += "key = ' AAAAAAAAAAAAAAAA' "//自己去配置
let str2 = "",
str = md5.update(str).digest('hex').toUpperCase()
obj.sign = str1;
Object.keys(obj).map((p)=>{
str += ` <${p}>${obj[p]</${p}> `
})
str = ` <xml>${str}</xml> `
// paySign
let obj = {
appId
timeStamp
nonceStr
package
signType
};
paySign=MD5(appId=wxd678efh567hg6787&nonceStr=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&package=prepay_id=wx2017033010242291fcfe0db70013231072&signType=MD5&timeStamp=1490840662&key=qazwsxedcrfvtgbyhnujmikolp111111) = 22D9B4E54AB1950F51E0649E8810ACD6
最后后端返回一个 prepay_id 和 paySign
5、进行前端
uni.requestPayment调用支付接口