111
k94314517
2023-11-08 a717d60f6d184d6d71f745400a9ca2fda8b5ab48
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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、SUCCESS、REFUND、RECHARGE_REFUND
 
// 调用下载对账单接口
//        Map<String, String> result = wxpay.downloadBill(data);
 
// 解析对账单数据
//        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 + "";
    }
}