Jagtu
Jagtu
  • 发布:2021-06-23 16:19
  • 更新:2022-06-29 11:52
  • 阅读:1691

APP微信支付无法支付

分类:uni-app

安卓端保持:显示错误 requestPayment:fail:[payment微信:-1]General errors
iOS端,没有反应;

                console.log("provider:" + provider + ",credential:" + JSON.stringify(credential));  
                uni.showLoading({  
                    title: '支付中',  
                    mask: true  
                });  
                this.isPaying = true  
                uni.requestPayment({  
                    provider: provider,  
                    orderInfo: credential,  
                    success: (e) => {  
                        uni.showToast({  
                            title:'支付成功',  
                            icon:'success'  
                        })  
                    },  
                    fail: (e) => {  
                        uni.showModal({  
                            title: '支付失败',  
                            content: JSON.stringify(e),  
                            showCancel: false  
                        })  
                    },  
                    complete: (e) => {  
                        uni.hideLoading()  
                    }  
                })

打印出来的内容:
16:17:38.437 provider:wxpay,credential:{"timeStamp":"1624436240","package":"Sign=WXPay","appid":"wxb3b26e0f0d1ba6f1","sign":"9FFC1E55E191935781359F6F33C6EAA0","partnerid":"1519092971","prepayid":"wx23161737843508911a41351a7dfccb0000","nonceStr":"uzi6z7zgzjvfw0r5txuyv2x1r4vtpvbt"}

这段支付凭证通过原生调用微信支付SDK,可以正常发起微信支付并能支付成返回APP。

以上测试是打包出来APP,安装到真机之后测试

2021-06-23 16:19 负责人:无 分享
已邀请:
DCloud_Android_ST

DCloud_Android_ST

看下这篇文章 希望对你有帮助 https://ask.dcloud.net.cn/article/34896

  • Jagtu (作者)

    1.首先排查自己的包名和签名是否与申请微信开放平台的APK包名和签名一致;一致

    2.离线打包和云打包时微信支付的appid是否和微信开放平台的appid一致;一致

    3.服务端首先排除是否有下发所需要的参数;一致,而且原生端可以拿该参数正常发起支付。


    目前还是没有查询到问题,大佬可以帮忙看看吗,我给你一个demo

    2021-06-24 15:20

  • 小小菜76055421

    用的是unipay获取支付参数,以前用vue2.0没问题,现在改成vue3.0了,同样的代码,小程序都ok,就是app不行

    2022-03-18 15:16

Jagtu

Jagtu (作者)

分别使用安卓和iOS原生开发了2个demo测试,均能够正常支付成功。由此排查应该不是服务端返回数据的签名问题。

Jagtu

Jagtu (作者)

问题解决了。
回顾一下,以下是原先的支付参数,支付失败

{"timeStamp":"1624436240","package":"Sign=WXPay","appid":"wxb3b26e0f0d1ba6f1","sign":"9FFC1E55E191935781359F6F33C6EAA0","partnerid":"1519092971","prepayid":"wx23161737843508911a41351a7dfccb0000","nonceStr":"uzi6z7zgzjvfw0r5txuyv2x1r4vtpvbt"}

修改为如下之后,就成功了。要主要参数名全小写

{"timestamp":"1624436240","package":"Sign=WXPay","appid":"wxb3b26e0f0d1ba6f1","sign":"9FFC1E55E191935781359F6F33C6EAA0","partnerid":"1519092971","prepayid":"wx23161737843508911a41351a7dfccb0000","noncestr":"uzi6z7zgzjvfw0r5txuyv2x1r4vtpvbt"}

总结,还是要主要核对

1、首先排查自己的包名和签名是否与申请微信开放平台的APK包名和签名一致;
2、离线打包和云打包时微信支付的appid是否和微信开放平台的appid一致;
3、确定发起支付的参数之参数名是否完全一致;

  • systhinker

    参数名小写,这算个什么毛病,为啥uni这么多恶心的坑

    2024-06-19 11:09

1***@qq.com

1***@qq.com

发起支付的orderInfo中的参数都是必填项,且参数名必须全小写,否则ios无法触发uni.requestPaymentAPI。
//订单对象,从服务器获取
var orderInfo = {
"appid": "wx499****7c70e", // 应用ID(AppID)
"partnerid": "148*52", // 商户号(PartnerID)
"prepayid": "wx202254****
fbe90000", // 预支付交易会话ID
"package": "Sign=WXPay", // 固定值
"noncestr": "c5sEwbaNPiXAF3iv", // 随机字符串
"timestamp": 1597935292, // 时间戳(单位:秒)
"sign": "A842B45937F6EFF60DEC7A2EAA52D5A0" // 签名,这里用的 MD5 签名
};

该问题目前已经被锁定, 无法添加新回复