uni-app android app微信支付

2,223 阅读3分钟

前言

最近在对接uniapp微信支付时,通过在uniapp官网及微信支付文档查找,发现相关资料比较分散,需要通过多方面查找并整合资料,功夫不负有心人啊,终于开发成功啦!现把资料整合一下,希望能给开发人员多点灵感~~~。

App平台支付流程

流程:支付平台功能申请 -> manifest.json 里配置支付参数 -> uni-app 里调用 API 进行支付

支付平台功能申请

  1. 先到微信开放平台 申请移动应用并开通支付功能,申请应用后可以获取 AppID 和 AppSecret 值
  2. 应用接入微信商户平台,选择 App 支付
  3. 开通支付功能后可获取支付业务服务器配置数据:PARTNER(财付通商户号)、PARTNER_KEY(财付通密钥)、PAYSIGNKEY(支付签名密钥)

manifest.json 里配置支付参数

需要将从微信开放平台申请的appid,填回到 manifest.json--APP模块配置-支付-微信支付中。 image.png

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里的配置

  1. 使用公有证书打包完成后安装在安卓手机上,复制Android包名 image.png

  2. 安装签名APP到安卓手机,获取你应用的签名,将复制的Android包名填入,点击获取签名,APP下载地址open.weixin.qq.com/zh_CN/htmle… QQ截图20210521172710.png

  3. 将Android包名及获取到的签名 填写到微信开放平台上即可 QQ截图20210521172658.png

  4. 以上都配置好了后,选择“运行--运行到手机或模拟器--运行基座选择--自定义调试基座”就可以进行调试啦

支付报错问题

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
        }

相关接口文档

参考文章

总结

以上是本次开发时的过程及所遇到的问题,记录一下~~~