‘linchangsheng’ 6 mesi fa
parent
commit
6a669bfcfd

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

@@ -159,6 +159,24 @@ public class WechatLogic extends OutsideBaseApi{
         return payDetail;
     }
 
+
+    public PayDetail paymentWebsitH5(String orderId, BigDecimal payAmount,String openId,String profitSharingFlag,String ip,String companyWechatId){
+        Map<String,Object> map = new HashMap<>();
+        map.put("orderId",orderId);
+        map.put("payAmount",payAmount);
+        map.put("openId",openId);
+        map.put("profitSharingFlag",profitSharingFlag);
+        map.put("ip",ip);
+        map.put("companyWechatId",companyWechatId);
+        String s = HttpUtils.requestPostForm(pcUrl + "/wechat/paymentWebsit/h5", map, getHeader());
+        log.info("微信支付response:{}",s);
+        ResponseHelper<PayDetail> result = JSONUtil.toBean(s, new TypeReference<ResponseHelper<PayDetail>>() {
+        }, false);
+        PayDetail payDetail = checkData(result);
+        log.info("微信支付:{}",payDetail);
+        return payDetail;
+    }
+
     /**
      * 微信支付付款吗
      * @param orderId 订单号

+ 1 - 1
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/policy/WorkerLogic.java

@@ -384,7 +384,7 @@ public class WorkerLogic {
         PolicyOrder policyOrder = policyOrderService.getById(policyOrderId);
 
         if (source.equals("B")) {
-            payDetail = wechatLogic.paymentH5(policyOrder.getId(), policyOrder.getPayAmount(), currentCompanyWechat.getUser().getOpenId(),
+            payDetail = wechatLogic.paymentWebsitH5(policyOrder.getId(), policyOrder.getPayAmount(), currentCompanyWechat.getUser().getOpenId(),
                     "N", ip, currentCompanyWechat.getCompanyWechatId());
         } else {
             payDetail = wechatLogic.payment(policyOrder.getId(), policyOrder.getPayAmount(),

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

@@ -93,6 +93,39 @@ public class WechatController {
         return ResponseHelper.success(payDetail);
     }
 
+    @PostMapping("/paymentWebsit/h5")
+    @ApiOperation(value = "微信h5支付")
+    public ResponseHelper<PayDetail> paymentWebsitH5(
+            @ApiParam("订单号") @RequestParam String orderId,
+            @RequestParam BigDecimal payAmount,
+            @RequestParam String openId,
+            @RequestParam String profitSharingFlag,
+            @RequestParam String ip,
+            @RequestParam String companyWechatId
+    ) throws Exception {
+        PayDetail payDetail = wechatLogic.paymentWebsitH5(orderId, payAmount, openId, profitSharingFlag, ip, companyWechatId);
+        return ResponseHelper.success(payDetail);
+    }
+
+
+/*
+    @PostMapping("/paymentWebsit")
+    @ApiOperation(value = "微信小程序支付")
+    public ResponseHelper<PayDetail> paymentWebsit(
+            @ApiParam("订单号") @RequestParam String orderId,
+            @RequestParam BigDecimal payAmount,
+            @RequestParam String openId,
+            @RequestParam String profitSharingFlag,
+            @RequestParam String ip,
+            @RequestParam String companyWechatId,
+            @ApiParam(value = "是否小程序支付",required = false) @RequestParam(required = false) Boolean miniPay
+    ) throws Exception {
+        PayDetail payDetail = wechatLogic.paymentWebsit(orderId, payAmount, openId, profitSharingFlag, ip, companyWechatId,miniPay);
+        return ResponseHelper.success(payDetail);
+    }
+*/
+
+
     @PostMapping("/payment")
     @ApiOperation(value = "微信小程序支付")
     public ResponseHelper<PayDetail> payment(

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

@@ -5,6 +5,7 @@ import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.github.binarywang.wxpay.bean.profitsharing.*;
 import com.github.binarywang.wxpay.bean.request.WxPayMicropayRequest;
 import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
@@ -1245,4 +1246,65 @@ public class WechatLogic {
         this.addPayWebsitRecord(adminCompanyWechatPayConfig,payment,"",payResult.getSubOpenid(),ip,payResult.getTradeType(),id,payResult.getTransactionId());
         return payResult.getTransactionId();
     }
+
+    public PayDetail paymentWebsitH5(String orderId, BigDecimal payAmount, String openId, String profitSharingFlag, String ip, String companyWechatId) throws WxPayException {
+        return this.paymentWebsit(orderId,payAmount,openId,profitSharingFlag,ip,companyWechatId,"MWEB",false);
+    }
+
+    private PayDetail paymentWebsit(String id, BigDecimal payment, String openId, String profitSharingFlag, String ip,
+                                    String companyWechatId, String tradeType, boolean b) throws WxPayException {
+
+        WxPayService payService = this.getPayWebstiService(companyWechatId,null);
+
+        if (payService == null)
+            throw new RemoteServiceException("未查到支付配置");
+
+        if(payment.doubleValue() <= 0){
+            //throw new RemoteServiceException("支付金额小于等于0,实际支付金额:"+payment);
+            PayDetail payDetail = new PayDetail();
+            payDetail.setIsPay(false);
+            payDetail.setId(IdWorker.getIdStr());
+            return payDetail;
+        }
+
+
+        WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = new WxPayUnifiedOrderRequest();
+        wxPayUnifiedOrderRequest.setBody("商城支付费用");
+        wxPayUnifiedOrderRequest.setTotalFee((int)ArithUtils.mul(payment.doubleValue(), 100));
+        wxPayUnifiedOrderRequest.setSubOpenid(openId);
+        wxPayUnifiedOrderRequest.setNonceStr(StringUtil.getUUID());
+        wxPayUnifiedOrderRequest.setOutTradeNo(id +"-"+ StringUtil.getRandomSMS());
+        wxPayUnifiedOrderRequest.setAttach(id);//支付通过该方式回调处理
+        //wxPayUnifiedOrderRequest.setTradeType("JSAPI");
+        wxPayUnifiedOrderRequest.setTradeType(tradeType);
+        wxPayUnifiedOrderRequest.setProductId(id);
+        wxPayUnifiedOrderRequest.setNotifyUrl(payService.getConfig().getNotifyUrl());
+        wxPayUnifiedOrderRequest.setSpbillCreateIp(ip);
+        wxPayUnifiedOrderRequest.setProfitSharing(profitSharingFlag);
+        WxPayUnifiedOrderResult wxPayUnifiedOrderResult = payService.unifiedOrder(wxPayUnifiedOrderRequest);
+        log.info("服务商调起支付result:{}",JSONObject.toJSONString(wxPayUnifiedOrderResult));
+        String returnCode = wxPayUnifiedOrderResult.getReturnCode();
+        if (!StringUtils.equals(returnCode, "SUCCESS")) {
+            throw new RemoteServiceException( "微信调起支付失败:" + wxPayUnifiedOrderResult.getReturnMsg());
+        }
+
+        //二次签名
+        String time = System.currentTimeMillis() / 1000 + "";
+        String prepayId = "prepay_id=" + wxPayUnifiedOrderResult.getPrepayId();
+        String nonceStr = wxPayUnifiedOrderResult.getNonceStr();
+        String twoSign = this.getTwoSign(prepayId, nonceStr, time,payService.getConfig().getSubAppId(),payService.getConfig().getMchKey());
+        PayDetail payDetail = new PayDetail();
+        payDetail.setPayPackage(prepayId);
+        payDetail.setPaySign(twoSign);
+        payDetail.setNonceStr(wxPayUnifiedOrderResult.getNonceStr());
+        payDetail.setTimeStamp(time);
+        payDetail.setCodeUrl(wxPayUnifiedOrderResult.getCodeURL());
+        //h5的url
+        if(StringUtils.isNotBlank(wxPayUnifiedOrderResult.getMwebUrl())) {
+            payDetail.setCodeUrl(wxPayUnifiedOrderResult.getMwebUrl());
+        }
+        payDetail.setId(id);
+        log.info("payDetail:{}",JSONObject.toJSONString(payDetail));
+        return payDetail;
+    }
 }