Pārlūkot izejas kodu

顺丰预下单 下单 取消接口

zxfqwert 1 nedēļu atpakaļ
vecāks
revīzija
e1af943a65

+ 23 - 2
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/JDLogisticsService.java

@@ -1,5 +1,6 @@
 package com.ruoyi.logistics.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.lop.open.api.sdk.DefaultDomainApiClient;
 import com.lop.open.api.sdk.LopException;
 import com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCheckPreCreateOrderV1.CommonCreateOrderRequest;
@@ -12,6 +13,7 @@ import com.lop.open.api.sdk.request.ECAP.EcapV1OrdersPrecheckLopRequest;
 import com.lop.open.api.sdk.response.ECAP.EcapV1OrdersCreateLopResponse;
 import com.lop.open.api.sdk.response.ECAP.EcapV1OrdersPrecheckLopResponse;
 import com.ruoyi.logistics.config.JDExpressConfig;
+import com.ruoyi.logistics.domain.BizWaybillOrder;
 import com.ruoyi.logistics.domain.LogisticsOrder;
 import com.ruoyi.logistics.service.LogisticsService;
 import lombok.extern.slf4j.Slf4j;
@@ -26,6 +28,26 @@ public class JDLogisticsService  implements LogisticsService {
     private JDExpressConfig jdExpressConfig;
 
     @Override
+    public JSONObject precheckOrder(BizWaybillOrder bizWaybillOrder) {
+        return null;
+    }
+
+    @Override
+    public JSONObject createOrder(BizWaybillOrder bizWaybillOrder) {
+        return null;
+    }
+
+    @Override
+    public JSONObject cancelOrder(BizWaybillOrder bizWaybillOrder) {
+        return null;
+    }
+
+    @Override
+    public JSONObject modifyOrder(BizWaybillOrder bizWaybillOrder) {
+        return null;
+    }
+
+    /*@Override
     public String precheckOrder() {
         log.info("调用京东开放平台订单预校验接口");
         try {
@@ -75,7 +97,6 @@ public class JDLogisticsService  implements LogisticsService {
 
             //入参对象(请记得更换为自己要使用的接口入参对象)
             EcapV1OrdersCreateLopRequest request = new EcapV1OrdersCreateLopRequest();
-
             //设置入参(请记得更换为自己要使用的接口入参)
             com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.Contact senderContact  = new com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.Contact();
             senderContact.setFullAddress("河北省廊坊市广阳区万庄镇中心小学");
@@ -103,5 +124,5 @@ public class JDLogisticsService  implements LogisticsService {
             e.printStackTrace();
         }
         return "";
-    }
+    }*/
 }

+ 35 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/util/Base64Util.java

@@ -0,0 +1,35 @@
+package com.ruoyi.logistics.util;
+
+import java.io.UnsupportedEncodingException;
+import org.apache.commons.codec.binary.Base64;
+public class Base64Util {
+    private static final String ENCODING = "UTF-8";
+    public static String encode(String input) {
+        try {
+            input = new String(Base64.encodeBase64(input.getBytes(ENCODING)), ENCODING);
+        } catch (UnsupportedEncodingException e) {
+            input = "";
+        }
+        return input;
+    }
+
+    public static String encode(byte[] input) {
+        String ouput = "";
+        try {
+            ouput = new String(Base64.encodeBase64(input), ENCODING);
+        } catch (UnsupportedEncodingException e) {
+            ouput = "";
+        }
+        return ouput;
+    }
+
+    public static String decode(String input) {
+        String ouput = "";
+        try {
+            byte[] decodeBase64 = Base64.decodeBase64(input.getBytes(ENCODING));
+            ouput = new String(decodeBase64, ENCODING);
+        } catch (UnsupportedEncodingException e) {
+        }
+        return ouput;
+    }
+}

+ 36 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/util/MD5Util.java

