diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java index 59733944ae..b94620ee96 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java @@ -26,6 +26,7 @@ import java.security.KeyStore; import java.security.PrivateKey; import java.security.cert.X509Certificate; +import java.util.Base64; import java.util.Collections; /** @@ -101,15 +102,28 @@ public class WxPayConfig { */ private String signType; private SSLContext sslContext; + /** + * p12证书base64编码 + */ + private String keyString; /** * p12证书文件的绝对路径或者以classpath:开头的类路径. */ private String keyPath; + /** + * apiclient_key.pem证书base64编码 + */ + private String privateKeyString; /** * apiclient_key.pem证书文件的绝对路径或者以classpath:开头的类路径. */ private String privateKeyPath; + + /** + * apiclient_cert.pem证书base64编码 + */ + private String privateCertString; /** * apiclient_cert.pem证书文件的绝对路径或者以classpath:开头的类路径. */ @@ -222,7 +236,7 @@ public SSLContext initSSLContext() throws WxPayException { throw new WxPayException("请确保商户号mchId已设置"); } - InputStream inputStream = this.loadConfigInputStream(this.getKeyPath(), this.keyContent, "p12证书"); + InputStream inputStream = this.loadConfigInputStream(this.keyString, this.getKeyPath(), this.keyContent, "p12证书"); try { KeyStore keystore = KeyStore.getInstance("PKCS12"); @@ -245,7 +259,9 @@ public SSLContext initSSLContext() throws WxPayException { * @author doger.wang **/ public CloseableHttpClient initApiV3HttpClient() throws WxPayException { + val privateKeyString = this.getPrivateKeyString(); val privateKeyPath = this.getPrivateKeyPath(); + val privateCertString = this.getPrivateCertString(); val privateCertPath = this.getPrivateCertPath(); val serialNo = this.getCertSerialNo(); val apiV3Key = this.getApiV3Key(); @@ -253,8 +269,8 @@ public CloseableHttpClient initApiV3HttpClient() throws WxPayException { throw new WxPayException("请确保apiV3Key值已设置"); } - InputStream keyInputStream = this.loadConfigInputStream(privateKeyPath, this.privateKeyContent, "privateKeyPath"); - InputStream certInputStream = this.loadConfigInputStream(privateCertPath, this.privateCertContent, "privateCertPath"); + InputStream keyInputStream = this.loadConfigInputStream(privateKeyString, privateKeyPath, this.privateKeyContent, "privateKeyPath"); + InputStream certInputStream = this.loadConfigInputStream(privateCertString, privateCertPath, this.privateCertContent, "privateCertPath"); try { PrivateKey merchantPrivateKey = PemUtils.loadPrivateKey(keyInputStream); X509Certificate certificate = PemUtils.loadCertificate(certInputStream); @@ -298,10 +314,13 @@ private WxPayHttpProxy getWxPayHttpProxy() { return null; } - private InputStream loadConfigInputStream(String configPath, byte[] configContent, String fileName) throws WxPayException { + private InputStream loadConfigInputStream(String configString, String configPath, byte[] configContent, String fileName) throws WxPayException { InputStream inputStream; if (configContent != null) { inputStream = new ByteArrayInputStream(configContent); + } else if(StringUtils.isNotEmpty(configString)) { + configContent = Base64.getDecoder().decode(configString); + inputStream = new ByteArrayInputStream(configContent); } else { if (StringUtils.isBlank(configPath)) { throw new WxPayException("请确保证书文件地址【" + fileName + "】或者内容已配置"); diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/config/WxPayConfigTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/config/WxPayConfigTest.java index 8b5a621b89..5a506e72f8 100644 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/config/WxPayConfigTest.java +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/config/WxPayConfigTest.java @@ -37,4 +37,11 @@ public void testInitSSLContext() throws Exception { public void testHashCode() { payConfig.hashCode(); } + + @Test + public void testInitSSLContext_base64() throws Exception { + payConfig.setMchId("123"); + payConfig.setKeyString("MIIKmgIBAzCCCmQGCS..."); + payConfig.initSSLContext(); + } }