wangming 3 weeks ago
parent
commit
a25b557f78

+ 1 - 0
yami-shop-api/src/main/java/com/yami/shop/api/controller/MyOrderController.java

@@ -99,6 +99,7 @@ public class MyOrderController {
         List<OrderItemDto> orderItemDtoList = mapperFacade.mapAsList(orderItems, OrderItemDto.class);
         orderShopDto.setOrderScore(score);
         orderShopDto.setShopId(shopDetail.getShopId());
+//        orderShopDto.setShopId(0L);
         orderShopDto.setDvyType(order.getDvyType());
         orderShopDto.setShopName(shopDetail.getShopName());
         orderShopDto.setActualTotal(order.getActualTotal());

+ 11 - 1
yami-shop-api/src/main/java/com/yami/shop/api/controller/PayController.java

@@ -35,6 +35,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 
 @RestController
+//@RequestMapping("/p/order")
 @RequestMapping("/order")
 @Api(tags = "订单接口")
 @AllArgsConstructor
@@ -46,6 +47,14 @@ public class PayController {
     private final WxProviderService wxProviderService;
 
 
+    @SneakyThrows
+    @PostMapping("/refund")
+    @ApiOperation(value = "测试退款")
+    public ResponseEntity<?> refund() {
+        return ResponseEntity.ok(wxProviderService.refundOrder("1971409316510568448",1,1));
+    }
+
+
     @SneakyThrows
     //@PostMapping("/doPay")
     @ApiOperation(value = "ApiV2版本的服务商支付")
@@ -78,6 +87,7 @@ public class PayController {
     @PostMapping("/pay")
     @ApiOperation(value = "根据订单号进行支付", notes = "根据订单号进行支付")
     public ResponseEntity<?> pay(@Valid @RequestBody PayParam payParam) {
+        System.out.println("开始进行支付...");
         YamiUser user = SecurityUtils.getUser();
         String userId = user.getUserId();
         if (!user.isEnabled()) {
@@ -96,7 +106,7 @@ public class PayController {
         po.setTotal(1);
         po.setOpenId(user.getBizUserId());
         po.setOutTradeNo(payInfo.getPayNo());
-        po.setNotifyUrl(getNotifyUrl("http://localhost:8112"));
+        po.setNotifyUrl(getNotifyUrl("http://he56cd66.natappfree.cc"));
         return ResponseEntity.ok(wxProviderService.subJsapi(po));
     }
 

+ 11 - 0
yami-shop-api/src/main/java/com/yami/shop/api/controller/PayNoticeController.java

@@ -52,6 +52,7 @@ public class PayNoticeController {
     @SneakyThrows
     @RequestMapping("/order/wxNotify")
     public ResponseEntity<String> wxNotify(HttpServletRequest request, HttpServletResponse response) {
+        System.out.println("进入回调...");
         PayInfoBo payInfoBo = wxProviderService.notifyParse(request,response);
 
         if (payInfoBo.getPayNo().contains("refundSn")) {
@@ -80,6 +81,16 @@ public class PayNoticeController {
     }
 
 
+    @SneakyThrows
+    @RequestMapping("/order/refundNotify")
+    public ResponseEntity<String> refundNotify(HttpServletRequest request, HttpServletResponse response) {
+        System.out.println("进入退款回调...");
+        PayInfoBo payInfoBo = wxProviderService.notifyParse(request,response);
+        return ResponseEntity.ok(payInfoBo.getSuccessString());
+    }
+
+
+
     @SneakyThrows
     //@RequestMapping("/order/{payType}")
     public ResponseEntity<String> submit(HttpServletRequest request, @PathVariable Integer payType, @RequestBody(required = false) String xmlData) {

+ 2 - 0
yami-shop-wx/src/main/java/com/yami/shop/wx/service/WxProviderService.java

@@ -16,6 +16,8 @@ public interface WxProviderService {
 
     PayInfoBo notifyParse(HttpServletRequest request, HttpServletResponse response);
 
+    void refundNotifyParse(HttpServletRequest request, HttpServletResponse response);
+
     Map<String, Object> getPayResultByOrderNo(String orderNo);
 
     Map<String, Object> queryRefundOrder(String refundNo);

+ 25 - 2
yami-shop-wx/src/main/java/com/yami/shop/wx/service/impl/WxProviderServiceImpl.java

@@ -178,12 +178,12 @@ public class WxProviderServiceImpl implements WxProviderService {
         String url = wechatPayServiceConfig.getBaseUrl().concat(CombinePayUrlEnum.DOMESTIC_REFUNDS.getType());
         Map<String, Object> params = new HashMap<>(2);
         params.put("out_trade_no", orderNo);
-        params.put("sub_mchid", wechatPayServiceConfig.getSubAppId());
+        params.put("sub_mchid", wechatPayServiceConfig.getSubMchId());
         String outRefundNo = OrderUtils.getOrderNo("TK");
         log.info("退款申请号:{}", outRefundNo);
         params.put("out_refund_no", outRefundNo);
         params.put("reason", "申请退款");
-        params.put("notify_url", wechatPayServiceConfig.getRefundNotifyUrl());
+        params.put("notify_url", "http://he56cd66.natappfree.cc/notice/pay/order/refundNotify");
         Map<String, Object> amountMap = new HashMap<>();
         //退款金额,单位:分
         amountMap.put("refund", refundMoney);
@@ -387,6 +387,29 @@ public class WxProviderServiceImpl implements WxProviderService {
         return null;
     }
 
+    @Override
+    public void refundNotifyParse(HttpServletRequest request, HttpServletResponse response) {
+        JSONObject bodyJson = getNotifyBodyJson(request);
+        if (lock.tryLock()) {
+            try {
+                // 解密resource中的通知数据
+                String resource = bodyJson.getString("resource");
+                JSONObject resourceJson = WechatPayValidator.decryptFromResource(resource, wechatPayServiceConfig.getApiV3Key());
+                System.out.println("=================== 服务商小程序退款回调解密resource中的通知数据 ===================\n" + resource);
+                if (resourceJson.getString("refund_status").equals("SUCCESS")) {
+                    //TODO 业务处理
+                    resourceJson.get("out_trade_no");
+                    resourceJson.get("transaction_id");
+                    resourceJson.get("out_refund_no");
+                    resourceJson.get("refund_id");
+                }
+
+            } finally {
+                lock.unlock();
+            }
+        }
+    }
+
     private JSONObject getNotifyBodyJson(HttpServletRequest request) {
         String body = WechatPayValidator.readData(request);
         log.info("===========微信回调参数===========\n" + body);