From d5b3e5a413bcfccba294793ee093722f31b2448a Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 16 八月 2023 17:02:13 +0800
Subject: [PATCH] 添加推单日志

---
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/PayMoneyUtil.java |  109 ++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 84 insertions(+), 25 deletions(-)

diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/PayMoneyUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/PayMoneyUtil.java
index f9a71ba..9f2033b 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/PayMoneyUtil.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/PayMoneyUtil.java
@@ -16,13 +16,19 @@
 import com.alipay.api.response.AlipayTradeQueryResponse;
 import com.alipay.api.response.AlipayTradeRefundResponse;
 import com.supersavedriving.driver.modular.system.util.httpClinet.HttpClientUtil;
+import com.wechat.pay.java.core.RSAConfig;
+import com.wechat.pay.java.core.cipher.PrivacyEncryptor;
+import com.wechat.pay.java.core.cipher.RSAPrivacyEncryptor;
+import com.wechat.pay.java.service.transferbatch.TransferBatchService;
+import com.wechat.pay.java.service.transferbatch.model.InitiateBatchTransferRequest;
+import com.wechat.pay.java.service.transferbatch.model.InitiateBatchTransferResponse;
+import com.wechat.pay.java.service.transferbatch.model.TransferDetailInput;
 import org.apache.commons.collections.map.HashedMap;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 import org.dom4j.Document;
 import org.dom4j.DocumentException;
 import org.dom4j.Element;
 import org.dom4j.io.SAXReader;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
@@ -36,12 +42,10 @@
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Security;
+import java.security.*;
 import java.util.*;
 
 /**
@@ -74,7 +78,11 @@
     @Value("${callbackPath}")
     private String callbackPath;//支付回调网关地址
 
-    private Map<String, JSONObject> order = new HashMap<>();//存储支付订单用于主动查询支付结果
+    private String wechatPayCertificatesFromPath = "/usr/local/server/app/cert/weixin/apiclient_cert.p12";//微信支付证书地址
+
+    private String privateKeyFromPath = "/usr/local/server/app/cert/weixin/apiclient_cert.pem";//微信私钥证书地址
+
+
 
 
     /**
@@ -629,13 +637,14 @@
      * @return
      * @throws Exception
      */
