提交修改
This commit is contained in:
parent
15f90adf8c
commit
95940263fd
@ -42,6 +42,8 @@ public class JsapiPrepay {
|
|||||||
private PublicKey wechatPayPublicKey;
|
private PublicKey wechatPayPublicKey;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Value("${eb.config.weixin.pay.notifyUrl}")
|
@Value("${eb.config.weixin.pay.notifyUrl}")
|
||||||
private String notifyUrl;
|
private String notifyUrl;
|
||||||
|
|
||||||
|
|||||||
@ -1,22 +1,13 @@
|
|||||||
package com.heyu.api.jsapi;
|
package com.heyu.api.jsapi;
|
||||||
|
|
||||||
import com.google.gson.ExclusionStrategy;
|
import com.google.gson.*;
|
||||||
import com.google.gson.FieldAttributes;
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.GsonBuilder;
|
|
||||||
import com.google.gson.JsonElement;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import com.google.gson.JsonSyntaxException;
|
|
||||||
import com.google.gson.annotations.Expose;
|
import com.google.gson.annotations.Expose;
|
||||||
import com.google.gson.annotations.SerializedName;
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
|
|
||||||
import okhttp3.Headers;
|
import okhttp3.Headers;
|
||||||
import okhttp3.Response;
|
import okhttp3.Response;
|
||||||
import okio.BufferedSource;
|
import okio.BufferedSource;
|
||||||
|
import org.bouncycastle.crypto.digests.SM3Digest;
|
||||||
|
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||||
|
|
||||||
import javax.crypto.BadPaddingException;
|
import javax.crypto.BadPaddingException;
|
||||||
import javax.crypto.Cipher;
|
import javax.crypto.Cipher;
|
||||||
@ -25,34 +16,23 @@ import javax.crypto.NoSuchPaddingException;
|
|||||||
import javax.crypto.spec.GCMParameterSpec;
|
import javax.crypto.spec.GCMParameterSpec;
|
||||||
import javax.crypto.spec.SecretKeySpec;
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.io.UncheckedIOException;
|
import java.io.UncheckedIOException;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.security.InvalidAlgorithmParameterException;
|
import java.security.*;
|
||||||
import java.security.InvalidKeyException;
|
|
||||||
import java.security.KeyFactory;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
import java.security.PrivateKey;
|
|
||||||
import java.security.PublicKey;
|
|
||||||
import java.security.SecureRandom;
|
|
||||||
import java.security.Signature;
|
|
||||||
import java.security.SignatureException;
|
|
||||||
import java.security.spec.InvalidKeySpecException;
|
import java.security.spec.InvalidKeySpecException;
|
||||||
import java.security.spec.PKCS8EncodedKeySpec;
|
import java.security.spec.PKCS8EncodedKeySpec;
|
||||||
import java.security.spec.X509EncodedKeySpec;
|
import java.security.spec.X509EncodedKeySpec;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.DateTimeException;
|
import java.time.DateTimeException;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.security.MessageDigest;
|
import java.util.*;
|
||||||
import java.io.InputStream;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import org.bouncycastle.crypto.digests.SM3Digest;
|
|
||||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
|
||||||
|
|
||||||
import java.security.Security;
|
|
||||||
|
|
||||||
public class WXPayUtility {
|
public class WXPayUtility {
|
||||||
private static final Gson gson = new GsonBuilder()
|
private static final Gson gson = new GsonBuilder()
|
||||||
@ -141,7 +121,7 @@ public class WXPayUtility {
|
|||||||
* @return PrivateKey 对象
|
* @return PrivateKey 对象
|
||||||
*/
|
*/
|
||||||
public static PrivateKey loadPrivateKeyFromPath(String keyPath) {
|
public static PrivateKey loadPrivateKeyFromPath(String keyPath) {
|
||||||
return loadPrivateKeyFromString(readKeyStringFromPath(keyPath));
|
return loadPrivateKeyFromString(keyPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -171,7 +151,7 @@ public class WXPayUtility {
|
|||||||
* @return PublicKey 对象
|
* @return PublicKey 对象
|
||||||
*/
|
*/
|
||||||
public static PublicKey loadPublicKeyFromPath(String keyPath) {
|
public static PublicKey loadPublicKeyFromPath(String keyPath) {
|
||||||
return loadPublicKeyFromString(readKeyStringFromPath(keyPath));
|
return loadPublicKeyFromString(keyPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -60,20 +60,5 @@ spring:
|
|||||||
username: admin
|
username: admin
|
||||||
password: XiIg37HKfQg2
|
password: XiIg37HKfQg2
|
||||||
|
|
||||||
eb:
|
|
||||||
config:
|
|
||||||
weixin:
|
|
||||||
pay:
|
|
||||||
mchid: 1731491745
|
|
||||||
certificateSerialNo: 793D48CCEB62C6B227E0A4F46AD90279B149A7BE
|
|
||||||
privateKeyFilePath: /Users/quyixiao/Desktop/weixincert/apiclient_key.pem
|
|
||||||
wechatPayPublicKeyId: PUB_KEY_ID_0117314917452025110400382304001401
|
|
||||||
wechatPayPublicKeyFilePath: /Users/quyixiao/Desktop/weixincert/wxp_pub.pem
|
|
||||||
appid: wx75fa59c097bd3dfd
|
|
||||||
notifyUrl: https://api.1024api.com/api-interface/app/weixin/payNotify
|
|
||||||
apiv3key: E938F17ABF6843743F49688269F73B7D
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -55,23 +55,6 @@ spring:
|
|||||||
password: XiIg37HKfQg2
|
password: XiIg37HKfQg2
|
||||||
|
|
||||||
|
|
||||||
eb:
|
|
||||||
config:
|
|
||||||
weixin:
|
|
||||||
pay:
|
|
||||||
mchid: 1731491745
|
|
||||||
certificateSerialNo: 793D48CCEB62C6B227E0A4F46AD90279B149A7BE
|
|
||||||
privateKeyFilePath: /root/weixincert/apiclient_key.pem
|
|
||||||
wechatPayPublicKeyId: PUB_KEY_ID_0117314917452025110400382304001401
|
|
||||||
wechatPayPublicKeyFilePath: /root/weixincert/wxp_pub.pem
|
|
||||||
appid: wx75fa59c097bd3dfd
|
|
||||||
notifyUrl: https://api.1024api.com/api-interface/app/weixin/payNotify
|
|
||||||
apiv3key: E938F17ABF6843743F49688269F73B7D
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -64,6 +64,19 @@ eb:
|
|||||||
delayExchangeName: DELAY_EXCHANGE_NAME_TEST
|
delayExchangeName: DELAY_EXCHANGE_NAME_TEST
|
||||||
|
|
||||||
|
|
||||||
|
weixin:
|
||||||
|
pay:
|
||||||
|
mchid: 1731491745
|
||||||
|
certificateSerialNo: 793D48CCEB62C6B227E0A4F46AD90279B149A7BE
|
||||||
|
privateKeyFilePath: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCzn74aYlkoD1lOrcbpqW9aIE/IiH/lAea+nFmmmao5ggxrXhnvkGDQ3e+59Cf59jTikKxmMc+aj36maxrd/OYDM27j0q5b7t8fWPD4qqyMR2uqiImc622BpQIxaPUeLeDHwsHq4C6g0UzZ6DXJppHpb6xn0gEFHS87Na0hhElCbEpjEnbyhRmOC1yDPDmnDTGMX2LP0Cxx6U1pX4JmYToQ0/iOFeD8F9sLrQElGelJnDS6QY+L+qKe7SecNv0axvbwyGXuSUef2+GWgBCnBeWTZhhHNPNAFo6fQR9+zaQmZEksg9HxmAKLxG1w6YSMXQWk8psSiCSoiQfu39m3pN13AgMBAAECggEAbhvoPug22xW9mztvieDxf3/7KGR0cf+eYQ4a7sOX07TixBZlM7N/hcnmoEkJEHNaq+Afrm2uY4K/EmjpiVbz8NZgjYuiknx1jhPJc8W8DCnj2B/mq6it8iEinQNH7v4Uop/Cm6ZdLvvebl2oSzquiziHqQTU1zuyrksTHE6pUetj6ci2AgyKOpyZ3nJ8ivgUSFuvQjlEQ1aJFrFg6nm52MTdJqB9JaQEcBYxw21JCfl1zNZ7EO4eFBqzNO0ttu3EJckYDKClhcesNrJJGUHvPFGo2hfOd2ZzfA4UnaL7yaraAJxQbqwnXOoaV14ka9HYNfakmz59348AxrIbPtHj0QKBgQDskdn7Cut/1DV2EhW26rNj9zaXt55COujHf5+0htj9JrZ6u9s4sCHuzPo8rLiAw7/Pvksfa7Oq+BHE65rMds88KluLyW84b1Wd4annyI+anjtDyz3Chmx7NGQyaHg7lfOqJ09S/0T6WwSViZJz3Fp6p39+1ROyhWZaFRQIwrA6UwKBgQDCYIrAYFnqBaXMk5wFoDg2kc7H6/SL9wgxTo5EwV/ccqFirbScjuM9IkylcIx02gKUH9y+3aDccNPr7PqIreLip9sX+DdFqDa5yEtY4XNR9zAf0aSgo+qSCAtgMqrWwyV+fKUjbzEbEjD7STPXLy+r1YC0g0Z7WeszLG0f4MYTzQKBgQCkCFW+7klwrzIKlmucE40jqYyfEmCXx8UUX3fbcw0OK0OoQo209tvwewyf+ZtNHW3onCf2t3Uy/SNFCaCiWVdEfpJPkPKfjQMuoARxhO2d5k1tqoU+VnrtytwW371Og6EawHsOL5Yiie3ZyjRURdwu4+lRhmlMBZd8qtTjZitPpQKBgQCVrMOLKWZzRxAJvOxahKpkkthYp//yOzHqzePNW95WIUrWco3uNDUVITFF/6mYXTu5FePkcULqHFODi0LMNqHMCJc0GOVu1P33Bx3F/izPw/kht0v+itoYwusHk1xr7W8UvCRpabi1cMeY6CBsJaCev9PQrHl8iJwNFruc3XeJTQKBgFt31iujP7W2FHaT6uyO1gKSlqCcZILD2F15Q52OYQoV6I5Tq152ITyMyE4EiYPOqnqVWUc+ej1m+AuvYljRqlvVCmp91QtYwLGguuHFYNVcE2V3WftKKbIIPT2qEFaS5eUb6hB+kl02E1EmjCtApwssCVJj81yu/DsBP0580zBL
|
||||||
|
wechatPayPublicKeyId: PUB_KEY_ID_0117314917452025110400382304001401
|
||||||
|
wechatPayPublicKeyFilePath: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx/QqdSnkS8wd7xFH0LHVpZTFVI+eWL383eAP7RaxHfRwXNDfZYrdi/Bt8Enko+1Wkr2FGY2kS4Hol5NCvuZ7UY28/L4r95dBEgXtflkrxeVbiNbWHtiIdNXZSgkrpUkZEFoh7ks5Ou3pAlpG+94/Nnc//D/yckM7AuD85G1foZMSO5niyVeFAed6z7CeBMAhRVdnOIDUqsI/NaHruT4fvWNzPnn5SQKoKum00vRHckxftUqMkZ1D/YxHiAycEc9H0hCgLW7ZM6UV88Loa6SPvhM0fmXIuk6p277ldlxFl6Bcxd5jOcCTjdpWaB3CeSXnSIBl6KsZNcV3vPC3xey1WwIDAQAB
|
||||||
|
appid: wx75fa59c097bd3dfd
|
||||||
|
notifyUrl: https://api.1024api.com/api-interface/app/weixin/payNotify
|
||||||
|
apiv3key: E938F17ABF6843743F49688269F73B7D
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -3,28 +3,79 @@ package com.api.test;
|
|||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.heyu.api.jsapi.JsapiPrepay;
|
import com.heyu.api.jsapi.JsapiPrepay;
|
||||||
import com.heyu.api.jsapi.WXPayUtility;
|
import com.heyu.api.jsapi.WXPayUtility;
|
||||||
import com.heyu.api.jsapi.dto.*;
|
import com.heyu.api.jsapi.dto.CommonAmountInfo;
|
||||||
|
import com.heyu.api.jsapi.dto.DirectAPIv3JsapiPrepayRequest;
|
||||||
|
import com.heyu.api.jsapi.dto.DirectAPIv3JsapiPrepayResponse;
|
||||||
|
import com.heyu.api.jsapi.dto.JsapiReqPayerInfo;
|
||||||
|
|
||||||
public class TestJSAPI {
|
public class TestJSAPI {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
String wechatPayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx/QqdSnkS8wd7xFH0LHV" +
|
||||||
|
"pZTFVI+eWL383eAP7RaxHfRwXNDfZYrdi/Bt8Enko+1Wkr2FGY2kS4Hol5NCvuZ7" +
|
||||||
|
"UY28/L4r95dBEgXtflkrxeVbiNbWHtiIdNXZSgkrpUkZEFoh7ks5Ou3pAlpG+94/" +
|
||||||
|
"Nnc//D/yckM7AuD85G1foZMSO5niyVeFAed6z7CeBMAhRVdnOIDUqsI/NaHruT4f" +
|
||||||
|
"vWNzPnn5SQKoKum00vRHckxftUqMkZ1D/YxHiAycEc9H0hCgLW7ZM6UV88Loa6SP" +
|
||||||
|
"vhM0fmXIuk6p277ldlxFl6Bcxd5jOcCTjdpWaB3CeSXnSIBl6KsZNcV3vPC3xey1" +
|
||||||
|
"WwIDAQAB";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
String privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCzn74aYlkoD1lO" +
|
||||||
|
"rcbpqW9aIE/IiH/lAea+nFmmmao5ggxrXhnvkGDQ3e+59Cf59jTikKxmMc+aj36m" +
|
||||||
|
"axrd/OYDM27j0q5b7t8fWPD4qqyMR2uqiImc622BpQIxaPUeLeDHwsHq4C6g0UzZ" +
|
||||||
|
"6DXJppHpb6xn0gEFHS87Na0hhElCbEpjEnbyhRmOC1yDPDmnDTGMX2LP0Cxx6U1p" +
|
||||||
|
"X4JmYToQ0/iOFeD8F9sLrQElGelJnDS6QY+L+qKe7SecNv0axvbwyGXuSUef2+GW" +
|
||||||
|
"gBCnBeWTZhhHNPNAFo6fQR9+zaQmZEksg9HxmAKLxG1w6YSMXQWk8psSiCSoiQfu" +
|
||||||
|
"39m3pN13AgMBAAECggEAbhvoPug22xW9mztvieDxf3/7KGR0cf+eYQ4a7sOX07Ti" +
|
||||||
|
"xBZlM7N/hcnmoEkJEHNaq+Afrm2uY4K/EmjpiVbz8NZgjYuiknx1jhPJc8W8DCnj" +
|
||||||
|
"2B/mq6it8iEinQNH7v4Uop/Cm6ZdLvvebl2oSzquiziHqQTU1zuyrksTHE6pUetj" +
|
||||||
|
"6ci2AgyKOpyZ3nJ8ivgUSFuvQjlEQ1aJFrFg6nm52MTdJqB9JaQEcBYxw21JCfl1" +
|
||||||
|
"zNZ7EO4eFBqzNO0ttu3EJckYDKClhcesNrJJGUHvPFGo2hfOd2ZzfA4UnaL7yara" +
|
||||||
|
"AJxQbqwnXOoaV14ka9HYNfakmz59348AxrIbPtHj0QKBgQDskdn7Cut/1DV2EhW2" +
|
||||||
|
"6rNj9zaXt55COujHf5+0htj9JrZ6u9s4sCHuzPo8rLiAw7/Pvksfa7Oq+BHE65rM" +
|
||||||
|
"ds88KluLyW84b1Wd4annyI+anjtDyz3Chmx7NGQyaHg7lfOqJ09S/0T6WwSViZJz" +
|
||||||
|
"3Fp6p39+1ROyhWZaFRQIwrA6UwKBgQDCYIrAYFnqBaXMk5wFoDg2kc7H6/SL9wgx" +
|
||||||
|
"To5EwV/ccqFirbScjuM9IkylcIx02gKUH9y+3aDccNPr7PqIreLip9sX+DdFqDa5" +
|
||||||
|
"yEtY4XNR9zAf0aSgo+qSCAtgMqrWwyV+fKUjbzEbEjD7STPXLy+r1YC0g0Z7Wesz" +
|
||||||
|
"LG0f4MYTzQKBgQCkCFW+7klwrzIKlmucE40jqYyfEmCXx8UUX3fbcw0OK0OoQo20" +
|
||||||
|
"9tvwewyf+ZtNHW3onCf2t3Uy/SNFCaCiWVdEfpJPkPKfjQMuoARxhO2d5k1tqoU+" +
|
||||||
|
"VnrtytwW371Og6EawHsOL5Yiie3ZyjRURdwu4+lRhmlMBZd8qtTjZitPpQKBgQCV" +
|
||||||
|
"rMOLKWZzRxAJvOxahKpkkthYp//yOzHqzePNW95WIUrWco3uNDUVITFF/6mYXTu5" +
|
||||||
|
"FePkcULqHFODi0LMNqHMCJc0GOVu1P33Bx3F/izPw/kht0v+itoYwusHk1xr7W8U" +
|
||||||
|
"vCRpabi1cMeY6CBsJaCev9PQrHl8iJwNFruc3XeJTQKBgFt31iujP7W2FHaT6uyO" +
|
||||||
|
"1gKSlqCcZILD2F15Q52OYQoV6I5Tq152ITyMyE4EiYPOqnqVWUc+ej1m+AuvYljR" +
|
||||||
|
"qlvVCmp91QtYwLGguuHFYNVcE2V3WftKKbIIPT2qEFaS5eUb6hB+kl02E1EmjCtA" +
|
||||||
|
"pwssCVJj81yu/DsBP0580zBL";
|
||||||
|
|
||||||
// TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/merchant/4013070756
|
// TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/merchant/4013070756
|
||||||
JsapiPrepay client = new JsapiPrepay(
|
JsapiPrepay client = new JsapiPrepay(
|
||||||
"1731491745", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/merchant/4013070756
|
"1731491745", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/merchant/4013070756
|
||||||
"793D48CCEB62C6B227E0A4F46AD90279B149A7BE", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013053053
|
"793D48CCEB62C6B227E0A4F46AD90279B149A7BE", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013053053
|
||||||
"/Users/quyixiao/Desktop/weixincert/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径
|
privateKey, // 商户API证书私钥文件路径,本地文件路径
|
||||||
"PUB_KEY_ID_0117314917452025110400382304001401", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013038816
|
"PUB_KEY_ID_0117314917452025110400382304001401", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013038816
|
||||||
"/Users/quyixiao/Desktop/weixincert/wxp_pub.pem" // 微信支付公钥文件路径,本地文件路径
|
wechatPayPublicKey // 微信支付公钥文件路径,本地文件路径
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("privateKey:"+privateKey);
|
||||||
|
System.out.println("wechatPayPublicKey:" +wechatPayPublicKey);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DirectAPIv3JsapiPrepayRequest request = new DirectAPIv3JsapiPrepayRequest();
|
DirectAPIv3JsapiPrepayRequest request = new DirectAPIv3JsapiPrepayRequest();
|
||||||
request.setAppid("wx75fa59c097bd3dfd");
|
request.setAppid("wx75fa59c097bd3dfd");
|
||||||
request.setMchid("1731491745");
|
request.setMchid("1731491745");
|
||||||
request.setNotifyUrl("https://api.1024api.com/api-interface/app/weixin/payNotify");
|
request.setNotifyUrl("https://api.1024api.com/api-interface/app/weixin/payNotify");
|
||||||
|
|
||||||
request.setDescription("Image形象店-深圳腾大-QQ公仔");
|
request.setDescription("Image形象店-深圳腾大-QQ公仔");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
request.setOutTradeNo("12177525011");
|
request.setOutTradeNo("12177525011");
|
||||||
request.setTimeExpire(WXPayUtility.generateExpireTime()); // 2025-11-05T21:02:16+08:00
|
request.setTimeExpire(WXPayUtility.generateExpireTime()); // 2025-11-05T21:02:16+08:00
|
||||||
request.setAttach("自定义数据说明");
|
request.setAttach("自定义数据说明");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user