From 9a94c295952d513c1703aa8d3fcf54d17da168e5 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期六, 07 十月 2023 14:50:39 +0800
Subject: [PATCH] 对账

---
 server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java               |   16 +++
 .gitignore                                                                            |   25 +++-
 server/platform/src/main/java/com/doumee/task/ScheduleTool.java                       |   13 ++
 server/services/src/main/java/com/doumee/core/wx/WxMiniConfig.java                    |   33 +++---
 server/services/src/main/java/com/doumee/core/wx/pay/WxBillUtil.java                  |  115 +++++++++++++++++++++++
 server/services/src/main/java/com/doumee/service/business/WxBillService.java          |    1 
 server/pom.xml                                                                        |    6 +
 server/services/src/main/java/com/doumee/core/constants/Constants.java                |    2 
 server/services/src/main/resources/application-dev.yml                                |    3 
 .idea/misc.xml                                                                        |    9 +
 server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java |   29 +++++
 11 files changed, 228 insertions(+), 24 deletions(-)

diff --git a/.gitignore b/.gitignore
index 32858aa..5003e5f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,12 +1,25 @@
+coderd.json
+target/
+*.iml
+log/
+#idea
+.idea
+*.iws
+*.iml
+*.ipr
+.mvn
+mvnw
+mvnw.cmd
+# Compiled class file
 *.class
 
-# Mobile Tools for Java (J2ME)
-.mtj.tmp/
+# Log file
+*.log
+log/
+logs
+.DS_Store
+tmp
 
 # Package Files #
 *.jar
 *.war
-*.ear
-
-# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
-hs_err_pid*
diff --git a/.idea/misc.xml b/.idea/misc.xml
index efdee13..436a65d 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/server/pom.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
   <component name="SuppressionsComponent">
     <option name="suppComments" value="[]" />
   </component>
diff --git a/server/platform/src/main/java/com/doumee/task/ScheduleTool.java b/server/platform/src/main/java/com/doumee/task/ScheduleTool.java
index c9873e4..ad8077e 100644
--- a/server/platform/src/main/java/com/doumee/task/ScheduleTool.java
+++ b/server/platform/src/main/java/com/doumee/task/ScheduleTool.java
@@ -2,6 +2,7 @@
 
 
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.service.business.WxBillService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -21,13 +22,23 @@
 
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private WxBillService wxBillService;
 
     /**
      * @throws Exception
      */
-    @Scheduled(cron = "0 0 02 * * ? ")
+    @Scheduled(cron = "0 0 11 * * ? ")
     public void syncStudent() throws Exception {
+        wxBillService.getWxBill();
 
+    }
+    /**
+     * @throws Exception
+     */
+    @Scheduled(fixedDelay = 1000*60)
+    public void getYesterdayBill() throws Exception {
+        wxBillService.getWxBill();
 
     }
 }
diff --git a/server/pom.xml b/server/pom.xml
index d8c21c1..9510e74 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -281,6 +281,12 @@
       <artifactId>weixin-java-pay</artifactId>
       <version>${weixin-java-pay.version}</version>
     </dependency>
+    <dependency>
+      <groupId>com.github.wechatpay-apiv3</groupId>
+      <artifactId>wechatpay-java</artifactId>
+      <version>0.2.11</version>
+    </dependency>
+
   </dependencies>
 
   <build>
diff --git a/server/services/src/main/java/com/doumee/core/constants/Constants.java b/server/services/src/main/java/com/doumee/core/constants/Constants.java
index 11b1dc1..92b1709 100644
--- a/server/services/src/main/java/com/doumee/core/constants/Constants.java
+++ b/server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -25,6 +25,8 @@
     public static final String SYSTEM ="SYSTEM" ;
     public static final String IMG_DIR = "IMG_DIR";
     public static final String FILE_DIR ="FILE_DIR" ;
