首先需要去微信开放平台申请微信支付微信开放平台
uniapp的代码
payOrder(orderInfo) {
const providerList = ['微信支付', '支付宝支付']
new Promise((resolve, reject) => {
uni.showActionSheet({
itemList: providerList,
success(res) {
resolve(res.tapIndex)
},
fail() {
reject(new Error('取消支付'))
}
})
}).then((index) => {
return paySign.getPayInfo(orderInfo, index)
}).then((payOrderInfo)=>{
uni.requestPayment({
// 支付方式
provider: payOrderInfo.payType ===0? "wxpay": "alipay",
// 订单内容
orderInfo: payOrderInfo.info,
success: (res) => {
console.log("success", JSON.stringify(res));
return res;
},
fail: (err) => {
console.log("fail", JSON.stringify(err));
return err;
}
})
})
},
paySign.getPayInfo = function (orderInfo, payType) {
console.log('payType====', payType)
let data = {
payType: payType
}
if (payType == 0) {
data.info = paySign.getWXPayInfo(orderInfo)
} else {
data.info = paySign.getAliPayInfo(orderInfo)
}
return data
}
paySign.getWXPayInfo = function(orderInfo) {
const noncestr = paySign.randomSrt(true, 10, 20), // 随机数
key = "", // 加密Key,微信支付填写的key
time = new Date(),
timestamp = time.getTime().toString().substr(0, 10), // 时间戳
payInfo = {
appid: orderInfo.appid,
noncestr: orderInfo.noncestr,
package: 'Sign=WXPay',
partnerid: orderInfo.partnerid,
prepayid: orderInfo.prepayid,
timestamp: Number(orderInfo.timestamp)
}
// 键值对按照ASCII码从小到大排序生成类似:appid=xxx&body=xx&device_info=1000
let keyValueStr = paySign.mapObjToKeyValue(payInfo, true);
// 插入加密Key到最后
let strSignTemp = `${keyValueStr}&key=${key}`;
// 真正的二次加密
let sign = util.md5Encode(strSignTemp).toUpperCase().substr(0, 32);
payInfo.sign = sign;
console.log('payInfo', payInfo)
// 返回字符串给uniapp调起支付用
return JSON.stringify(payInfo);
}
到了这一步,安卓端是可以支付了,但是在iOS端发现失败了,微信都没调起来,返回支付信息支付失败{“errMsg“:“requestPayment:fail errors“,code:-1}
在iOS端很重要的一个点要设置UniversalLinks,假如你是下载的HTML 5+ SDK的工程,搜索UniversalLinks,在一个plist文件中要替换掉默认的,换成自己的UniversalLinks