Kaynağa Gözat

修改支付宝支付单推海关模块

zhh 3 yıl önce
ebeveyn
işleme
66df304fc6

+ 30 - 6
kmall-admin/src/main/java/com/kmall/admin/cuspay/biz/ali/AliCusDeclareBiz.java

@@ -17,6 +17,7 @@ import com.kmall.admin.cuspay.manager.snow.SnowflakeUtil;
 import com.kmall.admin.cuspay.service.MerchNotiService;
 import com.kmall.admin.cuspay.support.msg.resp.ResponseMessage;
 import com.kmall.admin.cuspay.support.msg.resp.ResponseStatus;
+import com.kmall.admin.cuspay.support.sign.RSA;
 import com.kmall.admin.cuspay.util.*;
 import com.kmall.admin.cuspay.ccnet2cuspay.common.MerchNotiBuilder;
 import com.kmall.admin.cuspay.ccnet2cuspay.service.ali.AliCbPayDocService;
@@ -119,6 +120,15 @@ public class AliCusDeclareBiz extends AbstractCusDeclareBiz implements CuspayBiz
             aliCbPayDoc.setPartner(partner);
             // 该交易在支付宝系统中的交易流水号
             aliCbPayDoc.setTradeNo(params.get("tradeNo").toString());
+            // 订购人姓名,可空
+            if (params.get("buyerIdNo") != null) {
+                aliCbPayDoc.setBuyerName(params.get("buyerIdNo").toString());
+            }
+            // 订购人身份证号,可空
+            if (params.get("buyerName") != null) {
+                aliCbPayDoc.setBuyerIdNo(params.get("buyerName").toString());
+            }
+
             // *********设置支付单报关参数*********
 
             // *********设置商户通知表参数*********
