查看: 1969|回复: 0

[Java代码] Java微信支付之关闭订单

发表于 2018-5-4 08:00:00

本文实例为大家分享了java微信支付之关闭订单的具体代码,供大家参考,具体内容如下

官方文档

一、应用场景

商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付
系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口
注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。

二、接口地址

https://api.mch.weixin.qq.com/pay/closeorder

三、请求参数

只能根据自己商户系统的订单号关闭

  1. package com.phil.wechatpay.model.rep;
  2. import java.io.Serializable;
  3. /**
  4. * 关闭订单请求参数(正常XML)
  5. * @author phil
  6. * @date 2017年7月25日
  7. *
  8. */
  9. public class CloseOrderParams extends AbstractPayParams implements Serializable{
  10. /**
  11. *
  12. */
  13. private static final long serialVersionUID = -4206464928803827244L;
  14. private String out_trade_no; //商户订单号
  15. public String getOut_trade_no() {
  16. return out_trade_no;
  17. }
  18. public void setOut_trade_no(String out_trade_no) {
  19. this.out_trade_no = out_trade_no;
  20. }
  21. }
复制代码

四、返回结果

  1. package com.phil.wechatpay.model.resp;
  2. import java.io.Serializable;
  3. import com.phil.common.annotation.NotRequire;
  4. /**
  5. * 关闭订单返回参数(带<![CDATA[]]>XML格式)
  6. *
  7. * @author phil
  8. * @date 2017年7月25日
  9. *
  10. */
  11. public class CloseOrderResult extends AbstractPayResult implements Serializable {
  12. private static final long serialVersionUID = -1996103742747816922L;
  13. private String return_code; // 返回状态码SUCCESS/FAIL
  14. @NotRequire
  15. private String return_msg; //返回信息
  16. /**** return_code 为SUCCESS ****/
  17. private String result_code;// 业务结果
  18. private String result_msg;// 业务结果描述
  19. @NotRequire
  20. private String err_code;// 错误返回的信息描述
  21. @NotRequire
  22. private String err_code_des;// 错误返回的信息描述
  23. }
复制代码

五、关闭订单

  1. package com.phil.wechatpay.controller;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8. import com.phil.common.config.WechatConfig;
  9. import com.phil.common.util.HttpReqUtil;
  10. import com.phil.common.util.PayUtil;
  11. import com.phil.common.util.SignatureUtil;
  12. import com.phil.common.util.XmlUtil;
  13. import com.phil.wechatpay.model.rep.CloseOrderParams;
  14. import com.phil.wechatpay.model.resp.CloseOrderResult;
  15. import com.phil.wechatpay.service.WechatPayService;
  16. /**
  17. * 关闭订单
  18. * @author phil
  19. * @date 2017年7月25日
  20. *
  21. */
  22. @Controller
  23. @RequestMapping("/wxpay/")
  24. public class WechatPayCloseOrderController {
  25. @Autowired
  26. private WechatPayService wechatPayService;
  27. @ResponseBody
  28. @RequestMapping("closeOrder")
  29. public CloseOrderResult closeOrder(HttpServletRequest request, HttpServletResponse response) throws Exception {
  30. CloseOrderResult closeOrderResult = null;
  31. CloseOrderParams closeOrderParams = new CloseOrderParams();
  32. closeOrderParams.setAppid(WechatConfig.APP_ID);
  33. closeOrderParams.setMch_id(WechatConfig.MCH_ID);
  34. closeOrderParams.setNonce_str(PayUtil.createNonceStr());
  35. closeOrderParams.setOut_trade_no("");//自己传入
  36. //请求的xml
  37. String closeOrderXml = wechatPayService.abstractPayToXml(closeOrderParams);//签名合并到service
  38. // 返回<![CDATA[SUCCESS]]>格式的XML
  39. String closeOrderResultXmL = HttpReqUtil.HttpsDefaultExecute(HttpReqUtil.POST_METHOD,WechatConfig.CLOSE_ORDER_URL, null, closeOrderXml);
  40. // 进行签名校验
  41. if (SignatureUtil.checkIsSignValidFromWeiXin(closeOrderResultXmL)) {
  42. closeOrderResult = XmlUtil.getObjectFromXML(closeOrderResultXmL, CloseOrderResult.class);
  43. }
  44. return closeOrderResult;
  45. }
  46. }
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员之家。



回复

使用道具 举报