午夜91福利视频,午夜成人在线观看,午夜在线视频免费观看,午夜福利短视频,精品午夜成人免费视频APP

小程序模板網

淺析微信支付:查詢訂單和關閉訂單

發布(bu)時(shi)間:2018-11-12 08:43 所屬欄目:小程序開發教程

淺(qian)析微信支付系列(lie)已經更(geng)新六篇了喲~,沒(mei)有看(kan)過的(de)朋友(you)們可(ke)以看(kan)一下哦。

淺(qian)析微信(xin)支付(fu):支付(fu)結果通知(zhi)

淺析微信(xin)支付:統(tong)一下單接口

淺析微信(xin)支付:微信(xin)公眾號網頁(ye)授權

聲明:這里的查詢訂(ding)單、關閉訂(ding)單接(jie)口僅適用于(yu) 小(xiao)程序支(zhi)付、公共號(hao)支(zhi)付、掃碼(ma)支(zhi)付、APP支(zhi)付,刷(shua)卡支(zhi)付方式此(ci)處并不適用。

1、查詢訂單

以(yi)下為微信官方的查詢(xun)訂單文檔:

//pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2

1.1. 應用場景

該接(jie)口(kou)提供(gong)所有(you)微信(xin)支付訂單(dan)的(de)(de)查詢(xun),商(shang)戶可以通過查詢(xun)訂單(dan)接(jie)口(kou)主動(dong)查詢(xun)訂單(dan)狀態,完成下一步的(de)(de)業務邏輯。

需要調用查詢接口的情況:
◆ 當商戶后臺、網絡、服務器等出現異常,商戶系統最終未接收到支付通知;
◆ 調用支付接口后,返回系統錯誤或未知交易狀態情況;
◆ 調用刷卡支付API,返回USERPAYING的狀態;
◆ 調用關單或撤銷接口API之前,需確認支付狀態;

1.2. 接口鏈接

//api.mch.weixin.qq.com/pay/orderquery

1.3. 是否需要證書

不需要

1.4. 調用接口

查詢訂(ding)(ding)單(dan)接口需要使(shi)用微信訂(ding)(ding)單(dan)號(hao)或(huo)者商戶訂(ding)(ding)單(dan)號(hao)來查詢,其他參數為(wei)商戶平臺信息的公共參數,為(wei)常量,此處省略解釋。

微信訂單號:transaction_id(微信的訂單號,建議優先使用)
商戶訂單號:out_trade_no(商戶系統內部訂單號)

此兩個(ge)參數必填其中之一,微(wei)(wei)信推薦使用微(wei)(wei)信訂單號來查詢,下面為(wei)實現代碼:

private void doOrderQuery() {
    System.out.println("查詢訂單");
    HashMap<String, String> data = new HashMap<String, String>();
    // data.put("out_trade_no", out_trade_no);
    data.put("transaction_id", "4008852001201608221962061594");
    try {
        WXPay wxPay = new WXPay(WXPayConfigImpl.getInstance());
        Map<String, String> r = wxPay.orderQuery(data);
        System.out.println(r);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

wxPay.orderQuery方法為(wei)封裝(zhuang)的sdk方法,具體實現請參(can)考作者github源(yuan)碼。

對于商戶關鍵信息的寫入,公共(gong)方法為wxPay.fillRequestData,實現如下:

/**
 * 向 Map 中添加 appid、mch_id、nonce_str、sign_type、sign <br>
 * 該函數適用于商戶適用于統一下單等接口,不適用于紅包、代金券接口
 *
 * @param reqData r
 * @return map
 * @throws Exception e
 */
public Map<String, String> fillRequestData(Map<String, String> reqData) throws Exception {
    reqData.put("appid", config.getAppID());
    reqData.put("mch_id", config.getMchID());
    reqData.put("nonce_str", WXPayUtil.generateNonceStr());
    if (SignType.MD5.equals(this.signType)) {
        reqData.put("sign_type", WXPayConstants.MD5);
    } else if (SignType.HMACSHA256.equals(this.signType)) {
        reqData.put("sign_type", WXPayConstants.HMACSHA256);
    }
    reqData.put("sign", WXPayUtil.generateSignature(reqData, config.getKey(), this.signType));
    return reqData;
}

以(yi)上為查(cha)詢微信(xin)訂單的(de)使(shi)用方(fang)式,具體(ti)的(de)返回參數請參考官方(fang)文檔。

2、關閉訂單

以(yi)下為微信官方的關閉訂(ding)單文檔:

//pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_3

2.1. 應用場景

以下情(qing)況(kuang)需要調用關單接口:

商戶訂單支付失敗需要生成新單號重新發起支付,要對原訂單號調用關單,避免重復支付;
系統下單后,用戶支付超時,系統退出不再受理,避免用戶繼續,請調用關單接口。

注意:訂單(dan)生成后不能(neng)馬上調用關(guan)單(dan)接口,最短(duan)調用時間間隔(ge)為5分鐘。

2.2. 接口鏈接

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

2.3. 是否需要證書

不需要

2.4. 調用接口

關(guan)閉(bi)訂(ding)單接口需(xu)要使用商戶訂(ding)單號(hao)來查詢,其他(ta)參(can)數為商戶平臺信息的公共參(can)數,為常(chang)量,此處(chu)省略(lve)解釋。

商戶訂單號:out_trade_no(商戶系統內部訂單號)

PS:關單(dan)接口只能使(shi)用微信(xin)訂(ding)單(dan)號(hao)來查詢(xun),和查詢(xun)接口不同,下面為實現代碼:

private void doOrderClose() {
    System.out.println("關閉訂單");
    HashMap<String, String> data = new HashMap<String, String>();
    data.put("out_trade_no", out_trade_no);
    try {
        WXPay wxPay = new WXPay(WXPayConfigImpl.getInstance());
        Map<String, String> r = wxPay.closeOrder(data);
        System.out.println(r);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

關單接口的(de)公共參(can)數設置和(he)查詢(xun)訂單一致,這里就不重復解釋了,具體的(de)返回參(can)數請參(can)考微信官方文檔。

 PS:關單(dan)接口可能會(hui)調用失敗,已支付、已關閉等(deng)場景,所(suo)以需要開(kai)發者注意(yi)官(guan)方文(wen)檔中的錯誤(wu)碼(ma),對異(yi)常情況進行處(chu)理。

結語

以上為查詢訂單、關(guan)閉訂單的(de)調用方(fang)式,如果是刷卡支付方(fang)式,他的(de)關(guan)閉訂單接(jie)口為撤銷(xiao)訂單:reverse,在作者sdk源碼中也(ye)有具(ju)體的(de)實現方(fang)式。



易優小(xiao)程序(企業版(ban))+靈活api+前后代(dai)碼(ma)開源 碼(ma)云倉庫(ku):
本文地址://www.jinyoudianli.com/wxmini/doc/course/24941.html 復制鏈接 如(ru)需定制請聯系易優客服(fu)咨(zi)詢:

工作日 8:30-12:00 14:30-18:00
周六及(ji)部分節假(jia)日提供值班服務

易小優
轉人工 ×