苍穹外卖-微信支付
苍穹外卖-微信支付
实现微信支付的流程,我们在这里选择JSAPI
JSAPI下单 - JSAPI支付 | 微信支付商户文档中心 (qq.com)
需要准备微信支付平台证书和商户私钥文件,因为微信需要请求回调接口,所以就算是测试阶段,我们的项目也需要暴露在公网上,这里可以使用内网穿透解决
但我们没有以上的条件,所以这个微信支付无法真实的实现
/**
* 用户支付
* 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);
}