皮纳兹软件开发
皮纳兹软件开发
  • 发布:2026-04-13 10:09
  • 更新:2026-05-02 11:35
  • 阅读:352

【报Bug】微信虚拟支付的支付回调能接收到微信的回调通知,但是往下的逻辑走不通

分类:uniCloud

产品分类: uniCloud/App

操作步骤:

微信虚拟支付后台的token等配置已经成功,前端调起支付也没有问题,就是支付成功的回调通知解析出问题。配置路径是: /uni-pay-co/wxpayVirtualNotify

预期结果:

预期能正常验签并调用回调

实际结果:

实际上从日志看出来,并没有解析到正确的notifyType

bug描述:

微信虚拟支付的支付回调能接收到微信的回调通知,但是往下的逻辑走不通,notifyType是unknown.
配置路径是: /uni-pay-co/wxpayVirtualNotify
下面是微信传回来的日志:


请求入参: {  
  "args": {  
    "path": "/wxpayVirtualNotify",  
    "httpMethod": "POST",  
    "headers": {  
      "content-length": "752",  
      "x5-uuid": "97e79652b6914d1402ed94d9eb185cfb",  
      "x-client-ip": "175.24.211.157",  
      "x-forwarded-for": "175.24.211.157, 47.111.193.48, 123.57.117.184",  
      "pragma": "no-cache",  
      "accept": "*/*",  
      "x-real-ip": "175.24.211.157",  
      "x-sinfo": "on",  
      "host": "fc-mp-6ead1297-df1a-4af7-95f4-7753ba9d9729.next.bspapp.com",  
      "content-type": "text/xml",  
      "x-forwarded-by": "172.28.195.22:80",  
      "user-agent": "Mozilla/4.0"  
    },  
    "queryStringParameters": {  
      "signature": "23a4d42d30bcc2088c3e59900d34a49c9321a049",  
      "timestamp": "1776045362",  
      "nonce": "930753982",  
      "openid": "oILNd7HBi6u4X2U1YaC-Baq8Nefg"  
    },  
    "isBase64Encoded": false,  
    "body": "<xml><ToUserName><![CDATA[gh_e64a5d8f7f7c]]></ToUserName>\n<FromUserName><![CDATA[oILNd7HBi6u4X2U1YaC-Baq8Nefg]]></FromUserName>\n<CreateTime>1776045362</CreateTime>\n<MsgType><![CDATA[event]]></MsgType>\n<Event><![CDATA[xpay_coin_pay_notify]]></Event>\n<OpenId><![CDATA[oILNd7HBi6u4X2U1YaC-Baq8Nefg]]></OpenId>\n<OutTradeNo><![CDATA[mnwjjaj47vjl8qckt7nfjo2bblkk]]></OutTradeNo>\n<WeChatPayInfo>\n<MchOrderNo><![CDATA[VPO260413095533057267441]]></MchOrderNo>\n<TransactionId><![CDATA[4500000126202604131975169580]]></TransactionId>\n<PaidTime>1776045361</PaidTime>\n</WeChatPayInfo>\n<Env>0</Env>\n<CoinInfo>\n<Quantity>1</Quantity>\n<OrigPrice>100</OrigPrice>\n<ActualPrice>100</ActualPrice>\n<Attach><![CDATA[]]></Attach>\n</CoinInfo>\n<RetryTimes>0</RetryTimes>\n</xml>"  
  },  
  "requestId": "ac1cc3161776045362859181371"  
}  
[uni-pay-co/ac1cc3161776045362859181371/57ms/DEBUG] httpInfo:  {  
  path: '/wxpayVirtualNotify',  
  httpMethod: 'POST',  
  headers: {  
    'content-length': '752',  
    'x5-uuid': '97e79652b6914d1402ed94d9eb185cfb',  
    'x-client-ip': '175.24.211.157',  
    'x-forwarded-for': '175.24.211.157, 47.111.193.48, 123.57.117.184',  
    pragma: 'no-cache',  
    accept: '*/*',  
    'x-real-ip': '175.24.211.157',  
    'x-sinfo': 'on',  
    host: 'fc-mp-6ead1297-df1a-4af7-95f4-7753ba9d9729.next.bspapp.com',  
    'content-type': 'text/xml',  
    'x-forwarded-by': '172.28.195.22:80',  
    'user-agent': 'Mozilla/4.0'  
  },  
  queryStringParameters: {  
    signature: '23a4d42d30bcc2088c3e59900d34a49c9321a049',  
    timestamp: '1776045362',  
    nonce: '930753982',  
    openid: 'oILNd7HBi6u4X2U1YaC-Baq8Nefg'  
  },  
  isBase64Encoded: false,  
  body: '<xml><ToUserName><![CDATA[gh_e64a5d8f7f7c]]></ToUserName>\n' +  
    '<FromUserName><![CDATA[oILNd7HBi6u4X2U1YaC-Baq8Nefg]]></FromUserName>\n' +  
    '<CreateTime>1776045362</CreateTime>\n' +  
    '<MsgType><![CDATA[event]]></MsgType>\n' +  
    '<Event><![CDATA[xpay_coin_pay_notify]]></Event>\n' +  
    '<OpenId><![CDATA[oILNd7HBi6u4X2U1YaC-Baq8Nefg]]></OpenId>\n' +  
    '<OutTradeNo><![CDATA[mnwjjaj47vjl8qckt7nfjo2bblkk]]></OutTradeNo>\n' +  
    '<WeChatPayInfo>\n' +  
    '<MchOrderNo><![CDATA[VPO260413095533057267441]]></MchOrderNo>\n' +  
    '<TransactionId><![CDATA[4500000126202604131975169580]]></TransactionId>\n' +  
    '<PaidTime>1776045361</PaidTime>\n' +  
    '</WeChatPayInfo>\n' +  
    '<Env>0</Env>\n' +  
    '<CoinInfo>\n' +  
    '<Quantity>1</Quantity>\n' +  
    '<OrigPrice>100</OrigPrice>\n' +  
    '<ActualPrice>100</ActualPrice>\n' +  
    '<Attach><![CDATA[]]></Attach>\n' +  
    '</CoinInfo>\n' +  
    '<RetryTimes>0</RetryTimes>\n' +  
    '</xml>'  
}  
[uni-pay-co/ac1cc3161776045362859181371/196ms/DEBUG] notifyType:  unknown  
[uni-pay-co/ac1cc3161776045362859181371/196ms/DEBUG] ---------!非支付通知!---------  
请求响应状态: success

