我使用微信支付,回调总是多执行,这个该怎么解决呢?

最开始总是多次回调,改成下面这样后就报错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();
	我应该怎么处理呢?

评论区

JFinal

2018-02-06 17:23

当响应给微信平台太慢时,微信平台会重复回调,以确保业务被正确执行

考虑到一些不确定性因素,无论你的程序响应有多快,都必须要有处理微信平台重复回调的机制

不同的业务处理办法不同,例如,如果是订单支付部分的处理,在订单支付回调后可以将 isPaid 字段置为 1,然后如果微信平台重发回调时,可以通过这个字段值来确定是否已经处理过

未处理则放行,处理过则响应一个值告诉对方已处理

Mr.H

2018-02-06 17:29

@JFinal 我一开始就是这样做的,感觉自己强迫症犯了,就是想把他给弄好。你们的那个官方文档jfinal-weixin这个里面是不是没有支付回调的代码?

Mr.H

2018-02-06 18:15

热门反馈

扫码入社