收藏
回答

微信支付成功后,重复通知。

微信支付成功后,接收到通知支付成功,并返回成功,但是仍然会收到重复的支付成功通知。

返回的结果如下

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


代码(nodejs):

const xml = '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
res.end(xml);


请问这样的返回有什么问题吗?为什么会一直重复通知?

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

6 个回答

  • 军龙
    军龙
    2021-04-27
    @RequestMapping("/kv/" + CommonConstants.WX_PAY)
    public void wxProcessKV(HttpServletRequest request, HttpServletResponse response) {
        try {
            RequestWrapper requestWrapper = new RequestWrapper(request);
            String message = new String(requestWrapper.getDataStream(), StandardCharsets.UTF_8);
            // created comment by szd,2019-06-19,v2.4.1
            TpspLogger.applicationInfoLog(logger,"微信支付异步消息参数", message);
    
            if (StringUtils.isBlank(message)) {
                return;
            }
            CallbackBO callbackBO = new CallbackBO();
            callbackBO.setGroupId(CommonConstants.WX_PAY);
            Map<String, String> map = new HashMap<>();
            map.put(Fields.MESSAGE, message);
            callbackBO.setParam(map);
            payWxRpc.callback(callbackBO);
            response.getWriter().write(CommonConstants.WX_RETURN);
        } catch (Exception e) {
            // created comment by szd,2019-06-19,v2.4.1
            TpspLogger.alertErrorLog(logger,"处理微信异步结果异常", e);
        }
    }
    public static final String WX_RETURN = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
    
    
    
    切记: 返回时候不要使用 @ResponseBody  该注解返回的数据是携带 ""  ,使用该注解实际返回值是:
    【"\"<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>\""】,使用HttpServletResponse 返回的字符串是不会携带"" 的
    
    微信要的只是:<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>
    
    
    2021-04-27
    有用 2
    回复 1
    • Lee_
      Lee_
      2022-01-26
      谢谢,解决了!
      但是有个小疑问,为什么我使用了@ResponseBody和没使用的时候,用postman对接口进行测试,得到的数据都是一致的,并没有多一个"",导致我比较难判断是哪出问题。这是为啥呢,是postman对这个""进行优化了吗?
      2022-01-26
      回复
  • 心清
    心清
    2020-06-24

    这问题到最后我们都没解决,完全复制的官方的返回内容也不好使,关注下吧

    2020-06-24
    有用 1
    回复
  • 头不痛
    头不痛
    2020-04-26

    请问这个问题解决了吗?

    2020-04-26
    有用 1
    回复 1
    • 军龙
      军龙
      2021-04-27
      看下我的回复,解决的了
      2021-04-27
      回复
  • 要么忙于生存,要么忙于死亡
    要么忙于生存,要么忙于死亡
    2021-03-17
    这个设置了content_type='text/xml'也不行,因为字符串的拼接格式问题 可以参考码蝗网的支付API,自已写格式,return一次或二次就绝对OK了
    
    2021-03-17
    有用
    回复
  • 小五유
    小五유
    2020-12-23

    今天也遇到了这个问题,官方都不帮忙调试下吗

    2020-12-23
    有用
    回复
  • 微信支付技术助手1
    微信支付技术助手1
    2019-11-06

    检查一下返回的参数是否格式不对,或者是否按照文档要求的传递

    收到通知后,要严格按照文档要求返回成功的参数。只要是按照文档返回的。一般不会出现重复回调的情况。


    2019-11-06
    有用
    回复 5
    • hector
      hector
      2020-02-06
      遇到了同样的问题,能不能不成功的时候给一个错误提示啊,都不知道自己到底哪里返回的有问题
      2020-02-06
      回复
    • hector
      hector
      2020-02-06
      现在这种情况根本都没法调试,完全不知道什么导致的
      2020-02-06
      回复
    • 🐒
      🐒
      2020-09-25
      人家都把返回结果给你贴出来了,,你不能直接指出问题吗?只是所看文档,但是你们的文档看起来很老的样子了。
      2020-09-25
      回复
    • 2020-09-25
      真恶心!!
      2020-09-25
      回复
    • 2020-09-25
      你回复的好恶心,都给你写出来了,指出一下会死啊
      2020-09-25
      回复
登录 后发表内容