附件是我查到的打日志的代码截图

2026-04-13 10:09 负责人:无 分享
已邀请:
Yorry

Yorry - 酷炫又逗比的程序员

我也遇到同样的问题,看uni-pay的源码排查,最后找到原因了。

uni-pay/uniCloud/cloudfunctions/common/uni-pay/index.js 里的 checkNotifyType 函数只解析了JSON,要取 body.Event 字段。

解决办法:微信小程序里配置消息推送时,数据格式用【JSON】,消息加密方式用【明文模式】或【兼容模式】。

===============================================

如果是【JSON】+【安全模式】也会报“notifyType: unknown”,因为安全模式下数据加密了,body里没有Event字段。希望Uni-Pay后续能支持【安全模式】

  • 皮纳兹软件开发 (作者)

    请问一下, uni-pay/uniCloud/cloudfunctions/common/uni-pay/index.js 这个路径的文件我看的是压缩过的源码,请问在哪里能找到这个没有压缩过的源码呢

    2026-05-01 22:19

  • 皮纳兹软件开发 (作者)

    回复 皮纳兹软件开发: 哦哦,找到了,原来是这个仓库 https://gitee.com//dcloud//uniPay

    2026-05-02 10:41

DCloud_uniCloud_VK

DCloud_uniCloud_VK

私发下你的微信虚拟支付配置

  • Yorry

    我定位到原因了,麻烦优化下UniPay吧

    2026-04-30 16:11

8***@qq.com

8***@qq.com

我也是这个问题,兄弟弄好么,如何解决的?

  • 皮纳兹软件开发 (作者)

    我是把类型改成json,然后 notifyType: payment,这个字段是正常的,但是现在又有新的问题,就是我的提示 ---------!签名验证未通过!--------- 我还在查问题。等于还没完全解决

    2026-05-01 22:22

皮纳兹软件开发

皮纳兹软件开发 (作者)

最终完美解决了,主要是配置问题,1: 数据格式要用 JSON。2: 消息加密方式要用 兼容模式。
我大概说下我的踩坑步骤,给有同样问题的兄弟做个参考。
我首先把 数据格式设置成 xml ,消息加密方式用明文模式。后台设置时正常,但是支付回调出现 notifyType: unknown。
后来我改成 json,notifyType正常但是签名又出问题了,我跟踪调试后发现有两次验签,第一次验签成功,第二次验签失败,我把后台消息加密方式改成兼容模式,两次验签就都成功了。

要回复问题请先登录注册