收藏
回答

微信小程序虚拟支付,无法支付

> 小程序:wx279137ac641a2674

> OfferID:1450482034

> 环境:沙箱(env = 0)

> 沙箱 app_key:32 位,前缀为 X03y...

>

> 我们按文档实现了虚拟支付签名,signature 使用 HEX 已通过校验,不再报 SIGNATURE_INVALID

> 但无论如何,wx.requestVirtualPayment 都恒定返回 PAY_SIG_INVALID

>

> 本次请求的关键信息如下(请帮忙用你们服务端验签工具确认):

>

> 1)signData(即 post_body):

>

>



> {"env":0,"offerId":"1450482034","buyQuantity":1,"currencyType":"CNY","productId":"aa_aa","goodsPrice":100,"outTradeNo":"VP17725261140371932","attach":"{\"vipGrade\":2,\"pricePayType\":\"payMonthly\",\"functiontype\":4}"}

>





>

> 2)我们用于计算 paySig 的待签名字符串 need_sign_msg:

>

>



> requestVirtualPayment&{"env":0,"offerId":"1450482034","buyQuantity":1,"currencyType":"CNY","productId":"aa_aa","goodsPrice":100,"outTradeNo":"VP17725261140371932","attach":"{\"vipGrade\":2,\"pricePayType\":\"payMonthly\",\"functiontype\":4}"}

>





>

> 3)我们计算出的 paySig(HEX):

>

>



> c95fc0203d6442dbabe9dcfe07f525557649267de8267918d276fef99e1a4d2c

>





>

> 4)前端实际调用参数(其中 signData 字符串与上面完全一致):

>

>



> wx.requestVirtualPayment({

>   signData: "<与上面完全相同的 JSON 字符串>",

>   signature: "<HMAC_SHA256(session_key, signData) 的 64 位 HEX>",

>   paySig: "c95fc0203d6442dbabe9dcfe07f525557649267de8267918d276fef99e1a4d2c",

>   mode: "short_series_goods",

>   success,

>   fail

> })

>





>

> 5)返回结果:

>

>



> requestVirtualPayment:fail PAY_SIG_INVALID

>





>

> 请帮忙在你们服务端用上述 need_sign_msg 与我们配置在后台的 app_key 重新计算一次 paySig,看是否与我们给出的值一致;

> 如不一致,烦请告知你们实际使用的验签字符串规则(是否还有其他字段、固定字段顺序等);

> 如一致,再帮忙排查是否还有其他业务配置前置条件,也会统一报成 PAY_SIG_INVALID(例如能力未完全开通、账号状态异常、商品配置问题等)。


回答关注问题邀请回答
收藏

2 个回答

  • Memory (私信不回复)
    Memory (私信不回复)
    03-03

    报错就说明你计算的不一致了

    03-03
    有用
    回复
  • 智能回答 智能回答 本次回答由AI生成
    03-03
    有用
登录 后发表内容