uni-app 安卓离线打包微信支付问题

uni-app 安卓离线打包微信支付问题

开发环境 版本号 项目创建方式
Mac 15.3.2 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

PC开发环境操作系统版本号:15.3.2

HBuilderX类型:正式

HBuilderX版本号:4.57

手机系统:Android

手机系统版本号:Android 10

手机厂商:OPPO

手机机型:OPPO R11

页面类型:vue

vue版本:vue3

打包方式:离线

App下载地址或H5网址:https://www.pgyer.com/Ci65K3

示例代码:

async function weixinAppPay(option) {  
    loadingPay.value = true  
    let orderInfo = await getOrderInfoMini(option.entryNum)  
    if (!orderInfo) {  
        option.fail && option.fail('获取支付信息失败')  
        return  
    }  
    console.log('--------orderInfo--------')  
    console.log(orderInfo)  
    uni.requestPayment({  
        provider: 'wxpay',  
        orderInfo: {  
            "appid" : orderInfo.appid,  
            "partnerid": orderInfo.partnerid,  
            "prepayid": orderInfo.prepayid,  
            "package" : orderInfo.package,  
            "noncestr": orderInfo.noncestr,  
            "timestamp" : orderInfo.timestamp,  
            "sign": orderInfo.sign  
        },  
        success: e => {  
            option.success && option.success(e)  
        },  
        fail: res => {  
            option.fail && option.fail(res.errMsg || '支付失败!')  
        },  
        complete: () => {  
            loadingPay.value = false  
        }  
    })  
}

操作步骤:

  1. 如代码中,组织app支付参数,
  2. 调用uni.requestPayment统一支付API
  3. 此方法直接回调结果,success: e => { option.success && option.success(e) },
  4. 在3的步骤中我还没在手机上选择微信(因为微信有分身),便直接回调结果了

预期结果:

当我选择完具体的微信,并输入密码后才应该走成功回调

实际结果:

还没有选择微信,只是调用uni.requestPayment 此方法,成功回调已经执行

bug描述:

安卓端微信支付调用uni.requestPayment后,直接走了支付成功回调,回调结果如下:

{'channel":{"id":"wxpay","description":"微信","serviceReady":true}), errMsg:"requestPayment:ok"}

此时因为本身安卓机有微信分身,还没有选择具体使用哪个微信支付,也没输入支付密码,怎么就直接走支付成功回调呢?

使用环境:

  • 离线打包,
  • JDK17,
  • compileSdk 35,
  • buildToolsVersion ‘35.0.0’

附件有视频,操作过程,没有选择微信支付,但支付统一接口uni.requestPayment 就有成功回调。


更多关于uni-app 安卓离线打包微信支付问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

OPPO手机下遇到此问题

更多关于uni-app 安卓离线打包微信支付问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


苹果下支付没问题,安卓下不同机型有不同表现,比如OPPO下没调起微信的时候就显示支付成功。问了技术:云打包没问题,离线打包有此问题。但是还不能用云打包,之前我们云打包会有其他问题,所以只能离线打包。

根据描述,这是典型的微信支付回调过早触发问题,常见于安卓离线打包环境。以下是关键分析:

  1. 问题本质:
  • 回调过早触发表明微信支付SDK检测到可用支付环境就直接返回成功
  • 这种情况通常发生在未正确处理微信多实例(分身)场景
  1. 可能原因:
  • 离线打包时未正确配置微信支付SDK的多实例支持
  • AndroidManifest.xml中微信支付相关配置不完整
  • 微信SDK版本与当前系统兼容性问题
  1. 解决方案: 检查以下配置项:
<!-- AndroidManifest.xml -->
<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:launchMode="singleTop"/>
<meta-data
    android:name="WX_APPID"
    android:value="你的微信APPID"/>
  1. 代码调整建议: 在支付回调中增加状态验证:
uni.requestPayment({
    success: e => {
        if(e.channel.serviceReady) {
            // 真实支付成功处理
        }
    }
})
回到顶部