最开始总是多次回调,改成下面这样后就报错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,然后如果微信平台重发回调时,可以通过这个字段值来确定是否已经处理过
未处理则放行,处理过则响应一个值告诉对方已处理