支付后收到多次结果通知,发送一次小程序模板消息,很多时候会收到两条
发布于 6 年前 作者 kyan 11559 次浏览 来自 问答

我的支付结果通知的逻辑是,收到通知后,检查订单状态是否已支付:

1,若是,则发送

<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>

给结果通知,再return返回。

2,若未支付,则更新订单状态为已支付,然后发送模板消息给微信用户,最后发送

<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>

给结果通知。

从日志可以看到一个支付订单能收到5条以上的结果通知,而我只在收到第一条时给用户发模板消息,可用户大多数时候收到的是两条消息。

6 回复

有两点:

1,我在这边无从判断微信后台是否接收到我发出的<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>

2,发一次模板消息怎么会收到两条消息?

收到通知,校验签名
if(签名正确){
  if(未通知过){
    更新为已通知
  }
  echo <xml>..success........
}else{
  exit;
}

就是因为判断不了微信是否成功收到返回结果,所以自己加个字段标识是否已通知

你平常使用微信支付后,都会收到微信发的通知,所以支付功能不需要调用模板消息!!

能否提供一个收到两条消息的具体case, 包括调用的时间点,请求的fromid以及openid

除非你的模板消息需要带上其他信息

嗯,谢谢,我已经给订单增加状态字段了,并凭此判断是否继续进行下一步动作,所以我才确认只会发一次模板消息。

自己加个字段状态判断吧

https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7

支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。

对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 (通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)

__注意:同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。 __    

推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。

特别提醒:商户系统对于支付结果通知的内容一定要做签名验证,并校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄漏导致出现“假通知”,造成资金损失。

回到顶部