+    public static final String PRIVATE_KEY = "PRIVATE_KEY";
+    public static final String MINI_PROGRAMME ="MINI_PROGRAMME" ;
     public static String REDIS_DEBUG_STR="test_";
 
   /**
diff --git a/server/services/src/main/java/com/doumee/core/wx/WxMiniConfig.java b/server/services/src/main/java/com/doumee/core/wx/WxMiniConfig.java
index 8225591..237c8fd 100644
--- a/server/services/src/main/java/com/doumee/core/wx/WxMiniConfig.java
+++ b/server/services/src/main/java/com/doumee/core/wx/WxMiniConfig.java
@@ -4,7 +4,10 @@
 import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
 import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
 import com.doumee.config.mybatis.SpringUtils;
+import com.github.binarywang.wxpay.config.WxPayConfig;
+import com.github.binarywang.wxpay.constant.WxPayConstants;
 import com.github.binarywang.wxpay.service.WxPayService;
+import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
@@ -19,10 +22,10 @@
     /********寰俊灏忕▼搴忔湇鍔�**********/
     public static WxMaService wxMaService;
     /********寰俊灏忕▼搴忔敮浠�**********/
-    public static WxPayService wxPayService;
     /********寰俊APP鏀粯**********/
     public static WxPayService wxAppPayService;
 
+    public static WxPayService wxPayService;
 
     @Autowired
     private WxPayProperties wxPayProperties;
@@ -34,7 +37,7 @@
     @PostConstruct
     void init() {
         this.load_WxMaService();
-//        this.load_wxPayService();
+        this.load_wxPayService();
 //        this.load_wxAppPayService();
     }
     /**
@@ -55,19 +58,19 @@
     /**
      * 鍒濆鍖栧井淇″皬绋嬪簭鏀粯
      */
-//    public void load_wxPayService() {
-//        WxPayConfig payConfig = new WxPayConfig();
-//        payConfig.setTradeType(WxPayConstants.TradeType.JSAPI);
-//        payConfig.setSignType(WxPayConstants.SignType.MD5);
-//        payConfig.setAppId(StringUtils.trimToNull(wxPayProperties.getAppId()));
-//        payConfig.setMchId(StringUtils.trimToNull(wxPayProperties.getMchId()));
-//        payConfig.setMchKey(StringUtils.trimToNull(wxPayProperties.getMchKey()));
-//        payConfig.setKeyPath(StringUtils.trimToNull(wxPayProperties.getKeyPath()));
-//        payConfig.setNotifyUrl(StringUtils.trimToNull(wxPayProperties.getNotifyUrl()));
-//        WxPayService wxPayService = new WxPayServiceImpl();
-//        wxPayService.setConfig(payConfig);
-//        this.wxPayService = wxPayService;
-//    }
+    public void load_wxPayService() {
+        WxPayConfig payConfig = new WxPayConfig();
+        payConfig.setTradeType(WxPayConstants.TradeType.JSAPI);
+        payConfig.setSignType(WxPayConstants.SignType.MD5);
+        payConfig.setAppId(StringUtils.trimToNull(wxPayProperties.getAppId()));
+        payConfig.setMchId(StringUtils.trimToNull(wxPayProperties.getMchId()));
+        payConfig.setMchKey(StringUtils.trimToNull(wxPayProperties.getMchKey()));
+        payConfig.setKeyPath(StringUtils.trimToNull(wxPayProperties.getKeyPath()));
+        payConfig.setNotifyUrl(StringUtils.trimToNull(wxPayProperties.getNotifyUrl()));
+        WxPayService wxPayService = new WxPayServiceImpl();
+        wxPayService.setConfig(payConfig);
+        this.wxPayService = wxPayService;
+    }
 
 
 
diff --git a/server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java b/server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java
index 71d329e..4c42c9b 100644
--- a/server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java
+++ b/server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java
@@ -1,17 +1,28 @@
 package com.doumee.core.wx;
 
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.Constants;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.utils.ID;
+import com.doumee.dao.business.ActionLogMapper;
 import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
