diff --git a/src/main/java/org/springblade/modules/desk/controller/OrderController.java b/src/main/java/org/springblade/modules/desk/controller/OrderController.java index 4f731a2..68d0d06 100644 --- a/src/main/java/org/springblade/modules/desk/controller/OrderController.java +++ b/src/main/java/org/springblade/modules/desk/controller/OrderController.java @@ -176,10 +176,10 @@ public class OrderController { * 支付成功回调 */ @PostMapping("/paySuccessCallback") - public R paySuccessCallback(@RequestParam String id) { + public R paySuccessCallback(@RequestBody Order order) { LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); lambdaUpdateWrapper - .eq(Order::getId, id) + .eq(Order::getId, order.getId()) .set(Order::getStatus, OrderStatusEnum.ORDER_STATUS_UNSEND.getCode()) .set(Order::getPaymentTime, DateUtil.now()) ; @@ -210,7 +210,6 @@ public class OrderController { return R.status(orderService.update(null, lambdaUpdateWrapper)); } - /** * 确认收货 */ diff --git a/src/main/java/org/springblade/modules/desk/entity/Order.java b/src/main/java/org/springblade/modules/desk/entity/Order.java index 069357c..4f4fa5d 100644 --- a/src/main/java/org/springblade/modules/desk/entity/Order.java +++ b/src/main/java/org/springblade/modules/desk/entity/Order.java @@ -24,6 +24,11 @@ public class Order extends BaseEntity { */ private String orderNo; + /** + * 微信订单编号 + */ + private String outTradeNo; + /** * 商品名称 */ diff --git a/src/main/java/org/springblade/modules/weixin/controller/AppEbLoginController.java b/src/main/java/org/springblade/modules/weixin/controller/AppEbLoginController.java index a0a5fe5..f6a4b95 100644 --- a/src/main/java/org/springblade/modules/weixin/controller/AppEbLoginController.java +++ b/src/main/java/org/springblade/modules/weixin/controller/AppEbLoginController.java @@ -100,16 +100,28 @@ public class AppEbLoginController { */ @PostMapping("/createOrder") public R createOrder(@RequestBody PayDTO payDTO) { + // 根据订单号查询订单 Order order = orderService.getOne(Wrappers.lambdaQuery().eq(Order::getOrderNo, payDTO.getOutTradeNo())); if (order == null) { throw new ServiceException("该订单不存在"); } + // 关闭上次生成的微信预支付订单号 + if (StringUtils.isNotBlank(order.getOutTradeNo())) { + WxPayUtils.cloceOrderJSApiV3(order.getOutTradeNo()); + } // Double totalPrice = order.getTotalPrice() * 100; // int total = totalPrice.intValue(); int total = 1; - return R.data(WxPayUtils.getPayParam(payDTO.getOpenId(), payDTO.getOutTradeNo(), total)); + + // 生成随机订单号 + String outTradeNo = WxPayUtils.generateNonceStr(); + + // 修改微信预支付订单号 + order.setOutTradeNo(outTradeNo); + orderService.updateById(order); + return R.data(WxPayUtils.getPayParam(payDTO.getOpenId(), outTradeNo, total)); } @PostMapping("/cloceOrder") diff --git a/src/main/java/org/springblade/modules/weixin/controller/WeChatAddressController.java b/src/main/java/org/springblade/modules/weixin/controller/WeChatAddressController.java index 0120e19..9c8d509 100644 --- a/src/main/java/org/springblade/modules/weixin/controller/WeChatAddressController.java +++ b/src/main/java/org/springblade/modules/weixin/controller/WeChatAddressController.java @@ -1,6 +1,7 @@ package org.springblade.modules.weixin.controller; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; import org.springblade.common.cache.AddressCache; @@ -24,9 +25,8 @@ public class WeChatAddressController { private final IWeChatAddressService weChatAddressService; @GetMapping("/list") - public R> list(WeChatUser weChatUser, Query query) { - return R.data(weChatAddressService.page(Condition.getPage(query), - Wrappers.lambdaQuery().eq(weChatUser.getId() != null, WeChatAddress::getUserId, weChatUser.getId()))); + public R> list(String id, Query query) { + return R.data(weChatAddressService.page(Condition.getPage(query), Wrappers.lambdaQuery().eq(StringUtils.isNotBlank(id), WeChatAddress::getUserId, id))); } @GetMapping("/get-default-address") diff --git a/src/main/java/org/springblade/modules/weixin/utils/WxPayUtils.java b/src/main/java/org/springblade/modules/weixin/utils/WxPayUtils.java index 1c5fb55..f4eb037 100644 --- a/src/main/java/org/springblade/modules/weixin/utils/WxPayUtils.java +++ b/src/main/java/org/springblade/modules/weixin/utils/WxPayUtils.java @@ -45,7 +45,6 @@ public class WxPayUtils { // JSApi下单url地址 public static String JSApiPayUrl = "https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi"; - public static String ClocePayUrl = "https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/{out_trade_no}/close"; // 商户私钥 获取对应的签名需要 在微信支付商户平台-账户中心-API安全里设置 养宠物那边复制的 // 对应文档 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/open/pay/chapter2_1.shtml @@ -244,7 +243,6 @@ public class WxPayUtils { return ""; } - /** * 第四步:生成支付参数 * 生成支付所需的参数 @@ -274,7 +272,6 @@ public class WxPayUtils { return json; } - /** * 先调用下单,然后调用生成支付参数 * @@ -284,7 +281,6 @@ public class WxPayUtils { public static Object getPayParam(String openId, String outTradeNo,int total) { JSONObject jsonObject = JSON.parseObject(createOrderJSApiV3(openId, outTradeNo,total)); return getTokenWeiXin(jsonObject.getString("prepay_id")); - } /** @@ -313,7 +309,7 @@ public class WxPayUtils { json.put("mchid", mchId); json.put("description", description); // 商户订单号 自己生成 -// json.put("out_trade_no", generateNonceStr()); + json.put("out_trade_no", outTradeNo); json.put("notify_url", callbackUri); json.put("amount", amountJson);