uni-app 最新HBuilderX打包后微信和支付宝支付app下失败 h5仍然有效 【已解决】

uni-app 最新HBuilderX打包后微信和支付宝支付app下失败 h5仍然有效 【已解决】

开发环境 版本号 项目创建方式
Windows win10 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.1.13

手机系统:Android

手机系统版本号:Android 10

手机厂商:华为

手机机型:pixel 4a

页面类型:vue

打包方式:云端

示例代码:

// APP支付  
if((data.type == 'alipay' || data.type == 'wechat') && data.method == 'app'){  
    let provider = data.type;  
    if(data.type == 'wechat'){  
        provider = 'wxpay';  
    }  
    uni.requestPayment({  
        provider: provider,  
        orderInfo: res,  
        success: (e) => {  
            console.log("success", e);  
            this.paySuccess();  
        },  
        fail: (e) => {  
            uni.showModal({  
                content: this.lang.lang.user.money.recharge_error + e.errMsg,  
                showCancel: false  
            })  
        },  
        complete: () => {  
            this.loading = false;  
            this.disabled = false;  
        }  
    })  
}

操作步骤:

  • 使用最新的hbuilderx打包
  • 在app内尝试微信和支付宝支付

预期结果:

  • 正常跳转到微信和支付宝

实际结果:

  • 未跳转,支付宝spinner转了一下后报错,微信直接报错

bug描述:

最新hbuilder打包后,app以前管用的微信和支付宝支付,现在不管用了,提示的错误也很模糊。

前一步orderInfo

{
"partner_order_id": "20210605033041000010059726_a4qw",
"full_name": "YOBOLINE SERVICES INC.",
"partner_name": "Coolkop",
"channel": "Wechat",
"sdk_params": {
"package": "Sign=WXPay",
"appid": "wxd66b2195089d8f15",
"sign": "9798B64667E4602EDF39D66298069968",
"partnerid": "443608615",
"prepayid": "wx05153042860500b60a8e19e49ce9c70000",
"noncestr": "qnIRSiKJ2ZrjYfErSb34HLzpEcxa1Y",
"timestamp": "1622878243"
},
"result_code": "SUCCESS",
"partner_code": "YWOFZA",
"order_id": "0619320210605073041985050",
"return_code": "SUCCESS"
}

原因:原来是要用sdk_params里的数据


更多关于uni-app 最新HBuilderX打包后微信和支付宝支付app下失败 h5仍然有效 【已解决】的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 最新HBuilderX打包后微信和支付宝支付app下失败 h5仍然有效 【已解决】的实战教程也可以访问 https://www.itying.com/category-93-b0.html


问题已定位:支付参数结构错误导致。在App端调用uni.requestPayment时,微信和支付宝支付需要直接传递sdk_params中的完整支付参数,而非外层订单数据。

修正后的核心代码:

uni.requestPayment({
    provider: provider,
    orderInfo: data.sdk_params, // 关键修改:直接使用sdk_params
    success: (e) => {
        this.paySuccess();
    },
    fail: (e) => {
        console.log('支付失败:', e);
    }
})
回到顶部