Bläddra i källkod

feat:“优化汇付微信支付"

soobin 8 månader sedan
förälder
incheckning
2b2abeda91

+ 1 - 1
pom.xml

@@ -207,7 +207,7 @@
         <dependency>
             <groupId>com.huifu.bspay.sdk</groupId>
             <artifactId>dg-java-sdk</artifactId>
-            <version>3.0.8</version>
+            <version>3.0.13</version>
         </dependency>
         <!--rabbitmq-->
         <dependency>

+ 2 - 0
src/main/java/com/szwl/constant/HuifuConstant.java

@@ -118,6 +118,8 @@ public class HuifuConstant {
     public final static String SC_JUMP_URL = "http://sevencloud.com.cn/sc";
 //    public final static String SC_JUMP_URL = "http://szwltest.sunzee.com.cn/sc";
 //    public final static String SZ_JUMP_URL = "http://szwltest.sunzee.com.cn/shenze";
+    public final static String SZ_WECHAT_URL = "http://szwlh.sunzee.com.cn/huifuSz/";
+    public final static String SC_WECHAT_URL = "http://sevencloud.com.cn/huifuSc/";
 
 
     /**

+ 12 - 5
src/main/java/com/szwl/controller/TOrderController.java

@@ -26,7 +26,10 @@ import com.szwl.model.bo.R;
 import com.szwl.model.bo.ResponseModel;
 import com.szwl.model.dto.OrderDetailsDTO;
 import com.szwl.model.entity.*;
-import com.szwl.model.utils.*;
+import com.szwl.model.utils.HttpClientSslUtils;
+import com.szwl.model.utils.HttpClientUtils;
+import com.szwl.model.utils.PushUtils;
+import com.szwl.model.utils.RSAUtil;
 import com.szwl.service.*;
 import com.szwl.service.es.EsTOrderService;
 import com.szwl.utils.HuifuUtils;
@@ -3334,9 +3337,6 @@ public class TOrderController {
                 orderTask.setAgencyId(order.getId());
                 orderTaskService.save(orderTask);
             }
-//            }catch (Exception e) {
-//                e.printStackTrace();
-//            }
             //传送数据
             sentJingZhun(order);
             return "success";
@@ -4880,8 +4880,15 @@ public class TOrderController {
      */
     @ApiOperation(value = "优化汇付支付")
     @GetMapping("/testUniPay")
-    public Object testUniPay(String code, String clientId, String productName, String frpCode, String pri) throws Exception {
+    public Object testUniPay(String code, String clientId, String productName, String frpCode, String pri) {
         return orderService.scanpay(code, clientId, productName, frpCode, pri);
     }
+
+    @ApiOperation("汇付微信预下单")
+    @GetMapping("/huifuPayCreate")
+    public Object huifuPayCreate(String sn, String openid) {
+        return orderService.huifuPayCreate(sn, openid);
+    }
+
 }
 

+ 12 - 7
src/main/java/com/szwl/model/utils/AdminUtils.java

@@ -20,11 +20,11 @@ public final class AdminUtils {
     /**
      * 将id转成加密样式
      */
-    public static String encrypt(boolean isPrefix , Long id) {
+    public static String encrypt(boolean isPrefix, Long id) {
         id = id * base2 + base1;
-        if(isPrefix){
+        if (isPrefix) {
             return prefix + id.toString();
-        }else{
+        } else {
             return id.toString();
         }
 
@@ -34,16 +34,21 @@ public final class AdminUtils {
     /**
      * 解密id
      */
-    public static Long decrypt(boolean isPrefix , String uid) {
+    public static Long decrypt(boolean isPrefix, String uid) {
         try {
-            if(isPrefix){
+            if (isPrefix) {
                 uid = uid.substring(1, uid.length());
             }
 
             Long id = Long.valueOf(uid);
             id = id - base1;
-            id = id / base2;
-            return id;
+            long l = id % base2;
+            if (l == 0) {
+                id = id / base2;
+                return id;
+            } else {
+                return null;
+            }
         } catch (Exception e) {
             return null;
         }

+ 1 - 1
src/main/java/com/szwl/service/THuifuMchService.java

@@ -64,5 +64,5 @@ public interface THuifuMchService extends IService<THuifuMch> {
      * @param order
      * @return
      */
-    String payWechat(TOrder order) throws Exception;
+    JSONObject payWechat(TOrder order, String openid) throws Exception;
 }

+ 9 - 1
src/main/java/com/szwl/service/TOrderService.java

@@ -137,5 +137,13 @@ public interface TOrderService extends IService<TOrder> {
      * @param pri
      * @return
      */
-    JsonMessage scanpay(String code, String clientId, String productName, String frpCode, String pri) throws Exception;
+    JsonMessage scanpay(String code, String clientId, String productName, String frpCode, String pri);
+
+    /**
+     * 汇付微信预下单
+     * @param sn
+     * @param openid
+     * @return
+     */
+    JSONObject huifuPayCreate(String sn, String openid);
 }

+ 21 - 31
src/main/java/com/szwl/service/impl/THuifuMchServiceImpl.java

@@ -304,7 +304,7 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
     }
 
     @Override
-    public String payWechat(TOrder order) throws Exception {
+    public JSONObject payWechat(TOrder order, String openid) throws Exception {
         String url = "https://api.huifu.com/v2/trade/payment/jspay";
         HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
         JSONObject request = new JSONObject();
@@ -323,17 +323,19 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         String productName = order.getProductName();
         TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
         String client6 = clientId.substring(clientId.length() - 6);
-        String productName1 = "";
+        String goodsDesc = "";
         if (order.getProductNumber() > 1) {
             if (equipment.getMachineType() == null || equipment.getMachineType().equals("0")) {
-                productName1 = "棉花糖-" + equipment.getName() + "-" + client6;
-            } else {
-                productName1 = "爆米花-" + equipment.getName() + "-" + client6;
+                goodsDesc = "棉花糖-" + equipment.getName() + "-" + client6;
+            } else if (equipment.getMachineType().equals("1")) {
+                goodsDesc = "爆米花-" + equipment.getName() + "-" + client6;
+            } else if (equipment.getMachineType().equals("2")) {
+                goodsDesc = "雪糕-" + equipment.getName() + "-" + client6;
             }
         } else {
-            productName1 = productName + "-" + equipment.getName() + "-" + client6;
+            goodsDesc = productName + "-" + equipment.getName() + "-" + client6;
         }
-        request.put("goods_desc", productName1);
+        request.put("goods_desc", goodsDesc);
         request.put("notify_url", HuifuConstant.Notify_Url);
         // 分账明细
         request.put("acct_split_bunch", order.getAcctSplitBunch());
@@ -341,11 +343,10 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         JSONObject wxData = new JSONObject();
         if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
             wxData.put("sub_appid", HuifuConstant.SC_WX_SUB_APP_ID);
-            wxData.put("open_id", HuifuConstant.SC_OPEN_ID);
         } else {
             wxData.put("sub_appid", HuifuConstant.SZ_WX_SUB_APP_ID);
-            wxData.put("open_id", HuifuConstant.SZ_OPEN_ID);
         }
+        wxData.put("open_id", openid);
         request.put("wx_data", wxData);
         // 签名:sign
         String s = JSON.toJSONString(request);
@@ -357,32 +358,21 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         requestData.put("product_id", HuifuConstant.PRODUCT_ID);
         requestData.put("sign", sign);
         requestData.put("data", request);
-        log.info("汇付微信扫码下单:" + requestData);
         String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
         // 拿到返回参数
         JSONObject result = JSONObject.parseObject(success);
-        log.info("汇付微信扫码下单返回参数:{}", result);
         JSONObject data = result.getJSONObject("data");
-        String payInfo = data.getString("pay_info");
-        JSONObject payInfoJson = JSONObject.parseObject(payInfo);
-        // 获取timeStamp的值
-        String timeStamp = payInfoJson.getString("timeStamp");
-        // 获取nonceStr的值
-        String nonceStr = payInfoJson.getString("nonceStr");
-        // 获取package的值
-        String packageValue = payInfoJson.getString("package");
-        // 获取paySign的值
-        String paySign = payInfoJson.getString("paySign");
-
-        // 保存支付参数
-        WechatPayInfo wechatPayInfo = new WechatPayInfo();
-        wechatPayInfo.setSn(sn);
-        wechatPayInfo.setTimeStamp(timeStamp);
-        wechatPayInfo.setNonceStr(nonceStr);
-        wechatPayInfo.setPackageValue(packageValue);
-        wechatPayInfo.setPaySign(paySign);
-        wechatPayInfoService.save(wechatPayInfo);
+//        String payInfo = data.getString("pay_info");
+//        JSONObject payInfoJson = JSONObject.parseObject(payInfo);
+//        // 获取timeStamp的值
+//        String timeStamp = payInfoJson.getString("timeStamp");
+//        // 获取nonceStr的值
+//        String nonceStr = payInfoJson.getString("nonceStr");
+//        // 获取package的值
+//        String packageValue = payInfoJson.getString("package");
+//        // 获取paySign的值
+//        String paySign = payInfoJson.getString("paySign");
 
-        return sn;
+        return data;
     }
 }

+ 19 - 13
src/main/java/com/szwl/service/impl/TOrderServiceImpl.java

@@ -1155,7 +1155,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
     }
 
     @Override
-    public JsonMessage scanpay(String code, String clientId, String productName, String frpCode, String pri) throws Exception {
+    public JsonMessage scanpay(String code, String clientId, String productName, String frpCode, String pri) {
         TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
         if (equipment == null || equipment.getId() == null) {
             return JsonMessage.error("找不到设备");
@@ -1322,21 +1322,11 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
             // 汇付分账参数
             order.setAcctSplitBunch(acctSplitBunch.toString());
             if (frpCode.equals(ConfigConsts.WECHAT_NATIVE)) {
-                String resultSn = "";
-                try {
-                    resultSn = huifuMchService.payWechat(order);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    return JsonMessage.error("申请支付失败");
-                }
-                if (StrUtil.isEmpty(resultSn)) {
-                    return JsonMessage.error("找不到支付图片");
-                }
                 //添加到汇付临时表
                 if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
-                    result = HuifuConstant.SC_JUMP_URL + "/#/payWechat?sn=" + resultSn;
+                    result = HuifuConstant.SC_WECHAT_URL + "?price=" + price + "&sn=" + sn;
                 } else {
-                    result = HuifuConstant.SZ_JUMP_URL + "/#/payWechat?sn=" + resultSn;
+                    result = HuifuConstant.SZ_WECHAT_URL + "?price=" + price + "&sn=" + sn;
                 }
                 log.info("返回链接:{}", result);
                 String qrcode = CodeUtil.toQrcode(result);
@@ -1394,6 +1384,22 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         }
     }
 
+    @Override
+    public JSONObject huifuPayCreate(String sn, String openid) {
+        // 查到指定订单
+        LambdaQueryWrapper<TOrder> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TOrder::getSn, sn);
+        wrapper.eq(TOrder::getStatus, 0);
+        TOrder order = orderService.getOne(wrapper);
+        JSONObject reslut = new JSONObject();
+        try {
+            reslut = huifuMchService.payWechat(order, openid);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return reslut;
+    }
+
     /**
      * 发送微信消息
      */