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
订单编号直接发送取消完成
在查询一下订单看看状态是不是取消成功
本文章仓库WeChatPayScaffolding
【写作提纲】
I. 前言
A. 通过前言表达我每次的文章内容是什么东西
II. 取消订单接口实现
A. 集结生活之中的场景来解析他的逻辑
III. 查询订单接口实现
A. 完善取消订单接口当中已经实现了的功能
IV. 测试
A. 通过测试用例一步步排查编写是否存在BUG