> 小程序: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(例如能力未完全开通、账号状态异常、商品配置问题等)。

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