+import com.github.binarywang.wxpay.bean.request.WxPayDownloadBillRequest;
 import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
+import com.github.binarywang.wxpay.bean.result.WxPayBillResult;
 import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.yaml.snakeyaml.scanner.Constant;
 
 import java.math.BigDecimal;
+import java.security.KeyFactory;
+import java.security.Signature;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.util.Base64;
 
 /**
  * 寰俊灏忕▼搴�-鍏叡鏂规硶
@@ -20,6 +31,9 @@
 @Slf4j
 public class WxMiniUtilService {
 
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
     /**
      * 璁㈠崟寰俊閫�娆�
@@ -50,4 +64,6 @@
         }
         throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閫�娆惧彂鐢熷紓甯歌鑱旂郴绠$悊鍛�");
     }
+
+
 }
diff --git a/server/services/src/main/java/com/doumee/core/wx/pay/WxBillUtil.java b/server/services/src/main/java/com/doumee/core/wx/pay/WxBillUtil.java
new file mode 100644
index 0000000..f907810
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/wx/pay/WxBillUtil.java
@@ -0,0 +1,115 @@
+package com.doumee.core.wx.pay;
+import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
+import com.alibaba.fastjson.JSONObject;
+import com.github.binarywang.wxpay.config.WxPayConfig;
+import okhttp3.HttpUrl;
+
+import java.io.UnsupportedEncodingException;
+import java.security.KeyFactory;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.Signature;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+
+// Authorization: <schema> <token>
+// GET - getToken("GET", httpurl, "")
+// POST - getToken("POST", httpurl, json)
+
+public class WxBillUtil {
+
+    public static void getBill(){
+        // 鍒涘缓寰俊鏀粯API瀵硅薄
+        WxPayConfig config = new WxPayConfig();
+//        WxPay wxpay = new WxMaServiceImpl();
+//        wxpay.setWxMaConfig(config);
+
+// 璁剧疆瀵硅处鍗曞弬鏁�
+        Map<String, String> data = new HashMap<>();
+        data.put("bill_date", "20231001");  // 璁剧疆瀵硅处鏃ユ湡
+        data.put("bill_type", "ALL");  // 璁剧疆瀵硅处鍗曠被鍨嬶紝鍙�夊�硷細ALL銆丼UCCESS銆丷EFUND銆丷ECHARGE_REFUND
+
+// 璋冪敤涓嬭浇瀵硅处鍗曟帴鍙�
+//        Map<String, String> result = wxpay.downloadBill(data);
+
+// 瑙f瀽瀵硅处鍗曟暟鎹�
+//        String billData = result.get("data");
+    }
+
+    public static void main(String[] args) {
+        try {
+            System.out.println( getToken("POST", httpurl, JSONObject.toJSONString(new JSONObject())));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    static  String url ="https://api.mch.weixin.qq.com/v3/certificates";
+    static  String schema = "WECHATPAY2-SHA256-RSA2048";
+    static  String yourMerchantId = "1229817002";
+    static  String yourCertificateSerialNo = "3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0";
+    static  String privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDav+JQjIMy3o/J" +
+            "pwxQpHezUO9McwUD79KgfDcbmKC44anE3MdxIzxpxE6yUkvLZSUpFKyQqnPkJ5rs" +
+            "l4hqTOXVZCxy7JFGP+NzpQbwxponzBPzOAHEpcbz1LE5fMoKHvUBKnZNr09AY7Cc" +
+            "MMYaaSNKFS52j9q5QW/8oyq1SyQqcAyAE8wOZof1qPDdvxAevEKtXdPnrHkV1YFp" +
+            "tofiOLiixax+f+OK29xswUXyC6CNiIM1BhRhAv62re/MKPk1uGxqMxz4FmO4tDBQ" +
+            "il32ZvW2c9V5ZPdaRO7syZNMiSY8cYPckU9Qou57sc/pmOFNHem29dPaoIkso8LU" +
+            "XW2DP05ZAgMBAAECggEAQV7wggPLvWr3a1rJelv8DZFVQfJpgEiuGBmm2k9dUILX" +
+            "miYkT/Iovq7UmcOwNONQHJu6Ci12HqubR7LtKF88m+2ovttleqnjDg82KMQhE12Q" +
+            "ZLHLDXpBH2LjZ3ucYTPpIeUPn52RQHvKLpMA0Km0yxHTZckNoykkD0qvm6gN8cQm" +
+            "q90O+ZPIjBkgnkZQy/rvyJmgrrMCC+hUKj9hf7rUy0Z3QlpFoAUrGQR43cyNJQJB" +
+            "/mo1YMvjLv7i+MZhQMc5isYdynaLW9DJxmJST3PmQnT13ePMjiu4qakBXm3E1GrB" +
+            "ZrlR53ib8bT5uNZNGhOfSGXwn3RcLnNxKJbbleFpNQKBgQD8fVY3JUxM8RuR78e/" +
+            "cTk4GqM8exAUuqaaHgE7gk++zpyFCXzV5wPo1+uEwqh8hZWN+FZ5I/une+Enhnd5" +
+            "V+iUw1CfEd6JTTucgpR3Z4MpXyogcHOArzWI5yO2bCR/J9PEn973BJaji/DUmMmb" +
+            "ffiNtQfarEVmZUfz7Br1uzcBjwKBgQDdynWZvRTsB6eEWOO7x5D6cwaY1OkILdI2" +
+            "57FuvMo2YuiCii4s8RjjR3V8jr/eaAfHx5QEB8Xks3xUTwjhWX+ox0rzHU8b96HB" +
+            "0CENgBPQBbvQk/XIyDSTRQjdKI7Ab7BZiWOihKp2VDG3JtMXHSHqvr2VWdgdV/Uc" +
+            "2cAX2uTtlwKBgFGx6DR9n/uBQ+9rSxE5fE8X51tJYkGixwc00CdGGbFePqyZDkhT" +
+            "sCMlwfG53jQ0MNi30prttp5Rad+VFZEwjXOc4rglWwDH+ZLBeXJNDtZTEVlfqS+p" +
+            "AURjrV14DjMKWu3S4JzCYk9WlzziltD16HdJbNonRWlFOgvFiE+cHMcnAoGBAIGx" +
+            "aVFMOxbGZxPCMvFUgpeheaMXJWmN+dX3aE8cAJcLAXGMQfIvzeDhoXcDtnjklmAh" +
+            "eZFdxj+1ISffy46TGk5ks5Q0eFUfWiyOezV8xpknMSuHyfrt76iKfuNsWwV2ikXh" +
+            "TCz1rQRiuWujPV7Pv0yY2x2hmvmVvJRxVJ3ed23jAoGBAN4BliytMmsVURkoPJT0" +
+            "fprT38uqEhfSn/KL1cGYFy0aSiX7A2P7Yk0KDvcObXVJcYwEqBcfX3NDIJtPj9pO" +
+            "D3pVlzEUgrBcxCLRxcGqdqoZ9OdEoVgZ6tjX2D5HzD3AoCfB6OCEJzgHLNobCGmh" +
+            "kQiTeZj+KI3CtYbie0SS1Dou";
+   static HttpUrl httpurl = HttpUrl.parse(url);
+
+    static  String getToken(String method, HttpUrl url, String body) throws Exception {
+        String nonceStr = "1234542324";
+        long timestamp = System.currentTimeMillis() / 1000;
+        String message = buildMessage(method, url, timestamp, nonceStr, body);
+        String signature = sign(message.getBytes("utf-8"));
+
+        return "mchid=\"" + yourMerchantId + "\","
+                + "nonce_str=\"" + nonceStr + "\","
+                + "timestamp=\"" + timestamp + "\","
+                + "serial_no=\"" + yourCertificateSerialNo + "\","
+                + "signature=\"" + signature + "\"";
+    }
+
+    static String sign(byte[] message) throws  Exception {
+        Signature sign = Signature.getInstance("SHA256withRSA");
+        KeyFactory kf = KeyFactory.getInstance("RSA");
+        sign.initSign(kf.generatePrivate(
+                new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey))));
+        sign.update(message);
+
+        return Base64.getEncoder().encodeToString(sign.sign());
+    }
+
+    static String buildMessage(String method, HttpUrl url, long timestamp, String nonceStr, String body) {
+        String canonicalUrl = url.encodedPath();
+        if (url.encodedQuery() != null) {
+            canonicalUrl += "?" + url.encodedQuery();
+        }
+
+        return method + ""
+                + canonicalUrl + ""
+                + timestamp + ""
+                + nonceStr + ""
+                + body + "";
+    }
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/WxBillService.java b/server/services/src/main/java/com/doumee/service/business/WxBillService.java
index e167acb..d799558 100644
--- a/server/services/src/main/java/com/doumee/service/business/WxBillService.java
+++ b/server/services/src/main/java/com/doumee/service/business/WxBillService.java
@@ -94,4 +94,5 @@
      * @return long
      */
     long count(WxBill wxBill);
