Java微信支付之關(guān)閉訂單
本文實(shí)例為大家分享了java微信支付之關(guān)閉訂單的具體代碼,供大家參考,具體內(nèi)容如下
一、應(yīng)用場(chǎng)景
商戶訂單支付失敗需要生成新單號(hào)重新發(fā)起支付,要對(duì)原訂單號(hào)調(diào)用關(guān)單,避免重復(fù)支付
系統(tǒng)下單后,用戶支付超時(shí),系統(tǒng)退出不再受理,避免用戶繼續(xù),請(qǐng)調(diào)用關(guān)單接口
注意:訂單生成后不能馬上調(diào)用關(guān)單接口,最短調(diào)用時(shí)間間隔為5分鐘。
二、接口地址
https://api.mch.weixin.qq.com/pay/closeorder
三、請(qǐng)求參數(shù)
只能根據(jù)自己商戶系統(tǒng)的訂單號(hào)關(guān)閉
package com.phil.wechatpay.model.rep; import java.io.Serializable; /** * 關(guān)閉訂單請(qǐng)求參數(shù)(正常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; //商戶訂單號(hào) 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; } }
四、返回結(jié)果
package com.phil.wechatpay.model.resp; import java.io.Serializable; import com.phil.common.annotation.NotRequire; /** * 關(guān)閉訂單返回參數(shù)(帶<![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; // 返回狀態(tài)碼SUCCESS/FAIL @NotRequire private String return_msg; //返回信息 /**** return_code 為SUCCESS ****/ private String result_code;// 業(yè)務(wù)結(jié)果 private String result_msg;// 業(yè)務(wù)結(jié)果描述 @NotRequire private String err_code;// 錯(cuò)誤返回的信息描述 @NotRequire private String err_code_des;// 錯(cuò)誤返回的信息描述 }
五、關(guān)閉訂單
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; /** * 關(guān)閉訂單 * @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("");//自己傳入 //請(qǐng)求的xml String closeOrderXml = wechatPayService.abstractPayToXml(closeOrderParams);//簽名合并到service // 返回<![CDATA[SUCCESS]]>格式的XML String closeOrderResultXmL = HttpReqUtil.HttpsDefaultExecute(HttpReqUtil.POST_METHOD,WechatConfig.CLOSE_ORDER_URL, null, closeOrderXml); // 進(jìn)行簽名校驗(yàn) if (SignatureUtil.checkIsSignValidFromWeiXin(closeOrderResultXmL)) { closeOrderResult = XmlUtil.getObjectFromXML(closeOrderResultXmL, CloseOrderResult.class); } return closeOrderResult; } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java實(shí)現(xiàn)訂單超時(shí)未支付自動(dòng)取消的8種方法總結(jié)
- Java使用延時(shí)隊(duì)列搞定超時(shí)訂單處理的場(chǎng)景
- Java?實(shí)現(xiàn)訂單未支付超時(shí)自動(dòng)取消功能(京東商城為例)
- 基于Java創(chuàng)建一個(gè)訂單類代碼實(shí)例
- Java實(shí)現(xiàn)商城訂單超時(shí)取消功能
- java后臺(tái)實(shí)現(xiàn)支付寶支付接口和支付寶訂單查詢接口(前端為APP)
- java web在高并發(fā)和分布式下實(shí)現(xiàn)訂單號(hào)生成唯一的解決方案
- Java開發(fā)如何把數(shù)據(jù)庫(kù)里的未付款訂單改成已付款
相關(guān)文章
springboot啟動(dòng)類如何剔除掃描某個(gè)包
這篇文章主要介紹了springboot啟動(dòng)類如何剔除掃描某個(gè)包,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11用Java集合中的Collections.sort方法如何對(duì)list排序(兩種方法)
本文通過兩種方法給大家介紹java集合中的Collections.sort方法對(duì)list排序,第一種方式是list中的對(duì)象實(shí)現(xiàn)Comparable接口,第二種方法是根據(jù)Collections.sort重載方法實(shí)現(xiàn),對(duì)collections.sort方法感興趣的朋友一起學(xué)習(xí)吧2015-10-10spring項(xiàng)目實(shí)現(xiàn)單元測(cè)試過程解析
這篇文章主要介紹了spring項(xiàng)目實(shí)現(xiàn)單元測(cè)試過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10spring cloud config 配置中心快速實(shí)現(xiàn)過程解析
這篇文章主要介紹了spring cloud config 配置中心快速實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Java8時(shí)間接口LocalDateTime詳細(xì)用法
最近看別人項(xiàng)目源碼,發(fā)現(xiàn)Java8新的日期時(shí)間API很方便強(qiáng)大,所以整理了這篇文章,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05Springboot如何根據(jù)實(shí)體類生成數(shù)據(jù)庫(kù)表
這篇文章主要介紹了Springboot如何根據(jù)實(shí)體類生成數(shù)據(jù)庫(kù)表的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09