zoukankan      html  css  js  c++  java
  • 浅析微信支付:查询订单和关闭订单

    本文是【浅析微信支付】系列文章的第七篇,主要讲解微信商户平台的订单查询和关闭接口的使用。


    浅析微信支付系列已经更新六篇了哟~,没有看过的朋友们可以看一下哦。

    浅析微信支付:支付结果通知

    浅析微信支付:统一下单接口

    浅析微信支付:微信公众号网页授权

    声明:这里的查询订单关闭订单接口仅适用于 小程序支付、公共号支付、扫码支付、APP支付刷卡支付方式此处并不适用。

    1、查询订单

    以下为微信官方的查询订单文档:

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

    1.1. 应用场景

    该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。

    需要调用查询接口的情况:
    ◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
    ◆ 调用支付接口后,返回系统错误或未知交易状态情况;
    ◆ 调用刷卡支付API,返回USERPAYING的状态;
    ◆ 调用关单或撤销接口API之前,需确认支付状态;
    

    1.2. 接口链接

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

    1.3. 是否需要证书

    不需要

    1.4. 调用接口

    查询订单接口需要使用微信订单号或者商户订单号来查询,其他参数为商户平台信息的公共参数,为常量,此处省略解释。

    微信订单号:transaction_id(微信的订单号,建议优先使用)
    商户订单号:out_trade_no(商户系统内部订单号)
    

    此两个参数必填其中之一,微信推荐使用微信订单号来查询,下面为实现代码:

    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方法为封装的sdk方法,具体实现请参考作者github源码。

    对于商户关键信息的写入,公共方法为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;
    }
    

    以上为查询微信订单的使用方式,具体的返回参数请参考官方文档。

    2、关闭订单

    以下为微信官方的关闭订单文档:

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

    2.1. 应用场景

    以下情况需要调用关单接口:

    商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;
    系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。
    

    注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。

    2.2. 接口链接

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

    2.3. 是否需要证书

    不需要

    2.4. 调用接口

    关闭订单接口需要使用商户订单号来查询,其他参数为商户平台信息的公共参数,为常量,此处省略解释。

    商户订单号:out_trade_no(商户系统内部订单号)
    

    PS:关单接口只能使用微信订单号来查询,和查询接口不同,下面为实现代码:

    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();
        }
    }
    

    关单接口的公共参数设置和查询订单一致,这里就不重复解释了,具体的返回参数请参考微信官方文档。

    PS:关单接口可能会调用失败,已支付、已关闭等场景,所以需要开发者注意官方文档中的错误码,对异常情况进行处理。

    结语

    以上为查询订单关闭订单的调用方式,如果是刷卡支付方式,他的关闭订单接口为撤销订单:reverse,在作者sdk源码中也有具体的实现方式。

    预告:下一篇文章 申请退款和退款回调接口,敬请期待!!!

    ​如果想要提前一览源码的小伙伴,可以先看看我的 github,地址如下:

    ​https://github.com/YClimb/wxpay-sdk/blob/master/README.md
    

    加作者私人微信,作者微信号如下 yclimb,标明 微信支付 可拉入微信支付讨论群与小伙伴一起探讨哦,一定要标明 微信支付 哦~

    到此本文就结束了,关注公众号查看更多推送!!!


    关注我的公众号


  • 相关阅读:
    623. Add One Row to Tree 将一行添加到树中
    771. Jewels and Stones 珠宝和石头
    216. Combination Sum III 组合总数三
    384. Shuffle an Array 随机播放一个数组
    382. Linked List Random Node 链接列表随机节点
    向github项目push代码后,Jenkins实现其自动构建
    centos下安装Jenkins
    python提取批量文件内的指定内容
    批处理实现:批量为文件添加注释
    python抓取每期双色球中奖号码,用于分析
  • 原文地址:https://www.cnblogs.com/yclimb/p/9934041.html
Copyright © 2011-2022 走看看