设为首页 加入收藏

TOP

从零玩转系列之微信支付实战PC端支付微信取消接口搭建 | 技术创作特训营第一期 (二)
2023-08-26 21:11:25 】 浏览:82
Tags:从零玩 支付实 支付微
foService.lambdaUpdate().eq(OrderInfo::getOrderNo, orderNo).set(OrderInfo::getOrderStatus, OrderStatus.CLOSED.getType()).update(); return; } // step 2 还未支付才能取消订单 if (state.getTrade_state().equals(OrderStatus.NOTPAY.name())) { // step 2 进行调用微信关闭订单接口 sendCloseRequest(orderNo); // step 2 更新商户端的订单状态用户取消订单 this.orderInfoService.lambdaUpdate().eq(OrderInfo::getOrderNo, orderNo).set(OrderInfo::getOrderStatus, OrderStatus.CANCEL.getType()).update(); } }

抽出通用订单关闭代码

文档: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_3.shtml

 /**
     * 发送关闭订单请求
     *
     * @param orderNo 订单编号
     */
    @SneakyThrows
    private void sendCloseRequest(String orderNo) {
        log.info("关闭订单, 订单号:{}", orderNo);
        String url = String.format(wxPayConfig.getDomain().concat(WxApiType.CLOSE_ORDER_BY_NO.getType()), orderNo);
        HttpPost httpPost = new HttpPost(url);
        Map<String, Object> paramsMap = new HashMap<>(1);
        paramsMap.put("mchid", wxPayConfig.getMchId());
        String jsonParams = JSONUtil.toJsonStr(paramsMap);
        log.info("请求参数 ===> {}", jsonParams);
        StringEntity entity = new StringEntity(jsonParams, "utf-8");
        entity.setContentType("application/json");
        httpPost.setEntity(entity);
        httpPost.setHeader("Accept", "application/json");

        try (CloseableHttpResponse response = wxPayClient.execute(httpPost)) {
            log.info("关单响应: {}", response.getEntity());
            log.info("解析body {}", buildBodyParams(response, Map.class));
        }
    }

到这里订单取消就完毕了

二、查询订单接口

根据上面编写的查询订单方法完善一下

修改 WechatNativeController

/**
 * 查询订单
 */
@PostMapping("/query/{orderNo}")
public R<WeChartOrderInfo> query(@PathVariable String orderNo) {
    log.info("查询订单");
    return R.ok(wxPayService.queryOrder(orderNo));
}

修改 WxPayService

/**
 * 查询订单信息
 *
 * @param orderNo 订单号
 * @return 订单信息
 */
@SneakyThrows
public WeChartOrderInfo queryOrder(String orderNo) {
    return this.selectOrderInfo(orderNo);
}

好了查询接口也写完了so easy to happy !

我们来测试看看是什么效果咯~

请在此添加图片描述

三、测试

下单

我们还没编写到前端来所以还是和之前的文章操作一样使接口调试工具操作这里我使用之前推荐的IDEA FastRequest插件如下图

发送请求

发送

发送

生成二维码

复制codeUrl参数打开草料 https://cli.im/url 不要支付哦我们确保订单是否成功创建,确保二维码没有过期哦

下单

我们也可以先看看订单啥状态上面我们不是写了个查询订单详情的嘛

查询订单详情

调用取消订单接口

复制 orderNo 订单编号直接发送取消完成

取消订单

在查询一下订单看看状态是不是取消成功

over

over

本文章仓库WeChatPayScaffolding

【写作提纲】

I. 前言

A. 通过前言表达我每次的文章内容是什么东西

II. 取消订单接口实现

A. 集结生活之中的场景来解析他的逻辑

III. 查询订单接口实现

A. 完善取消订单接口当中已经实现了的功能

IV. 测试

A. 通过测试用例一步步排查编写是否存在BUG

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇SpringBoot3进阶用法 下一篇quarkus依赖注入之九:bean读写锁

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目