Java微信支付之关闭订单
本文实例为大家分享了java微信支付之关闭订单的具体代码,供大家参考,具体内容如下
官方文档
一、应用场景
商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付
系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口
注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。
二、接口地址
https://api.mch.weixin.qq.com/pay/closeorder
三、请求参数
只能根据自己商户系统的订单号关闭
packagecom.phil.wechatpay.model.rep;
importjava.io.Serializable;
/**
*关闭订单请求参数(正常XML)
*@authorphil
*@date2017年7月25日
*
*/
publicclassCloseOrderParamsextendsAbstractPayParamsimplementsSerializable{
/**
*
*/
privatestaticfinallongserialVersionUID=-4206464928803827244L;
privateStringout_trade_no;//商户订单号
publicStringgetOut_trade_no(){
returnout_trade_no;
}
publicvoidsetOut_trade_no(Stringout_trade_no){
this.out_trade_no=out_trade_no;
}
}
四、返回结果
packagecom.phil.wechatpay.model.resp;
importjava.io.Serializable;
importcom.phil.common.annotation.NotRequire;
/**
*关闭订单返回参数(带XML格式)
*
*@authorphil
*@date2017年7月25日
*
*/
publicclassCloseOrderResultextendsAbstractPayResultimplementsSerializable{
privatestaticfinallongserialVersionUID=-1996103742747816922L;
privateStringreturn_code;//返回状态码SUCCESS/FAIL
@NotRequire
privateStringreturn_msg;//返回信息
/****return_code为SUCCESS****/
privateStringresult_code;//业务结果
privateStringresult_msg;//业务结果描述
@NotRequire
privateStringerr_code;//错误返回的信息描述
@NotRequire
privateStringerr_code_des;//错误返回的信息描述
}
五、关闭订单
packagecom.phil.wechatpay.controller;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.ResponseBody;
importcom.phil.common.config.WechatConfig;
importcom.phil.common.util.HttpReqUtil;
importcom.phil.common.util.PayUtil;
importcom.phil.common.util.SignatureUtil;
importcom.phil.common.util.XmlUtil;
importcom.phil.wechatpay.model.rep.CloseOrderParams;
importcom.phil.wechatpay.model.resp.CloseOrderResult;
importcom.phil.wechatpay.service.WechatPayService;
/**
*关闭订单
*@authorphil
*@date2017年7月25日
*
*/
@Controller
@RequestMapping("/wxpay/")
publicclassWechatPayCloseOrderController{
@Autowired
privateWechatPayServicewechatPayService;
@ResponseBody
@RequestMapping("closeOrder")
publicCloseOrderResultcloseOrder(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{
CloseOrderResultcloseOrderResult=null;
CloseOrderParamscloseOrderParams=newCloseOrderParams();
closeOrderParams.setAppid(WechatConfig.APP_ID);
closeOrderParams.setMch_id(WechatConfig.MCH_ID);
closeOrderParams.setNonce_str(PayUtil.createNonceStr());
closeOrderParams.setOut_trade_no("");//自己传入
//请求的xml
StringcloseOrderXml=wechatPayService.abstractPayToXml(closeOrderParams);//签名合并到service
//返回格式的XML
StringcloseOrderResultXmL=HttpReqUtil.HttpsDefaultExecute(HttpReqUtil.POST_METHOD,WechatConfig.CLOSE_ORDER_URL,null,closeOrderXml);
//进行签名校验
if(SignatureUtil.checkIsSignValidFromWeiXin(closeOrderResultXmL)){
closeOrderResult=XmlUtil.getObjectFromXML(closeOrderResultXmL,CloseOrderResult.class);
}
returncloseOrderResult;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。