收藏
回答

小程序虚拟支付 wx.requestVirtualPayment 错误,麻烦看下?

关键信息

  • 小程序 AppID:wx279137ac641a2674
  • offerId:1450482034
  • 环境:env=0(测试/沙箱)
  • mode:short_series_goods
  • 商品:productId=aa_aa,goodsPrice=100(分),buyQuantity=1,currencyType=CNY
  • app_key:虚拟支付测试环境密钥,长度 32,前缀 X03y...(出于安全不提供全量)

复现订单(可选其一)

  • outTradeNo:VP17726320951078892

signData(原文,与小程序端 wx.requestVirtualPayment 的 signData 完全一致)

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

signature 说明(已通过)

  • signature 使用 HMAC_SHA256(session_key, signData原文),提交 64 位 HEX
  • 若改成 Base64 会立刻返回 SIGNATURE_INVALID,因此可确认当前 signature 已被微信侧正确验签(严格按 signData 原文)

我方 paySig 计算与尝试(均返回 PAY_SIG_INVALID)

我们已在服务端输出每种 need_sign_msg 原文与对应 paySig(HEX 小写/大写/Base64),并在小程序端逐一尝试,结果均为:

requestVirtualPayment:fail PAY_SIG_INVALID

已尝试的 need_sign_msg 口径包括(以下为原文示例):

  • JSON 原文拼接(URI + '&' + post_body)

requestVirtualPayment&{signData_json原文}

  • 换行分隔

requestVirtualPayment\n{signData_json原文}

  • mode 作为额外参数(不进入 signData,以避免影响 signature)

requestVirtualPayment&{signData_json原文}&mode=short_series_goods

  • 字段展开 querystring(解析 signData 后按 key 字典序拼接)

requestVirtualPayment&attach=...&buyQuantity=1&currencyType=CNY&env=0&goodsPrice=100&mode=short_series_goods&offerId=1450482034&outTradeNo=VP...&productId=aa_aa

(含对 value rawurlencode 的版本也试过)

需要微信侧协助确认的问题

  • 请微信侧针对 outTradeNo=VP17726320951078892 在后台核验并说明:PAY_SIG_INVALID 的精确原因(例如 app_key 不匹配、环境/能力未开通、路由到其他 offerId/appid、账号策略/灰度等)。
  • 请明确:微信侧验签实际使用的 need_sign_msg 原文(或等价拼接规则/参与字段),与我方上述哪一种不同?是否存在文档未披露的隐含字段参与 paySig 验签?


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

3 个回答

  • 从君华
    从君华
    03-18

    算法有问题吗?什么语言写的?

    03-18
    有用
    回复
  • 发飙的蜗牛
    发飙的蜗牛
    03-07

    最后什么结果

    03-07
    有用
    回复 1
    • python
      python
      03-09
      石沉大海了,没有官方的人员回复,找不到官方人员,最终没有解决
      03-09
      回复
  • 智能回答 智能回答 本次回答由AI生成
    03-04
    有用
登录 后发表内容