@@ -0,0 +1,36 @@
+package com.ruoyi.logistics.util;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+public class MD5Util {
+    public static final String MD5 = "MD5";
+    public static final String ENCODING = "UTF-8";
+    public static String getMd5(String plainText) {
+        try {
+            MessageDigest md = MessageDigest.getInstance(MD5);
+            md.update(plainText.getBytes(ENCODING));
+            byte b[] = md.digest();
+            int i;
+            StringBuffer buf = new StringBuffer("");
+            for (int offset = 0; offset < b.length; offset++) {
+                i = b[offset];
+                if (i < 0)
+                    i += 256;
+                if (i < 16)
+                    buf.append("0");
+                buf.append(Integer.toHexString(i));
+            }
+            // 32位加密
+            return buf.toString();
+            // 16位的加密
+            // return buf.toString().substring(8, 24);
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+            return null;
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+}

+ 126 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/util/SFExpressHttpUtil.java

@@ -0,0 +1,126 @@
+package com.ruoyi.logistics.util;
+import com.ruoyi.common.core.utils.uuid.UUID;
+import com.ruoyi.logistics.config.SFExpressConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.*;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+
+import static com.sf.csim.express.service.CallExpressServiceTools.getMsgDigest;
+
+public class SFExpressHttpUtil {
+    private String partnerID;
+    private String checkWord;
+    private String url;
+    public SFExpressHttpUtil(String partnerID, String checkWord,String url) {
+        this.partnerID = partnerID;
+        this.checkWord = checkWord;
+        this.url = url;
+
+    }
+    /**
+     * 生成MD5数字签名
+     */
+    public String generateMsgDigest(String msgData) {
+        try {
+            String timeStamp = String.valueOf(System.currentTimeMillis());
+          /*  String signStr = msgData + checkWord;
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            byte[] digest = md.digest(signStr.getBytes(StandardCharsets.UTF_8));
+            String md5Str = bytesToHex(digest);
+            return Base64.getEncoder().encodeToString(md5Str.getBytes(StandardCharsets.UTF_8));
+            */
+            return  getMsgDigest(msgData,timeStamp,checkWord);
+        } catch (Exception e) {
+            throw new RuntimeException("生成签名失败", e);
+        }
+    }
+/*
+
+    private String bytesToHex(byte[] bytes) {
+        StringBuilder sb = new StringBuilder();
+        for (byte b : bytes) {
+            sb.append(String.format("%02x", b));
+        }
+        return sb.toString();
+    }*/
+
+    /**
+     * 发送API请求
+     */
+    public String sendRequest(String serviceCode, String msgData) {
+        return sendRequest(serviceCode, msgData, null);
+    }
+
+    public String sendRequest(String serviceCode, String msgData, String requestId) {
+        try {
+            String requestID = requestId != null ? requestId : UUID.randomUUID().toString();
+            long timestamp = System.currentTimeMillis();
+            String msgDigest = generateMsgDigest(msgData);
+            Map<String, String> params = new HashMap<>();
+            params.put("partnerID", partnerID);
+            params.put("requestID", requestID);
+            params.put("serviceCode", serviceCode);
+            params.put("timestamp", String.valueOf(timestamp));
+            params.put("msgDigest", msgDigest);
+            params.put("msgData", msgData);
+            return doPost(url, params);
+        } catch (Exception e) {
+            throw new RuntimeException("调用顺丰API失败", e);
+        }
+    }
+
+    private String doPost(String url, Map<String, String> params) throws IOException {
+        HttpURLConnection connection = null;
+        try {
+            URL apiUrl = new URL(url);
+            connection = (HttpURLConnection) apiUrl.openConnection();
+            connection.setRequestMethod("POST");
+            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+            connection.setRequestProperty("Charset", "UTF-8");
+            connection.setConnectTimeout(30000);
+            connection.setReadTimeout(30000);
+            connection.setDoOutput(true);
+            connection.setDoInput(true);
+            StringBuilder postData = new StringBuilder();
+            for (Map.Entry<String, String> param : params.entrySet()) {
+                if (postData.length() != 0) postData.append('&');
+                postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
+                postData.append('=');
+                postData.append(URLEncoder.encode(param.getValue(), "UTF-8"));
+            }
+            try (OutputStream os = connection.getOutputStream()) {
+                byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8);
+                os.write(postDataBytes);
+                os.flush();
+            }
+            int responseCode = connection.getResponseCode();
+            if (responseCode == HttpURLConnection.HTTP_OK) {
+                try (BufferedReader in = new BufferedReader(
+                        new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
+                    StringBuilder response = new StringBuilder();
+                    String line;
+                    while ((line = in.readLine()) != null) {
+                        response.append(line);
+                    }
+                    return response.toString();
+                }
+            } else {
+                throw new IOException("HTTP请求失败,状态码: " + responseCode);
+            }
+
+        } finally {
+            if (connection != null) {
+                connection.disconnect();
+            }
+        }
+    }
+
+}

+ 110 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/util/SignUtil.java

@@ -0,0 +1,110 @@
+/*
+package com.ruoyi.logistics.util;
+
+import java.util.Map;
+import java.util.TreeMap;
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
+*/
+/**
+ * 签名工具
+ *//*
+
+public class SignUtil {
+
+    public static final String SIGN_TYPE_0 = "0";//HmacSHA256
+    public static final String SIGN_TYPE_1 = "1";//MD5
+    public static final String HMAC_SHA256 = "HmacSHA256";
+    public static final String ENCODING = "UTF-8";
+    public static final String LF = "\n";
+    public static final String SPE1 = ",";
+    public static final String SPE2 = ":";
+    public static final String SPE3 = "&";
+    public static final String SPE4 = "=";
+    public static final String SPE5 = "?";
+
+    public static String sign(String signType, String appsecret, Map<String, String> querys) {
+        String signature = "";
+        try {
+            signType = StringUtils.validateStr(signType, SIGN_TYPE_0);//默认 HmacSHA256
+            if(SIGN_TYPE_0.equals(signType)){
+                Mac hmacSha256 = Mac.getInstance(HMAC_SHA256);
+                byte[] keyBytes = appsecret.getBytes(ENCODING);
+                hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, HMAC_SHA256));
+                signature = new String(Base64.encodeBase64(hmacSha256.doFinal(buildResource(querys).getBytes(ENCODING))),
+                        ENCODING);
+            }
+            if(SIGN_TYPE_1.equals(signType)){
+                querys.put("appsecret", appsecret);
+                signature = MD5Util.getMd5(buildResource2(querys)).toUpperCase();
+                querys.remove("appsecret");
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return signature;
+    }
+
+    private static String buildResource(Map<String, String> querys) {
+        StringBuilder sb = new StringBuilder();
+        Map<String, String> sortMap = new TreeMap<String, String>();
+        if (null != querys) {
+            for (Map.Entry<String, String> query : querys.entrySet()) {
+                if (!StringUtils.isBlank(query.getKey())) {
+                    sortMap.put(query.getKey(), query.getValue());
+                }
+            }
+        }
+
+        StringBuilder sbParam = new StringBuilder();
+        for (Map.Entry<String, String> item : sortMap.entrySet()) {
+            if (!StringUtils.isBlank(item.getKey())) {
+                if (0 < sbParam.length()) {
+                    sbParam.append(SPE3);
+                }
+                sbParam.append(item.getKey());
+                if (!StringUtils.isBlank(item.getValue())) {
+                    sbParam.append(SPE4).append(item.getValue());
+                }
+            }
+        }
+        if (0 < sbParam.length()) {
+            sb.append(SPE5);
+            sb.append(sbParam);
+        }
+        System.out.println(">>>>>>>>>>>>>>>>>>>>");
+        System.out.println(sb.toString());
+        System.out.println(">>>>>>>>>>>>>>>>>>>>");
+        return sb.toString();
+    }
+    private static String buildResource2(Map<String, String> querys) {
+        StringBuilder sb = new StringBuilder();
+        Map<String, String> sortMap = new TreeMap<String, String>();
+        if (null != querys) {
+            for (Map.Entry<String, String> query : querys.entrySet()) {
+                if (!StringUtils.isBlank(query.getKey())) {
+                    sortMap.put(query.getKey(), query.getValue());
+                }
+            }
+        }
+
+        StringBuilder sbParam = new StringBuilder();
+        for (Map.Entry<String, String> item : sortMap.entrySet()) {
+            if (!StringUtils.isBlank(item.getKey())) {
+                if (!StringUtils.isBlank(item.getValue())) {
+                    sbParam.append(item.getValue());
+                }
+            }
+        }
+        if (0 < sbParam.length()) {
+            sb.append(sbParam);
+        }
+        System.out.println(">>>>>>>>>>>>>>>>>>>>");
+        System.out.println(sb.toString());
+        System.out.println(">>>>>>>>>>>>>>>>>>>>");
+        return sb.toString();
+    }
+}
+*/

+ 1 - 1
jd-logistics-ui-v3/.env.development

@@ -7,4 +7,4 @@ VITE_APP_ENV = 'development'
 # 瑞鲸速达平台/开发环境
 VITE_APP_BASE_API = '/dev-api'
 
-VITE_APP_API_BASE_URL = 'http://192.168.100.246:8080'
+VITE_APP_API_BASE_URL = 'http://localhost:8080'