‘linchangsheng’ преди 11 месеца
родител
ревизия
e0645ddf79

+ 1 - 1
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/common/outside/WechatLogic.java

@@ -178,7 +178,7 @@ public class WechatLogic extends OutsideBaseApi{
         map.put("ip",ip);
         map.put("companyWechatId",companyWechatId);
         map.put("source",source);
-        String s = HttpUtils.requestPostForm(pcUrl + "/wechat/payment/fkm", map, getHeader());
+        String s = HttpUtils.requestPostForm(pcUrl + "/wechat/payment/fkmWebsit", map, getHeader());
         log.info("微信付款码支付response:{}",s);
         ResponseHelper<String> result = JSONUtil.toBean(s, new TypeReference<ResponseHelper<String>>() {
         }, false);

+ 4 - 1
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/order/PayOrderLogic.java

@@ -330,6 +330,9 @@ public class PayOrderLogic {
 
         AdminWebsit adminWebsit = adminWebsitService.getById(workerOrder.getWebsitId());
 
+        if (StringUtil.isEmpty(adminWebsit.getPayWorkerCodeId()))
+            throw new RemoteServiceException("网点支付配置未配置");
+
         if (!workerOrder.getPayStatus().equals("WAIT")){
             throw new RemoteServiceException("订单已取消支付");
         }
@@ -342,7 +345,7 @@ public class PayOrderLogic {
 
         if (payType.equals(PayTypeEnum.WECHAT.getKey())) {
            String transcationId = wechatLogic.paymentFkm(workerOrder.getOrderId(), workerOrder.getTotalAmount(), authCode, "N", ip,
-                   currentCompanyWechat.getCompanyWechatId(),workerOrder.getSource());
+                   adminWebsit.getPayWorkerCodeId(),workerOrder.getSource());
         }
         workerOrder.setPayTime(new Date());
         workerOrder.setPayType(payType);

+ 48 - 5
mall-server-api/src/main/java/com/gree/mall/manager/config/wx/WxConfiguration.java

@@ -81,18 +81,61 @@ public class WxConfiguration {
             if(StringUtils.isBlank(adminCompanyWechatPayConfig.getMchId()) || StringUtils.isBlank(adminCompanyWechatPayConfig.getSubAppId())){
                 continue;
             }
-/*            //初始化企业微信服务
+            //初始化企业微信服务
             //initCpService(companyWechat,redisUtil);
             //初始化微信支付服务
             initWxPayService(adminCompanyWechatPayConfig,notifyUrl);
             initWxSubPayService(adminCompanyWechatPayConfig,notifyUrl);
-            //初始化微信小程序服务
-            initWxMaService(adminCompanyWechatPayConfig,redisUtil);
-            //初始化微信公众号服务
-            initWxMpService(adminCompanyWechatPayConfig,redisUtil);*/
         }
     }
 
+    /**
+     * 初始化微信小程序支付服务
+     * @param companyWechat
+     */
+    private static void initWxSubPayService(AdminCompanyWechatPayConfig companyWechat,String notifyUrl){
+        if(StringUtils.isAnyBlank(companyWechat.getAppletAppid())){
+            return;
+        }
+        String path = keyPath.toLowerCase();
+        WxPayConfig wxPayConfig = new WxPayConfig();
+        wxPayConfig.setAppId(companyWechat.getAppId());
+        wxPayConfig.setMchId(companyWechat.getMchId());
+        wxPayConfig.setMchKey(companyWechat.getMchKey());
+        wxPayConfig.setSubAppId(companyWechat.getAppletAppid());
+        wxPayConfig.setSubMchId(companyWechat.getSubMchId());
+        wxPayConfig.setNotifyUrl(notifyUrl);
+        wxPayConfig.setKeyPath(path);
+        WxPayService wxPayService = new WxPayServiceImpl();
+        wxPayService.setConfig(wxPayConfig);
+
+        wxSubPayWebsitServices.put(companyWechat.getCompanyWechatId(),wxPayService);
+    }
+
+
+
+
+    /**
+     * 初始化微信支付服务
+     * @param companyWechat
+     */
+    private static void initWxPayService(AdminCompanyWechatPayConfig companyWechat,String notifyUrl){
+
+        String path = keyPath.toLowerCase();
+        WxPayConfig wxPayConfig = new WxPayConfig();
+        wxPayConfig.setAppId(companyWechat.getAppId());
+        wxPayConfig.setMchId(companyWechat.getMchId());
+        wxPayConfig.setMchKey(companyWechat.getMchKey());
+        wxPayConfig.setSubAppId(companyWechat.getSubAppId());
+        wxPayConfig.setSubMchId(companyWechat.getSubMchId());
+        wxPayConfig.setNotifyUrl(notifyUrl);
+        wxPayConfig.setKeyPath(path);
+        WxPayService wxPayService = new WxPayServiceImpl();
+        wxPayService.setConfig(wxPayConfig);
+
+        wxPayWebsitServices.put(companyWechat.getId(),wxPayService);
+    }
+
     public void reloadWxConfig(List<AdminCompanyWechat> list){
 
         for(AdminCompanyWechat companyWechat : list){

+ 15 - 0
mall-server-api/src/main/java/com/gree/mall/manager/controller/common/WechatController.java

@@ -124,6 +124,21 @@ public class WechatController {
         return ResponseHelper.success(transcationId);
     }
 
+    @PostMapping("/payment/fkmWebsit")
+    @ApiOperation(value = "付款码支付")
+    public ResponseHelper<String> paymentfkmWebsit(
+            @ApiParam("订单号") @RequestParam String orderId,
+            @RequestParam BigDecimal payAmount,
+            @RequestParam String profitSharingFlag,
+            @RequestParam String ip,
+            @RequestParam String companyWechatId,
+            @RequestParam String authCode,
+            @RequestParam String source
+    ) throws Exception {
+        String transcationId = wechatLogic.paymentfkmWebsit(orderId, payAmount, profitSharingFlag, ip, companyWechatId, authCode,source);
+        return ResponseHelper.success(transcationId);
+    }
+
 //    @ApiNotAuth
 //    @PostMapping("/pub/auth/url")
 //    @ApiOperation("公众号授权绑定小程序url")

+ 82 - 2
mall-server-api/src/main/java/com/gree/mall/manager/logic/common/WechatLogic.java

@@ -29,8 +29,7 @@ import com.gree.mall.manager.enums.OrderShareStatusEnum;
 import com.gree.mall.manager.enums.PayStatusEnum;
 import com.gree.mall.manager.exception.RemoteServiceException;
 import com.gree.mall.manager.plus.entity.*;
-import com.gree.mall.manager.plus.service.AdminCompanyWechatService;
-import com.gree.mall.manager.plus.service.OrderInfoService;
+import com.gree.mall.manager.plus.service.*;
 import com.gree.mall.manager.utils.*;
 import com.gree.mall.manager.utils.oss.OSSUtil;
 import lombok.RequiredArgsConstructor;
@@ -92,6 +91,12 @@ public class WechatLogic {
     @Autowired
     WxPayService wxPayService;
 
+    @Autowired
+    AdminWebsitService adminWebsitService;
+
+    @Autowired
+    AdminCompanyWechatPayConfigService adminCompanyWechatPayConfigService;
+
     /**
      * 微信支付服务
      * @param companyWechatId
@@ -109,6 +114,22 @@ public class WechatLogic {
     }
 
     /**
+     * 微信支付服务
+     * @param companyWechatId
+     * @param source 公众号 / 小程序
+     * @return
+     */
+    public WxPayService getPayWebstiService(String companyWechatId,String source){
+        if(StringUtils.equals(source,OrderInfoSourceEnum.A.getRemark())) {
+            //小程序
+            return WxConfiguration.wxSubPayWebsitServices.get(companyWechatId);
+        }else{
+            //公众号
+            return WxConfiguration.wxPayWebsitServices.get(companyWechatId);
+        }
+    }
+
+    /**
      * 微信支付服务(小程序)
      * @param companyWechatId
      * @return
@@ -546,6 +567,34 @@ public class WechatLogic {
         payRecord.insert();
     }
 
+    /**
+     * 记录支付流水
+     * @param adminCompanyWechat
+     * @param payment 支付金额
+     * @param mobile 付款人手机号
+     * @param ip 付款人ip地址
+     * @param tradeType JSAPI=小程序支付  NATIVE=扫码支付  MICROPAY=付款码
+     * @param orderId 订单号
+     * @param transacationId 微信支付流水号
+     */
+    public void addPayWebsitRecord(AdminCompanyWechatPayConfig adminCompanyWechat,BigDecimal payment,String mobile,String openId,String ip,String tradeType,String orderId,String transacationId){
+        PayRecord payRecord = new PayRecord();
+        payRecord.setCompanyWechatId(adminCompanyWechat.getCompanyWechatId());
+        payRecord.setCompanyWechatName(adminCompanyWechat.getCompanyName());
+        payRecord.setAppId(adminCompanyWechat.getAppId());
+        payRecord.setSubAppId(adminCompanyWechat.getSubAppId());
+        payRecord.setSubMchId(adminCompanyWechat.getSubMchId());
+        payRecord.setOpenId(openId);
+        payRecord.setIp(ip);
+        payRecord.setPayment(payment);
+        payRecord.setMobile(mobile);
+        payRecord.setTradeType(tradeType);
+        payRecord.setOutTradeNo(orderId);
+        payRecord.setTransactionId(transacationId);
+        payRecord.setCreateTime(new Date());
+        payRecord.insert();
+    }
+
 
 
     /**
@@ -1034,4 +1083,35 @@ public class WechatLogic {
             throw new RemoteServiceException("授权失败,请联系相关人员");
         }
     }
+
+    public String paymentfkmWebsit(String id, BigDecimal payment, String profitSharingFlag, String ip, String companyWechatId, String authCode, String source) {
+
+        WxPayService payService = this.getPayWebstiService(companyWechatId,source);
+
+        WxPayMicropayRequest request = new WxPayMicropayRequest();
+        //request.setDeviceInfo(worker.getWorkerId());
+        request.setBody("售修宝费用");
+        request.setOutTradeNo(id);
+        request.setTotalFee(payment.multiply(new BigDecimal("100")).intValue());
+        request.setSpbillCreateIp(ip);
+        request.setAuthCode(authCode);
+        request.setProfitSharing(profitSharingFlag); // 分账标记 Y=分账 N=不分账
+
+        WxPayMicropayResult payResult = null;
+        try {
+            payResult = payService.micropay(request);
+            log.info("商户扫码支付生成订单响应: {}", payResult);
+        } catch (WxPayException e) {
+            log.error("商户扫码支付失败: {}", payResult);
+            throw new RemoteServiceException("扫码支付失败,请稍后再试");
+        }
+        if (payResult == null || WxPayConstants.ResultCode.FAIL.equals(payResult.getReturnCode())) {
+            throw new RemoteServiceException("扫码支付失败,请稍后再试");
+        }
+        //记录流水
+
+        AdminCompanyWechatPayConfig adminCompanyWechatPayConfig = adminCompanyWechatPayConfigService.getById(companyWechatId);
+        this.addPayWebsitRecord(adminCompanyWechatPayConfig,payment,"",payResult.getSubOpenid(),ip,payResult.getTradeType(),id,payResult.getTransactionId());
+        return payResult.getTransactionId();
+    }
 }