前言
最近在对接uniapp微信支付时,通过在uniapp官网及微信支付文档查找,发现相关资料比较分散,需要通过多方面查找并整合资料,功夫不负有心人啊,终于开发成功啦!现把资料整合一下,希望能给开发人员多点灵感~~~。
App平台支付流程
流程:支付平台功能申请 -> manifest.json 里配置支付参数 -> uni-app 里调用 API 进行支付
支付平台功能申请
- 先到微信开放平台 申请移动应用并开通支付功能,申请应用后可以获取 AppID 和 AppSecret 值
- 应用接入微信商户平台,选择 App 支付
- 开通支付功能后可获取支付业务服务器配置数据:PARTNER(财付通商户号)、PARTNER_KEY(财付通密钥)、PAYSIGNKEY(支付签名密钥)
manifest.json 里配置支付参数
需要将从微信开放平台申请的appid,填回到 manifest.json--APP模块配置-支付-微信支付中。
uni-app 里调用 API 进行支付
uni.getProvider({
service: 'payment', //获取服务供应商
success: (res) => {
console.log(res)
console.log(res.service) //服务类型:payment
console.log(res.provider) //不同服务类型下可能的取值:["alipay","wxpay"]
//这里通过后台调用微信APP支付接口生成支付的订单数据
uni.request({
url: 'xxx/WeiPay/Pay',
method: 'get',
data: {
TotalFee: '0.01',
},
}).then((result) => {
let [error, res] = result;
if (res.statusCode === 200) {
let weixinOrderInfo = res.data.data;
console.log("支付参数",weixinOrderInfo)
//支付
uni.requestPayment({
provider: 'wxpay', //服务提供商(微信)(服务提供商,通过uni.getProvider获取)
orderInfo: weixinOrderInfo,
success(res) {
console.log('success:' + JSON.stringify(res));
},
fail(err) {
console.log('fail:' + JSON.stringify(err));
}
});
} else {
console.log('请求出错');
}
});
}
})
后台调用微信APP支付接口生成支付的订单数据:微信APP支付文档见文末
自定义调试基座打包测试
注意:微信支付安卓不支持真机调试!需要打包后manifest里的配置才会生效,若只是调试的话,调用的是HBuilder的标准运行基座,只有打包后生成自定义调试基座或者正式打包才会调用manifest里的配置
-
使用公有证书打包完成后安装在安卓手机上,复制Android包名
-
安装签名APP到安卓手机,获取你应用的签名,将复制的Android包名填入,点击获取签名,APP下载地址open.weixin.qq.com/zh_CN/htmle…
-
将Android包名及获取到的签名 填写到微信开放平台上即可
-
以上都配置好了后,选择“运行--运行到手机或模拟器--运行基座选择--自定义调试基座”就可以进行调试啦
支付报错问题
1. “errMsg“: “requestPayment:fail errors“
- 确定appid,noncestr,package,partnerid,prepayid,timestamp,sign 都不为空或者不为undefind。
- 微信支付,上传参数需要是 Object 对象,而不能是 String 类型。
- 包名和签名需要在微信开放平台配置,检查是否已配置,无可回看自定义调试基座打包测试
- 打包或使用自定义基座测试(很重要),即使上面配置正确,也没办法调起支付,你需要打一个包测试,或者使用自定义基座测试(有打印信息)。 自定义基座配置教程地址见文末
- 检查manifest.json 里配置支付参数的支付配置是否已勾选,这里的 appid 和 appsecret 在微信开放平台获取。
- 清除微信缓存。个别时候,缓存也会造成支付失败,比如包名和签名之前测试过,后来又修改了等。
2. 支付签名失败
参数名全为小写。 appid,noncestr,package,partnerid,prepayid,timestamp,sign 这些参数都为小写,注意大小写。 可使用签名验证工具验证签名:pay.weixin.qq.com/wiki/doc/ap…
注意:调起支付接口的签名是二次签名,不是使用预支付的签名,即使用上面参数进行签名返回。
var orderInfo = {
"appid":res.appid,
"noncestr":res.nonceStr,
"package":res.package,
"partnerid":res.partnerid,
"prepayid":res.prepayid,
"timestamp":res.timestamp,
"sign":res.sign
}
相关接口文档
参考文章
总结
以上是本次开发时的过程及所遇到的问题,记录一下~~~