xiongzhu hace 4 años
padre
commit
dea1f8b724

+ 5 - 5
src/main/java/com/izouma/nineth/service/OrderService.java

@@ -221,7 +221,7 @@ public class OrderService {
         return wxPayService.<WxPayMpOrderResult>createOrder(request);
     }
 
-    public void notifyAlipay(Long orderId, Map<String, String> params) {
+    public void notifyAlipay(Long orderId, PayMethod payMethod, String transactionId) {
         Order order = orderRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
         if (order.getStatus() == OrderStatus.NOT_PAID) {
             if (order.getType() == CollectionType.BLIND_BOX) {
@@ -278,8 +278,8 @@ public class OrderService {
 
                 order.setStatus(OrderStatus.PROCESSING);
                 order.setPayTime(LocalDateTime.now());
-                order.setTransactionId(MapUtils.getString(params, "trade_no"));
-                order.setPayMethod(PayMethod.ALIPAY);
+                order.setTransactionId(transactionId);
+                order.setPayMethod(payMethod);
                 orderRepo.save(order);
                 assetService.createAsset(order, winItem);
 
@@ -287,8 +287,8 @@ public class OrderService {
             } else {
                 order.setStatus(OrderStatus.PROCESSING);
                 order.setPayTime(LocalDateTime.now());
-                order.setTransactionId(MapUtils.getString(params, "trade_no"));
-                order.setPayMethod(PayMethod.ALIPAY);
+                order.setTransactionId(transactionId);
+                order.setPayMethod(payMethod);
                 orderRepo.save(order);
                 assetService.createAsset(order);
             }

+ 25 - 1
src/main/java/com/izouma/nineth/web/OrderNotifyController.java

@@ -4,13 +4,19 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.internal.util.AlipaySignature;
+import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
+import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.binarywang.wxpay.service.WxPayService;
 import com.izouma.nineth.config.AlipayProperties;
+import com.izouma.nineth.enums.PayMethod;
 import com.izouma.nineth.service.OrderService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.MapUtils;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
@@ -29,6 +35,7 @@ public class OrderNotifyController {
 
     private final AlipayProperties alipayProperties;
     private final OrderService     orderService;
+    private final WxPayService     wxPayService;
 
     @PostMapping("/order/alipay")
     @ResponseBody
@@ -60,11 +67,28 @@ public class OrderNotifyController {
             switch (action) {
                 case "payOrder":
                     Long orderId = body.getLong("orderId");
-                    orderService.notifyAlipay(orderId, params);
+                    orderService.notifyAlipay(orderId, PayMethod.ALIPAY, MapUtils.getString(params, "trade_no"));
                     break;
             }
             return "success";
         }
         return "error";
     }
+
+    @PostMapping(value = "/payNotify", produces = "application/xml")
+    @ResponseBody
+    public String wxNotify(@RequestBody String xmlData) throws WxPayException {
+        log.info("微信支付回调: {}", xmlData);
+        final WxPayOrderNotifyResult notifyResult = wxPayService.parseOrderNotifyResult(xmlData);
+        notifyResult.checkResult(wxPayService, "MD5", true);
+        JSONObject attach = JSONObject.parseObject(notifyResult.getAttach());
+        String action = attach.getString("action");
+        switch (action) {
+            case "payOrder":
+                Long orderId = attach.getLong("orderId");
+                orderService.notifyAlipay(orderId, PayMethod.WEIXIN, notifyResult.getTransactionId());
+                break;
+        }
+        return WxPayNotifyResponse.success("OK");
+    }
 }

+ 1 - 1
src/main/vue/src/views/BlindBoxEdit.vue

@@ -495,7 +495,7 @@ export default {
         }
     },
     watch: {
-        'addItemForm.id'(val) {
+        'addItemForm.collectionId'(val) {
             if (val) {
                 this.$set(this.addItemForm, 'max', (this.collections.find(i => i.id === val) || {}).stock || 0);
             }