Browse Source

Merge branch 'master' of http://git.zonelife.cn:3000/fubojin/smqjh

fubojin 3 weeks ago
parent
commit
880a507416

+ 43 - 2
yami-shop-api/src/main/java/com/yami/shop/api/controller/PayController.java

@@ -2,18 +2,29 @@ package com.yami.shop.api.controller;
 
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
+import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
+import com.github.binarywang.wxpay.config.WxPayConfig;
+import com.github.binarywang.wxpay.constant.WxPayConstants;
+import com.github.binarywang.wxpay.service.WxPayService;
+import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
 import com.yami.shop.bean.app.param.PayParam;
 import com.yami.shop.bean.model.Order;
 import com.yami.shop.bean.model.RefundDelivery;
 import com.yami.shop.bean.pay.PayInfoDto;
 import com.yami.shop.common.exception.GlobalException;
 import com.yami.shop.common.util.Arith;
+import com.yami.shop.common.util.IPHelper;
 import com.yami.shop.security.api.model.YamiUser;
 import com.yami.shop.security.api.util.SecurityUtils;
-import com.yami.shop.service.*;
+import com.yami.shop.service.OrderService;
+import com.yami.shop.service.PayService;
+import com.yami.shop.service.RefundDeliveryService;
+import com.yami.shop.wx.config.WechatPayServiceConfig;
 import com.yami.shop.wx.po.JsapiPayInfoPo;
 import com.yami.shop.wx.service.WxProviderService;
 import com.yami.shop.wx.utils.CullenUtils;
