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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。