@@ -193,10 +203,9 @@ public class AliCusDeclareBiz extends AbstractCusDeclareBiz implements CuspayBiz
         Map<String, Object> stringObjectMap = null;
 
         try {
-            // todo, 请求海关接口
-             String result = OkHttpUtils.get(declareURL + paramter);
-//            String result = "";
-            result = new String(result.getBytes("GBK"));
+            // 请求海关接口
+            String result = OkHttpUtils.get(declareURL + paramter);
+            result = new String(result.getBytes(StandardCharsets.UTF_8));
             doc = DocumentHelper.parseText(result);
             logger.info("alipay response message result :" + result);
             stringObjectMap = XmlUtils.Dom2Map(doc);
@@ -341,7 +350,10 @@ public class AliCusDeclareBiz extends AbstractCusDeclareBiz implements CuspayBiz
      * @param aliCbPayDoc 支付宝支付数据
      * @return
      */
-    protected static String assemblyDeclareXml(AliCbPayDoc aliCbPayDoc) {
+    protected String assemblyDeclareXml(AliCbPayDoc aliCbPayDoc) {
+        String MD5Key = environment.getProperty("ali.payment.md5.key");
+        String RSAPrivateKey = environment.getProperty("ali.payment.rsa.private-key");
+
         Map<String, String> paramMap = new HashMap<>();
         paramMap.put("amount", aliCbPayDoc.getAmount());
         paramMap.put("customs_place", aliCbPayDoc.getCustomsPlace());
@@ -352,6 +364,12 @@ public class AliCusDeclareBiz extends AbstractCusDeclareBiz implements CuspayBiz
         paramMap.put("partner", aliCbPayDoc.getPartner());
         paramMap.put("service", "alipay.acquire.customs");
         paramMap.put("trade_no", aliCbPayDoc.getTradeNo());
+        if (org.apache.commons.lang.StringUtils.isNotBlank(aliCbPayDoc.getBuyerName())) {
+            paramMap.put("buyer_name", aliCbPayDoc.getBuyerName());
+        }
+        if (org.apache.commons.lang.StringUtils.isNotBlank(aliCbPayDoc.getBuyerIdNo())) {
+            paramMap.put("buyer_id_no", aliCbPayDoc.getBuyerIdNo());
+        }
         List<String> keys = new ArrayList<>(paramMap.keySet());
         Collections.sort(keys);
         String prestr = "";
@@ -364,8 +382,14 @@ public class AliCusDeclareBiz extends AbstractCusDeclareBiz implements CuspayBiz
                 prestr = prestr + key + "=" + value + "&";
             }
         }
-        String sign = MD5.sign(prestr, "6zo20oar6qufb6x41ipli3yma9ju107h", "UTF-8");
+        // MD5加密
+        String sign = MD5.sign(prestr, MD5Key, "UTF-8");
         prestr = prestr + "&sign_type=MD5";
+
+        // RSA加密
+        // String sign = RSA.sign(prestr, RSAPrivateKey, "UTF-8");
+        // prestr = prestr + "&sign_type=RSA";
+
         prestr = prestr + "&sign=" + sign;
         prestr = "?" + prestr;
         return prestr;

+ 24 - 12
kmall-admin/src/main/java/com/kmall/admin/cuspay/biz/ali/AliCusDeclareQueryBiz.java

@@ -14,6 +14,7 @@ import com.kmall.admin.cuspay.common.core.db.IdWorkerAide;
 import com.kmall.admin.cuspay.entity.merch.MerchNoti;
 import com.kmall.admin.cuspay.entity.merch.MerchPayCfg;
 import com.kmall.admin.cuspay.service.MerchNotiService;
+import com.kmall.admin.cuspay.support.sign.RSA;
 import com.kmall.admin.cuspay.util.OkHttpUtils;
 import com.kmall.admin.cuspay.util.ReaderXmlForDOM4J;
 import com.kmall.admin.cuspay.util.XmlUtils;
@@ -41,6 +42,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.PropertySource;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
 import com.kmall.admin.cuspay.biz.ali.support.sign.MD5;
 
@@ -61,14 +63,14 @@ import java.util.*;
 public class AliCusDeclareQueryBiz extends AbstractCusDeclareBiz implements CuspayBiz {
     private static final Logger logger = LoggerFactory.getLogger(AliCusDeclareQueryBiz.class);
 
-//    @Value("${db.ali.declare.limit}")
-    private Integer limit = 20;
+    @Autowired
+    private Environment environment;
+
+    private Integer limit;
 
-//    @Value("${db.ali.declare.count}")
-    private Integer count = 2;
+    private Integer count;
 
-//    @Value("${ali.payment.query.url}")
-    private String queryURL = "https://mapi.alipay.com/gateway.do?";
+    private String queryURL;
 
     @Autowired
     private AliCbPayDocService aliCbPayDocService;
@@ -82,11 +84,12 @@ public class AliCusDeclareQueryBiz extends AbstractCusDeclareBiz implements Cusp
     /**
      * 微信订单信息查询
      */
+    @Override
     public void biz(Map<String, Object> params) {
-        // -------- TODO ALL ----
 
-        limit = (limit != null && limit > 0) ? limit : 20;
-        count = (count != null && count > 0) ? count : 10;
+        limit = Integer.parseInt(environment.getProperty("db.ali.declare.limit"));
+        count = Integer.parseInt(environment.getProperty("db.ali.declare.count"));
+        queryURL = environment.getProperty("ali.payment.query.url");
 
         //查出等待处理、业务处理中的支付单证信息
         List<AliCbPayDoc> aliCbPayDocs = null;
@@ -232,7 +235,7 @@ public class AliCusDeclareQueryBiz extends AbstractCusDeclareBiz implements Cusp
                             aliCbPayDoc.setDocStatus(AliDict.PaymentDocStatus.i_03.getItem());
                             this.aliCbPayDocService.updateAliCbPay(aliCbPayDoc);
                             merchNoti = builder.code(AliDict.ResponseMsgState.FAIL.getItem()).msg("未查询到报关请求号").cusDeclStatus(AliDict.MerchNoticeStatus.i_13.getItem()).certCheckResult(MerchNoticeDict.BuyerPayerCheckStatus.i_0.getItem()).build();
-                                                                                                  MerchNoti noti = new MerchNoti();
+                            MerchNoti noti = new MerchNoti();
                             noti.setNotiSn(builder.build().getNotiSn());
                             merchNoti.setNotiSn(builder.build().getNotiSn());
                             noti.setCode(aliCbPayDoc.getDetailErrorCode());
@@ -308,7 +311,10 @@ public class AliCusDeclareQueryBiz extends AbstractCusDeclareBiz implements Cusp
      * @param key2 Api密钥
      * @return
      */
-    protected static String assemblyDeclareQueryXml(AliCbPayDoc aliCbPayDoc, String key2) {
+    protected String assemblyDeclareQueryXml(AliCbPayDoc aliCbPayDoc, String key2) {
+        String MD5Key = environment.getProperty("ali.payment.md5.key");
+        String RSAPrivateKey = environment.getProperty("ali.payment.rsa.private-key");
+
         Map<String, String> paramMap = new HashMap<>();
         paramMap.put("_input_charset", "UTF-8");
         paramMap.put("out_request_nos", aliCbPayDoc.getOutRequestNo());
@@ -326,8 +332,14 @@ public class AliCusDeclareQueryBiz extends AbstractCusDeclareBiz implements Cusp
                 prestr = prestr + key + "=" + value + "&";
             }
         }
-        String sign = MD5.sign(prestr, "6zo20oar6qufb6x41ipli3yma9ju107h", "UTF-8");
+        // MD5加密
+        String sign = MD5.sign(prestr, MD5Key, "UTF-8");
         prestr = prestr + "&sign_type=MD5";
+
+        // RSA加密
+        // String sign = RSA.sign(prestr, RSAPrivateKey, "UTF-8");
+        // prestr = prestr + "&sign_type=RSA";
+
         prestr = prestr + "&sign=" + sign;
         prestr = "?" + prestr;
         return prestr;

+ 2 - 2
kmall-admin/src/main/java/com/kmall/admin/cuspay/biz/wx/WxCusDeclareBiz.java

@@ -186,7 +186,7 @@ public class WxCusDeclareBiz extends AbstractCusDeclareBiz implements CuspayBiz
         try {
             addWxCbPayDoc(wxCbPayDoc);
         } catch (Exception e) {
-            logger.error("微信支付单信息写入数据库失败:" + e.getMessage());
+            logger.error("微信支付单信息写入数据库失败:", e);
             return;
         }
         logger.info("微信支付单信息写入数据库结束");
@@ -232,7 +232,7 @@ public class WxCusDeclareBiz extends AbstractCusDeclareBiz implements CuspayBiz
 
         WxResponseMsg wxResponseMsgDto = null;
         try {
-            // todo, 请求海关接口
+            // 请求海关接口
             String result = OkHttpUtils.post(request);
             StringReader reader = new StringReader(result);
             wxResponseMsgDto = JAXB.unmarshal(reader, WxResponseMsg.class);

+ 4 - 3
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -2569,13 +2569,12 @@ public class OrderServiceImpl implements OrderService {
             if (!org.springframework.util.StringUtils.isEmpty(env) && Constants.PROD.equals(env)) {
                 if (parCode.startsWith("28")) {
                     // 支付宝支付
-                    throw new ServiceException("目前暂不支持支付宝付款!请使用微信进行支付!");
-                    /*try {
+                    try {
                         AliPay(user, parCode, order, processRecordEntity, orderWXPayRecordCurrent, store);
                     } catch (Exception e) {
                         LOGGER.error("支付宝支付出现异常!订单号:【{}】", order.getOrder_sn(), e);
                         throw e;
-                    }*/
+                    }
                 } else {
                     // 微信支付
                     try {
@@ -3147,6 +3146,8 @@ public class OrderServiceImpl implements OrderService {
         orderSendCusParams.put("thirdPartyMerchName", store.getThirdPartyMerchName());
         orderSendCusParams.put("tradeNo", order.getAliTradeNo());
         orderSendCusParams.put("amount", order.getActual_price());
+        orderSendCusParams.put("buyerIdNo", order.getIdCard());
+        orderSendCusParams.put("buyerName", order.getPay_name());
 
         // 将支付单信息发送到当前项目下的 cuspay
         aliCusDeclareBiz.biz(orderSendCusParams);

+ 28 - 3
kmall-admin/src/main/resources/conf/cuspay/cuspay-ali.properties

@@ -2,17 +2,23 @@
 ########## \u539F\u9879\u76EE\u65E0\u914D\u7F6E\u6587\u4EF6\u6CE8\u91CA ##########
 
 
-# \u652F\u4ED8\u5B9D
+# \u652F\u4ED8\u5B9D\u65E7\u7248\u672C\u63A5\u53E3\u914D\u7F6E
 ali.payment.declare.url=https://mapi.alipay.com/gateway.do?
 ali.payment.query.url=https://mapi.alipay.com/gateway.do?
 
+# MD5\u5BC6\u94A5 - \u4E2D\u7F51\u5546\u6237
+ali.payment.md5.key=6zo20oar6qufb6x41ipli3yma9ju107h
+# RSA\u5F00\u53D1\u8005\u79C1\u94A5 - \u6D77\u63A7\u63D0\u4F9B
+ali.payment.rsa.private-key=MIIEpAIBAAKCAQEA282CGIYVvLrrpZq9BlXIvJtkM4CfxsZvG+6tmvMj23+2UvXn0686ga8qLKd7sCBRSQTWQplQ1DqlFIcT8VgSDDVRTVzn39j/oxm+yruTMm3Xu08Hi0rinVNOzANhajlLwJy75SfNg+xyP5ENaQQXOWYruL0YS4xHL1xEsZGAZvZYThbd1UjM/UzjndiWOuh6U5aB/Ty7LasU1rcJfluXQxxHgunVH8HGgwzCkmbQpdVzwmg365ZQ64y+i/5nmjLOQOfGcj6Vd0zlmsIUOhtmTfAk+MLMW9xRKI8aVf5L5i5upa8WT/8V1QLAP/fHl3rMmfYeR81wV3oQbTw2p9LFpQIDAQABAoIBAF1xN25filwqhsVnTBamX2k3ElkGxGYHs/KG/EzUMpk86PDJ051dcBzzr5U+Okn84zGMmd3EOeWPbOCWMDc4vqtr+z1NUtIJ+VuINWEQbxpQMhdSGJ3x3vcNFIGMqlwzMW4X85UO38LGwSce7jmH4KupMMsfsHVllFmg+x8WASVDqTvenBGN2e9JpX5j43r5QIBegXdBgMs/MwEgS7N4ntSCzD2UzpRrUrK95YEiJJolmWEcyxJhgUVTFCHHAUFW1maqPA+MPAEV+gvzFSyqQ3ohWbDPCeC/PvSyPVJjMoue4AQkjwJnDhfw1KG90pyNiME6MexO8edhlP7PBSdKrf0CgYEA8YWOIGYumxW7KZvi5z8eQGXn62nl+mC3GlMRyAvIe2cgZZ7pfu0p4cU6p/npAC/xWyiQgv0XxeTjN7KVe+i4mNXuxN/XmPdmm9oIRH0O52/8lHG1H+jTyOFQFJvtkN7lJJ7hf1HSWWoN2ohLyBq9yzTCVKkJ//jkVK2GMlTloisCgYEA6PqmRbTqxMykRVwTo55h5WEuVkbdD4CNDAieStl5L3UFdYSwWX6EwLs0qpaCjtfNLzUNfDWnWi6CaEDCsRYGpcwk5I6DSnquQW3DDc8U7eWZCphNezN8Fts5hwojWzHCvuddMe3iDCx8Ix5na9M4Bu3RI4ZVHsXZg2bNn1b6328CgYBuNFK11epOOYw9YDQY8GQNXnKEqL2Xkan7CQyEC1xfcp8Fv40rrWv+6M/q9c2rmDS5M7k9C99dHSPQtlwfPgF9O6DHlJv74GehlctP9QBn+mF2Gqxa8xIwBx9TSBMOl6ZXH2glgGBLDGll3es2U31my5wgpUE624bUXJlvPe3KIQKBgQDfapYOnKrSJKiXNvBCZHzeme30oKoW1qDr3Evn3VsALokYpDD08YXeyOd9ey4iS0Ihtg+DgHRG3/kAfrH1Xfjr/7OVVjEDOFhouBhn4qDgbd/wMBOFRN8HkB0/qXI0Xqixp29QlR3DrNkyWFK3LOs6gc6f8Y8pHnQzNV+UILYdkwKBgQCQdHftPG9PYyhjfJQmCStLs48w1BxOLE3gA3mMwzBPtyHUYPVCfp+XFBzzn2aCwXiCp9K3t5LW/sCqSgm1ipuZqUM38qrP8APXrFU2QtjmBiP651kQ8czRcJM2P7f330VtMxCIqjkaQV1gcAK96Oy0mqUMGcfo9qAvNlLKo1NFPw==
+
 
 #\u5B9A\u65F6\u5668\u62A5\u5173\u4E00\u6B21\u533A\u7684\u6570\u636E
 db.ali.declare.limit=20
 db.ali.declare.count=2
 
+############################################
 
-# \u5546\u6237\u4FE1\u606F
+## \u5F00\u53D1\u73AF\u5883 - \u5546\u6237\u4FE1\u606F
 # \u5E73\u53F0\u7F16\u53F7
 merchant.plat-sn=146001
 # \u5E73\u53F0\u4E2D\u6587\u540D
@@ -22,7 +28,19 @@ merchant.customs-code=4403160Z3Y
 # \u5546\u6237\u6D77\u5173\u5907\u6848\u540D\u79F0
 merchant.customs-name=\u4E2D\u7F51\u79D1\u6280\uFF08\u6DF1\u5733\uFF09\u6709\u9650\u516C\u53F8
 
+## \u751F\u4EA7\u73AF\u5883 - \u6D77\u63A7\u5546\u6237\u4FE1\u606F
+# \u5E73\u53F0\u7F16\u53F7
+#merchant.plat-sn=44048600Y8
+## \u5E73\u53F0\u4E2D\u6587\u540D
+#merchant.plat-name=\u73E0\u6D77\u6D77\u63A7\u79D1\u6280\u6709\u9650\u516C\u53F8
+## \u5546\u6237\u6D77\u5173\u5907\u6848\u7F16\u53F7
+#merchant.customs-code=44048600Y8
+## \u5546\u6237\u6D77\u5173\u5907\u6848\u540D\u79F0
+#merchant.customs-name=\u73E0\u6D77\u6D77\u63A7\u79D1\u6280\u6709\u9650\u516C\u53F8
+
+############################################
 
+## \u5F00\u53D1\u73AF\u5883
 # ccnet\u9ED8\u8BA4\u914D\u7F6E\u6587\u4EF6\u7684\u503C
 cus.play.alipay.partner=2088821582509154
 cus.play.alipay.customs=ZONGSHU
@@ -33,4 +51,11 @@ cus.play.alipay.customs=ZONGSHU
 
 # ccnet test\u914D\u7F6E\u6587\u4EF6\u7684\u503C
 #cus.play.alipay.partner=2088821582509154
-#cus.play.alipay.customs=ZONGSHU
+#cus.play.alipay.customs=ZONGSHU
+
+
+## \u751F\u4EA7\u73AF\u5883 - \u6D77\u63A7\u652F\u4ED8\u5B9D\u4FE1\u606F
+## \u652F\u4ED8\u5B9D\u5546\u6237\u5408\u4F5C\u4F19\u4F34\u8EAB\u4EFD\uFF08PID\uFF09
+#cus.play.alipay.partner=2088731576886261
+## \u6D77\u5173\uFF0C\u5E7F\u5DDE\uFF08\u603B\u7F72\uFF09
+#cus.play.alipay.customs=GUANGZHOU_ZS

+ 6 - 1
切换环境需要修改的.md

@@ -33,4 +33,9 @@
 10. 微信支付推送海关支付凭证
     cuspay-wx.properties,修改为海控生产环境配置
 
-11. 如果测试环境需要测试支付,请在OrderServiceImpl的判断付款码之前加上:env = "prod";
+11. 如果测试环境需要测试支付,请在OrderServiceImpl的判断付款码之前加上:env = "prod";
+
+12. 支付宝支付推送海关支付凭证
+    cuspay-ali.properties,修改为海控生产环境配置
+    AliCusDeclareBiz.assemblyDeclareXml() 修改加密方法为RSA
+    AliCusDeclareQueryBiz.assemblyDeclareQueryXml() 修改加密方法为RSA