-    public ResultUtil queryWXOrder() throws Exception{
+    public ResultUtil<Map<String, String>> queryWXOrder(String out_trade_no, String transaction_id) throws Exception{
         String url = "https://api.mch.weixin.qq.com/pay/orderquery";
         String nonce_str = UUIDUtil.getRandomCode(16);
         Map<String, Object> map = new HashMap<>();
         map.put("appid", appid);
         map.put("mch_id", mchId);
-        map.put("transaction_id", nonce_str);//微信订单号
+        map.put("out_trade_no", out_trade_no);//商户订单号
+        map.put("transaction_id", transaction_id);//微信订单号
         map.put("nonce_str", nonce_str);//随机字符串
         String s = this.weixinSignature(map);
         map.put("sign", s);
@@ -670,31 +679,71 @@
         if("SUCCESS".equals(return_code)){
             String result_code = map1.get("result_code");
             if("SUCCESS".equals(result_code)){
-                String type = map1.get("trade_type");
-                switch (type){
-                    case "JSAPI":
-                        break;
-                    case "NATIVE":
-                        String code_url = map1.get("code_url");
-                        return ResultUtil.success(code_url);
-                    case "APP":
-                        String trade_state = map1.get("trade_state");
-                        String time_end = map1.get("time_end");
-                        Map<String, Object> map2 = new HashMap<>();
-                        map2.put("trade_state", trade_state);//订单状态SUCCESS—支付成功,REFUND—转入退款,NOTPAY—未支付,CLOSED—已关闭,REVOKED—已撤销(刷卡支付),USERPAYING--用户支付中,PAYERROR--支付失败(其他原因,如银行返回失败)
-                        map2.put("time_end", time_end);//订单支付时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。
-                        return ResultUtil.success(map2);
-                }
-                return null;
+                Map<String, String> map2 = new HashMap<>();
+                map2.put("trade_type", map1.get("trade_type"));
+                map2.put("trade_state", map1.get("trade_state"));//订单状态SUCCESS—支付成功,REFUND—转入退款,NOTPAY—未支付,CLOSED—已关闭,REVOKED—已撤销(刷卡支付),USERPAYING--用户支付中,PAYERROR--支付失败(其他原因,如银行返回失败)
+                map2.put("transaction_id", map1.get("transaction_id"));
+                return ResultUtil.success(map2);
             }else{
                 System.err.println(map1.get("err_code_des"));
                 return ResultUtil.error(map1.get("err_code_des"));
             }
         }else{
             System.err.println(map1.get("return_msg") + appid + "----" + mchId);
-            return ResultUtil.error(map1.get("return_msg"), new JSONObject());
+            return ResultUtil.error(map1.get("return_msg"));
         }
     }
+
+
+    /**
+     * 微信商户转账零钱
+     * @param outDetailNo   商家流水号
+     * @param amount        转账金额
+     * @param openid        收款openid
+     * @param userName      收款用户姓名
+     * @param remark        备注
+     * @return
+     */
+    public String weixinTransferMoney(String outDetailNo, Double amount, String openid, String userName, String remark){
+        RSAConfig config =
+                new RSAConfig.Builder()
+                        .merchantId(mchId)
+                        .privateKeyFromPath(privateKeyFromPath)
+                        .merchantSerialNumber("7630124B15BA87F2CF0F35883988DE34D62089DA")
+                        .wechatPayCertificatesFromPath(wechatPayCertificatesFromPath)
+                        .build();
+        TransferBatchService service = new TransferBatchService.Builder().config(config).build();
+        InitiateBatchTransferRequest initiateBatchTransferRequest =
+                new InitiateBatchTransferRequest();
+        initiateBatchTransferRequest.setAppid(appid);
+        initiateBatchTransferRequest.setOutBatchNo(outDetailNo);
+        initiateBatchTransferRequest.setBatchName("付款");
+        initiateBatchTransferRequest.setBatchRemark(remark);
+        initiateBatchTransferRequest.setTotalAmount(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue());
+        initiateBatchTransferRequest.setTotalNum(1);
+        {
+            List<TransferDetailInput> transferDetailListList = new ArrayList<>();
+            {
+                TransferDetailInput transferDetailInput = new TransferDetailInput();
+                transferDetailInput.setOutDetailNo(outDetailNo);
+                transferDetailInput.setTransferAmount(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue());
+                transferDetailInput.setTransferRemark(remark);
+                transferDetailInput.setOpenid(openid);
+                if(amount > 0.3){
+                    transferDetailInput.setUserName(userName);
+                }
+                transferDetailListList.add(transferDetailInput);
+            }
+            initiateBatchTransferRequest.setTransferDetailList(
+                    transferDetailListList);
+        }
+        initiateBatchTransferRequest.setTransferSceneId("1000");
+        InitiateBatchTransferResponse response =
+                service.initiateBatchTransfer(initiateBatchTransferRequest);
+        return response.getBatchId();
+    }
+
+
 
 
 
@@ -755,6 +804,16 @@
         return null;
     }
 
+    public String RSAPrivacyEncryptor(){
+        // 微信支付平台证书中的公钥
+        PublicKey wechatPayPublicKey = null;
+        String plaintext = "";
+        PrivacyEncryptor encryptor = new RSAPrivacyEncryptor(wechatPayPublicKey, "");
+        String ciphertext = encryptor.encrypt(plaintext);
+        return ciphertext;
+    }
+
+
 
     /**
      * 微信退款成功后的解密

--
Gitblit v1.7.1