官方接入文档
异步通知处理步骤
- 验证签名
- 校验订单去重
- 处理业务逻辑
- 响应处理结果
验证签名
参考 公用API
代码示例
https://github.com/Javen205/IJPay-Demo
@RequestMapping(value = "/pay_notify",method={RequestMethod.POST,RequestMethod.GET})
@ResponseBody
public String pay_notify(HttpServletRequest request) {
// 支付结果通用通知文档: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7
String xmlMsg = HttpKit.readData(request);
System.out.println("支付通知="+xmlMsg);
Map<String, String> params = PaymentKit.xmlToMap(xmlMsg);
// String appid = params.get("appid");
// //商户号
// String mch_id = params.get("mch_id");
String result_code = params.get("result_code");
// String openId = params.get("openid");
// //交易类型
// String trade_type = params.get("trade_type");
// //付款银行
// String bank_type = params.get("bank_type");
// // 总金额
// String total_fee = params.get("total_fee");
// //现金支付金额
// String cash_fee = params.get("cash_fee");
// // 微信支付订单号
// String transaction_id = params.get("transaction_id");
// // 商户订单号
// String out_trade_no = params.get("out_trade_no");
// // 支付完成时间,格式为yyyyMMddHHmmss
// String time_end = params.get("time_end");
/////////////////////////////以下是附加参数///////////////////////////////////
String attach = params.get("attach");
// String fee_type = params.get("fee_type");
// String is_subscribe = params.get("is_subscribe");
// String err_code = params.get("err_code");
// String err_code_des = params.get("err_code_des");
// 注意重复通知的情况,同一订单号可能收到多次通知,请注意一定先判断订单状态
// 避免已经成功、关闭、退款的订单被再次更新
// Order order = Order.dao.getOrderByTransactionId(transaction_id);
// if (order==null) {
if(PaymentKit.verifyNotify(params, WxPayApiConfigKit.getWxPayApiConfig().getPaternerKey())){
if (("SUCCESS").equals(result_code)) {
//更新订单信息
log.warn("更新订单信息:"+attach);
//发送通知等
Map<String, String> xml = new HashMap<String, String>();
xml.put("return_code", "SUCCESS");
xml.put("return_msg", "OK");
return PaymentKit.toXml(xml);
}
}
// }
return null;
}
public void pay_notify() {
//获取所有的参数
StringBuffer sbf=new StringBuffer();
Enumeration<String> en=getParaNames();
while (en.hasMoreElements()) {
Object o= en.nextElement();
sbf.append(o.toString()+"="+getPara(o.toString()));
}
log.error("支付通知参数:"+sbf.toString());
// 支付结果通用通知文档: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7
String xmlMsg = HttpKit.readData(getRequest());
System.out.println("支付通知="+xmlMsg);
Map<String, String> params = PaymentKit.xmlToMap(xmlMsg);
// String appid = params.get("appid");
// //商户号
// String mch_id = params.get("mch_id");
String result_code = params.get("result_code");
// String openId = params.get("openid");
// //交易类型
// String trade_type = params.get("trade_type");
// //付款银行
// String bank_type = params.get("bank_type");
// // 总金额
// String total_fee = params.get("total_fee");
// //现金支付金额
// String cash_fee = params.get("cash_fee");
// // 微信支付订单号
// String transaction_id = params.get("transaction_id");
// // 商户订单号
// String out_trade_no = params.get("out_trade_no");
// // 支付完成时间,格式为yyyyMMddHHmmss
// String time_end = params.get("time_end");
/////////////////////////////以下是附加参数///////////////////////////////////
String attach = params.get("attach");
// String fee_type = params.get("fee_type");
// String is_subscribe = params.get("is_subscribe");
// String err_code = params.get("err_code");
// String err_code_des = params.get("err_code_des");
// 注意重复通知的情况,同一订单号可能收到多次通知,请注意一定先判断订单状态
// 避免已经成功、关闭、退款的订单被再次更新
// Order order = Order.dao.getOrderByTransactionId(transaction_id);
// if (order==null) {
if(PaymentKit.verifyNotify(params, WxPayApiConfigKit.getWxPayApiConfig().getPaternerKey())){
if (("SUCCESS").equals(result_code)) {
//更新订单信息
log.warn("更新订单信息:"+attach);
//发送通知等
Map<String, String> xml = new HashMap<String, String>();
xml.put("return_code", "SUCCESS");
xml.put("return_msg", "OK");
renderText(PaymentKit.toXml(xml));
return;
}
}
// }
renderText("");
}