+import com.yami.shop.wx.utils.OrderUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -34,6 +45,35 @@ public class PayController {
     private final RefundDeliveryService refundDeliveryService;
     private final WxProviderService wxProviderService;
 
+
+    @SneakyThrows
+    //@PostMapping("/doPay")
+    @ApiOperation(value = "ApiV2版本的服务商支付")
+    public ResponseEntity<?> doPay() {
+        WechatPayServiceConfig wxConfig = wxProviderService.getWxConfig();
+        WxPayConfig payConfig = new WxPayConfig();
+        payConfig.setAppId(wxConfig.getSpAppId());
+        payConfig.setMchId(wxConfig.getSpMchId());
+        payConfig.setSubAppId(wxConfig.getSubAppId());
+        payConfig.setSubMchId(wxConfig.getSubMchId());
+        payConfig.setMchKey(wxConfig.getApiV3Key());
+        payConfig.setKeyPath(wxConfig.getKeyPemPath());
+        WxPayService wxPayService = new WxPayServiceImpl();
+        wxPayService.setConfig(payConfig);
+
+        WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
+        orderRequest.setBody("商城下单");
+        orderRequest.setOutTradeNo(OrderUtils.getOrderNo(""));
+        orderRequest.setTotalFee(1);
+        orderRequest.setSpbillCreateIp(IPHelper.getIpAddr());
+        orderRequest.setSubOpenid("owrSr6y0TGPHBU2tgMVoCO13Gjww");
+        orderRequest.setNotifyUrl("http://localhost:8112");
+        orderRequest.setTradeType(WxPayConstants.TradeType.JSAPI);
+        WxPayMpOrderResult wxPayMpOrderResult = wxPayService.createOrder(orderRequest);
+        return ResponseEntity.ok(wxPayMpOrderResult);
+    }
+
+
     @SneakyThrows
     @PostMapping("/pay")
     @ApiOperation(value = "根据订单号进行支付", notes = "根据订单号进行支付")
@@ -52,7 +92,8 @@ public class PayController {
         CullenUtils.validateDataThrowException(payInfo.getPayAmount() < 0.01, "订单金额有误,无法进行支付");
         JsapiPayInfoPo po = new JsapiPayInfoPo();
         po.setDescription(payInfo.getBody());
-        po.setTotal((int) Arith.mul(payInfo.getPayAmount(), 100));
+        //po.setTotal((int) Arith.mul(payInfo.getPayAmount(), 100));
+        po.setTotal(1);
         po.setOpenId(user.getBizUserId());
         po.setOutTradeNo(payInfo.getPayNo());
         po.setNotifyUrl(getNotifyUrl("http://localhost:8112"));

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

@@ -1,6 +1,7 @@
 package com.yami.shop.wx.service;
 
 import com.yami.shop.bean.bo.PayInfoBo;
+import com.yami.shop.wx.config.WechatPayServiceConfig;
 import com.yami.shop.wx.po.JsapiPayInfoPo;
 
 import javax.servlet.http.HttpServletRequest;
@@ -18,4 +19,6 @@ public interface WxProviderService {
     Map<String, Object> getPayResultByOrderNo(String orderNo);
 
     Map<String, Object> queryRefundOrder(String refundNo);
+
+    WechatPayServiceConfig getWxConfig();
 }

+ 9 - 11
yami-shop-wx/src/main/java/com/yami/shop/wx/service/impl/WxProviderServiceImpl.java

@@ -11,11 +11,11 @@ import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator;
 import com.wechat.pay.contrib.apache.httpclient.cert.CertificatesManager;
 import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
 import com.yami.shop.bean.bo.PayInfoBo;
+import com.yami.shop.common.exception.GlobalException;
 import com.yami.shop.wx.config.CombinePayUrlEnum;
 import com.yami.shop.wx.config.WechatPayServiceConfig;
 import com.yami.shop.wx.po.JsapiPayInfoPo;
 import com.yami.shop.wx.service.WxProviderService;
-import com.yami.shop.wx.utils.CullenUtils;
 import com.yami.shop.wx.utils.OrderUtils;
 import com.yami.shop.wx.utils.WechatPayValidator;
 import lombok.SneakyThrows;
@@ -84,10 +84,7 @@ public class WxProviderServiceImpl implements WxProviderService {
         String resStr = wechatHttpPost(url, paramsStr);
         Map<String, Object> resMap = JSONObject.parseObject(resStr, new TypeReference<Map<String, Object>>() {
         });
-        Map<String, Object> signMap = paySignMsgApplet(resMap);
-        resMap.put("type", "sub_jsapi");
-        resMap.put("signMap", signMap);
-        return resMap;
+        return paySignMsgApplet(resMap);
     }
 
     /**
@@ -367,13 +364,10 @@ public class WxProviderServiceImpl implements WxProviderService {
     @Override
     public PayInfoBo notifyParse(HttpServletRequest request, HttpServletResponse response) {
         JSONObject bodyJson = getNotifyBodyJson(request);
-        CullenUtils.validateDataThrowException(bodyJson == null, "回调通知验签失败...");
         PayInfoBo bo = new PayInfoBo();
-
         if (lock.tryLock()) {
             try {
                 // 解密resource中的通知数据
-                assert bodyJson != null;
                 String resource = bodyJson.getString("resource");
                 JSONObject resourceJson = WechatPayValidator.decryptFromResource(resource, wechatPayServiceConfig.getApiV3Key());
                 System.out.println("=================== 服务商小程序支付回调解密resource中的通知数据 ===================\n" + resource);
@@ -398,13 +392,17 @@ public class WxProviderServiceImpl implements WxProviderService {
         log.info("===========微信回调参数===========\n" + body);
         log.info("微信回调参数:{}", body);
         JSONObject jsonObject = JSONObject.parseObject(body);
-        WechatPayValidator wechatPayValidator
-                = new WechatPayValidator(getVerifier(), jsonObject.getString("id"), body);
+        WechatPayValidator wechatPayValidator = new WechatPayValidator(getVerifier(), jsonObject.getString("id"), body);
         if (!wechatPayValidator.validate(request)) {
             log.error("通知验签失败");
-            return null;
+            throw new GlobalException("回调通知验签失败...");
         }
         log.info("通知验签成功");
         return jsonObject;
     }
+
+    public WechatPayServiceConfig getWxConfig() {
+        return wechatPayServiceConfig;
+    }
+
 }

+ 0 - 3
yami-shop-wx/src/main/java/com/yami/shop/wx/utils/WechatPayValidator.java

@@ -4,9 +4,6 @@ import com.alibaba.fastjson2.JSONObject;
 import com.wechat.pay.contrib.apache.httpclient.auth.Verifier;
 import com.wechat.pay.contrib.apache.httpclient.util.AesUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.http.HttpEntity;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.util.EntityUtils;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.BufferedReader;