+    void getWxBill();
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java
index 9a16c47..f3856d5 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java
@@ -1,8 +1,12 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
+import com.doumee.core.wx.WxMiniConfig;
 import com.doumee.dao.business.WxBillMapper;
 import com.doumee.dao.business.model.WxBill;
 import com.doumee.service.business.WxBillService;
@@ -10,10 +14,15 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.binarywang.wxpay.bean.request.WxPayDownloadBillRequest;
+import com.github.binarywang.wxpay.bean.result.WxPayBillInfo;
+import com.github.binarywang.wxpay.bean.result.WxPayBillResult;
+import com.github.binarywang.wxpay.exception.WxPayException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -26,7 +35,6 @@
 
     @Autowired
     private WxBillMapper wxBillMapper;
-
     @Override
     public String create(WxBill wxBill) {
         wxBillMapper.insert(wxBill);
@@ -140,4 +148,23 @@
         QueryWrapper<WxBill> wrapper = new QueryWrapper<>(wxBill);
         return wxBillMapper.selectCount(wrapper);
     }
+    @Override
+    public void getWxBill() {
+        try {
+            // 鑾峰彇浜ゆ槗璐﹀崟鏁版嵁
+            WxPayDownloadBillRequest request = new WxPayDownloadBillRequest();
+            String billDate =  DateUtil.beforeDateToStr(1);
+            request.setBillDate(billDate);
+            request.setBillType("ALL");
+            WxPayBillResult response = WxMiniConfig.wxPayService.downloadBill(request);
+            if(response !=null){
+                List<WxPayBillInfo> detailList = response.getBillInfoList();
+            }else{
+                throw  new BusinessException(ResponseStatus.SERVER_ERROR);
+            }
+
+        } catch (WxPayException e) {
+            e.printStackTrace();
+        }
+    }
 }
diff --git a/server/services/src/main/resources/application-dev.yml b/server/services/src/main/resources/application-dev.yml
index b783443..8f6a30b 100644
--- a/server/services/src/main/resources/application-dev.yml
+++ b/server/services/src/main/resources/application-dev.yml
@@ -40,6 +40,7 @@
   # 绂佺敤swagger鏃剁殑閲嶅畾鍚戝湴鍧�
   redirect-uri: /
 
+
 ########################寰俊鏀粯鐩稿叧閰嶇疆########################
 wx:
   pay:
@@ -48,7 +49,7 @@
     mchId: 1229817002
     mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
     notifyUrl: https://dmtest.ahapp.net/martempo_interface/web/api/wxPayNotify
-    keyPath: /usr/local/apiclient_cert.p12
+    keyPath: D:/work/svn/cert/apiclient_cert.p12
 
 tencent:
   map:

--
Gitblit v1.9.3