最开始总是多次回调,改成下面这样后就报错response.getWriter().write(resXml);这个已经在使用中 String inputLine; String notityXml = ""; String resXml = ""; try { while ((inputLine = getRequest().getReader().readLine()) != null) { notityXml += inputLine; } getRequest().getReader().close(); } catch (Exception e) { System.out.println(e); } Map<String, String> m = parseXmlToList2(notityXml); WxPayResult wpr = new WxPayResult(); wpr.setAppid(m.get("appid").toString()); wpr.setBankType(m.get("bank_type").toString()); wpr.setCashFee(m.get("cash_fee").toString()); wpr.setFeeType(m.get("fee_type").toString()); wpr.setMchId(m.get("mch_id").toString()); wpr.setNonceStr(m.get("nonce_str").toString()); wpr.setOpenid(m.get("openid").toString()); // out_trade_no:系统本身订单ID String out_trade_no = m.get("out_trade_no").toString(); wpr.setOutTradeNo(out_trade_no); wpr.setResultCode(m.get("result_code").toString()); wpr.setReturnCode(m.get("return_code").toString()); wpr.setSign(m.get("sign").toString()); wpr.setTimeEnd(m.get("time_end").toString()); wpr.setTotalFee(m.get("total_fee").toString()); wpr.setTradeType(m.get("trade_type").toString()); // transaction_id:微信支付系统订单ID,有微信支付系统生成 wpr.setTransactionId(m.get("transaction_id").toString()); // Boolean re = false; HttpServletResponse response = getResponse(); if ("SUCCESS".equals(wpr.getResultCode())) { /* re = */dealResult(out_trade_no); // 支付成功 resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"; System.out.println(resXml); } else { resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>"; System.out.println(resXml); } // response.reset(); response.getWriter().write(resXml); response.getWriter().close(); 我应该怎么处理呢?
考虑到一些不确定性因素,无论你的程序响应有多快,都必须要有处理微信平台重复回调的机制
不同的业务处理办法不同,例如,如果是订单支付部分的处理,在订单支付回调后可以将 isPaid 字段置为 1,然后如果微信平台重发回调时,可以通过这个字段值来确定是否已经处理过
未处理则放行,处理过则响应一个值告诉对方已处理