zoukankan      html  css  js  c++  java
  • Java微信支付开发之关闭订单

    官方文档

    一、应用场景

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

    二、接口地址

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

    三、请求参数

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

    package com.phil.wechatpay.model.rep;
    
    import java.io.Serializable;
    
    /**
     * 关闭订单请求参数(正常XML)
     * @author phil
     * @date  2017年7月25日
     *
     */
    public class CloseOrderParams extends AbstractPayParams implements Serializable{
    	
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = -4206464928803827244L;
    	
    	private String out_trade_no; //商户订单号 
    	
    	public String getOut_trade_no() {
    		return out_trade_no;
    	}
    
    	public void setOut_trade_no(String out_trade_no) {
    		this.out_trade_no = out_trade_no;
    	}
    }

    四、返回结果

    package com.phil.wechatpay.model.resp;
    
    import java.io.Serializable;
    
    import com.phil.common.annotation.NotRequire;
    
    /**
     * 关闭订单返回参数(带<![CDATA[]]>XML格式)
     * 
     * @author phil
     * @date 2017年7月25日
     *
     */
    public class CloseOrderResult extends AbstractPayResult implements Serializable {
    	
    	private static final long serialVersionUID = -1996103742747816922L;
    	private String return_code; // 返回状态码SUCCESS/FAIL
    	@NotRequire
    	private String return_msg; //返回信息
    
    	/**** return_code 为SUCCESS ****/
    	private String result_code;// 业务结果
    	private String result_msg;// 业务结果描述	
    	@NotRequire
    	private String err_code;// 错误返回的信息描述
    	@NotRequire
    	private String err_code_des;// 错误返回的信息描述
    }

    五、关闭订单

    package com.phil.wechatpay.controller;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.phil.common.config.WechatConfig;
    import com.phil.common.util.HttpReqUtil;
    import com.phil.common.util.PayUtil;
    import com.phil.common.util.SignatureUtil;
    import com.phil.common.util.XmlUtil;
    import com.phil.wechatpay.model.rep.CloseOrderParams;
    import com.phil.wechatpay.model.resp.CloseOrderResult;
    import com.phil.wechatpay.service.WechatPayService;
    
    /**
     * 关闭订单
     * @author phil
     * @date  2017年7月25日
     *
     */
    @Controller
    @RequestMapping("/wxpay/")
    public class WechatPayCloseOrderController {
    	
    	@Autowired
    	private WechatPayService wechatPayService;
    	
    	@ResponseBody
    	@RequestMapping("closeOrder")
    	public CloseOrderResult closeOrder(HttpServletRequest request, HttpServletResponse response) throws Exception {
    		CloseOrderResult closeOrderResult = null;
    		CloseOrderParams closeOrderParams = new CloseOrderParams();
    		closeOrderParams.setAppid(WechatConfig.APP_ID);
    		closeOrderParams.setMch_id(WechatConfig.MCH_ID);
    		closeOrderParams.setNonce_str(PayUtil.createNonceStr());
    		closeOrderParams.setOut_trade_no("");//自己传入
    		//请求的xml
    		String closeOrderXml = wechatPayService.abstractPayToXml(closeOrderParams);//签名合并到service
    		// 返回<![CDATA[SUCCESS]]>格式的XML
    		String closeOrderResultXmL = HttpReqUtil.HttpsDefaultExecute(HttpReqUtil.POST_METHOD,WechatConfig.CLOSE_ORDER_URL, null, closeOrderXml);
    		// 进行签名校验
    		if (SignatureUtil.checkIsSignValidFromWeiXin(closeOrderResultXmL)) {
    			closeOrderResult = XmlUtil.getObjectFromXML(closeOrderResultXmL, CloseOrderResult.class);
    		}
    		return closeOrderResult;
    	}
    }
    本文为Phil Jing原创文章,未经博主允许不得转载,如有问题请直接回复或者加群。
  • 相关阅读:
    模拟赛总结
    2018.04.06学习总结
    2018.04.06学习总结
    Java实现 LeetCode 672 灯泡开关 Ⅱ(数学思路问题)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
  • 原文地址:https://www.cnblogs.com/phil_jing/p/15615860.html
Copyright © 2011-2022 走看看