首先需要去微信開放平臺(tái)申請微信支付微信開放平臺(tái)
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",
// 訂單內(nèi)容
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), // 隨機(jī)數(shù)
key = "", // 加密Key氓轰,微信支付填寫的key
time = new Date(),
timestamp = time.getTime().toString().substr(0, 10), // 時(shí)間戳
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調(diào)起支付用
return JSON.stringify(payInfo);
}
到了這一步,安卓端是可以支付了,但是在iOS端發(fā)現(xiàn)失敗了缓醋,微信都沒調(diào)起來如失,返回支付信息支付失敗{“errMsg“:“requestPayment:fail errors“,code:-1}
在iOS端很重要的一個(gè)點(diǎn)要設(shè)置UniversalLinks送粱,假如你是下載的HTML 5+ SDK的工程褪贵,搜索UniversalLinks,在一個(gè)plist文件中要替換掉默認(rèn)的抗俄,換成自己的UniversalLinks