拂晓2024
拂晓2024
  • 发布:2025-03-18 19:53
  • 更新:2025-03-20 12:49
  • 阅读:413

【报Bug】App调用微信支付,使用uni.requestPayment这个api,sign可以任意填写<32位数的字符串,正确的32位签名却显示验签失败

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 3.99

手机系统: 全部

手机厂商: 华为

页面类型: vue

vue版本: vue2

打包方式: 离线

项目创建方式: HBuilderX

App下载地址或H5⽹址: https://ios.u-area.com/m/pages/Common/AppDownload

测试过的手机:

Vivo se和 IPhone 15 pro

示例代码:
let orderInfo = {  
    appid: res.appId,  
    noncestr: res.nonceStr,  
    package: res.package,  
    partnerid: res.partnerId,  
    prepayid: res.prepayId,  
    timestamp: res.timestamp,  
    sign: res.sign.slice(0,31)  
}  
console.warn('查看orderInfo',orderInfo)  
uni.requestPayment({  
    provider: 'wxpay',  
    orderInfo: orderInfo,  
    success: res1 => {},  
    fail: res1 => {},  
})

操作步骤:

使用后端正常二次加密的32位长度的sign调用uni.requestPayment接口

预期结果:

能正常拉起微信支付

实际结果:

报错:支付验证签名失败

bug描述:

App调用微信支付,使用uni.requestPayment这个api,sign可以任意填写<32位数的字符串,正确的32位签名却显示验签失败,sign可以填写任意的字符,只要不超过31位数即可掉起微信支付,并且sign不能为空,sign的意义不知道是啥

2025-03-18 19:53 负责人:DCloud_App_Array 分享
已邀请:
DCloud_App_Array

DCloud_App_Array

微信支付的规范sign就是32位的,api自身不会校验sign的长度,会将数据提交给微信支付SDK处理的。
如果显示眼前失败,说明生成的订单不正确。请查看微信支付的后台文档:统一下单。推荐使用 uni-pay管理后台订单。

  • 拂晓2024 (作者)

    可是实测32位长度的sign,会显示验签失败,反而截取一下之后才能成功,并且也找到几篇帖子,看到也遇到了这种情况,例如这篇文章:https://www.pimspeak.com/uni-app-using-wechat-app-pay.html

    2025-03-20 15:25

  • 拂晓2024 (作者)

    并且使用微信的验签工具,查看了一下,和我们生成的签名是一致的,说明我们的签名是没有问题的

    2025-03-20 15:25

  • DCloud_App_Array

    回复 拂晓2024: 你的sign字段数据从哪里生成的?这个数据应该是微信的统一下单接口返回的哈。

    2025-03-20 18:29

要回复问题请先登录注册