苍穹外卖-微信支付

苍穹外卖-微信支付

微信支付接入指引 - 微信支付商户平台 (qq.com)

实现微信支付的流程,我们在这里选择JSAPI

微信支付.JPG

JSAPI下单 - JSAPI支付 | 微信支付商户文档中心 (qq.com)

需要准备微信支付平台证书和商户私钥文件,因为微信需要请求回调接口,所以就算是测试阶段,我们的项目也需要暴露在公网上,这里可以使用内网穿透解决

但我们没有以上的条件,所以这个微信支付无法真实的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
* 用户支付
* TODO: 正常情况下,在这里应该调用微信支付的正常流程完成微信支付,但我们没有商户号,所以当点击支付按钮之后直接更改数据库的支付状态为已支付
* TODO: 所以,我们并没有调用weChatPayUtil工具类和PayNotifyController的回调业务接口
* TODO: 也没有用到WeChatProperties配置属性类和有关的配置文件
*
* @param ordersPaymentDTO
* @return
*/
@Override
public OrderPaymentVO payment(OrdersPaymentDTO ordersPaymentDTO) {
// 当前登录用户id
Long userId = BaseContext.getCurrentId();
User user = userMapper.getById(userId);

//调用微信支付接口,生成预支付交易单
// JSONObject jsonObject = weChatPayUtil.pay(
// ordersPaymentDTO.getOrderNumber(), //商户订单号
// new BigDecimal(0.01), //支付金额,单位 元
// "苍穹外卖订单", //商品描述
// user.getOpenid() //微信用户的openid
// );
//
// if (jsonObject.getString("code") != null && jsonObject.getString("code").equals("ORDERPAID")) {
// throw new OrderBusinessException("该订单已支付");
// }
//
// OrderPaymentVO vo = jsonObject.toJavaObject(OrderPaymentVO.class);
// vo.setPackageStr(jsonObject.getString("package"));
//
// return vo;
paySuccess(ordersPaymentDTO.getOrderNumber()); // 直接修改订单状态为支付成功

return new OrderPaymentVO();
}


/**
* 支付成功,修改订单状态
*
* @param outTradeNo
*/
public void paySuccess(String outTradeNo) {

// 根据订单号查询订单
Orders ordersDB = orderMapper.getByNumber(outTradeNo);

// 根据订单id更新订单的状态、支付方式、支付状态、结账时间
Orders orders = Orders.builder()
.id(ordersDB.getId())
.status(Orders.TO_BE_CONFIRMED)
.payStatus(Orders.PAID)
.checkoutTime(LocalDateTime.now())
.build();

orderMapper.update(orders);
}


苍穹外卖-微信支付
http://blog.170827.xyz/2024/08/17/苍穹外卖-微信支付/
作者
XIAOBAI
发布于
2024年8月17日
许可协议