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 6b4ea379d..e6c587a13 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 @@ -1,11 +1,15 @@ package com.github.binarywang.wxpay.config; +import com.github.binarywang.wxpay.exception.WxPayException; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.http.ssl.SSLContexts; import javax.net.ssl.SSLContext; import java.io.File; import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; import java.security.KeyStore; /** @@ -143,7 +147,7 @@ public class WxPayConfig { this.useSandboxEnv = useSandboxEnv; } - public SSLContext initSSLContext() { + public SSLContext initSSLContext() throws WxPayException { if (StringUtils.isBlank(mchId)) { throw new IllegalArgumentException("请确保商户号mchId已设置"); } @@ -152,20 +156,33 @@ public class WxPayConfig { throw new IllegalArgumentException("请确保证书文件地址keyPath已配置"); } - File file = new File(this.keyPath); - if (!file.exists()) { - throw new RuntimeException("证书文件【" + file.getPath() + "】不存在!"); + InputStream inputStream; + final String prefix = "classpath:"; + if (this.keyPath.startsWith(prefix)) { + inputStream = WxPayConfig.class.getResourceAsStream(this.keyPath.replace(prefix, "")); + } else { + try { + File file = new File(this.keyPath); + if (!file.exists()) { + throw new WxPayException("证书文件【" + file.getPath() + "】不存在!"); + } + + inputStream = new FileInputStream(file); + } catch (IOException e) { + throw new WxPayException("证书文件有问题,请核实!", e); + } } try { - FileInputStream inputStream = new FileInputStream(file); KeyStore keystore = KeyStore.getInstance("PKCS12"); char[] partnerId2charArray = mchId.toCharArray(); keystore.load(inputStream, partnerId2charArray); this.sslContext = SSLContexts.custom().loadKeyMaterial(keystore, partnerId2charArray).build(); return this.sslContext; } catch (Exception e) { - throw new RuntimeException("证书文件有问题,请核实!", e); + throw new WxPayException("证书文件有问题,请核实!", e); + } finally { + IOUtils.closeQuietly(inputStream); } } } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/exception/WxPayException.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/exception/WxPayException.java index eafd8b98d..948c7a499 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/exception/WxPayException.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/exception/WxPayException.java @@ -45,6 +45,11 @@ public class WxPayException extends Exception { this.customErrorMsg = customErrorMsg; } + public WxPayException(String customErrorMsg, Throwable tr) { + super(customErrorMsg, tr); + this.customErrorMsg = customErrorMsg; + } + private WxPayException(Builder builder) { super(builder.buildErrorMsg()); returnCode = builder.returnCode; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java index c28697a8f..14c34d036 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java @@ -497,7 +497,7 @@ public class WxPayServiceImpl implements WxPayService { String responseString = this.getResponseString(request.send()); - this.log.debug("\n【请求地址】: {}\n【请求参数】:{}\n【响应数据】:{}", url, requestStr, responseString); + this.log.info("\n【请求地址】: {}\n【请求参数】:{}\n【响应数据】:{}", url, requestStr, responseString); return responseString; } catch (Exception e) { this.log.error("\n【请求地址】: {}\n【请求参数】:{}\n【异常信息】:{}", url, requestStr, e.getMessage()); 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 new file mode 100644 index 000000000..83bcbf2c1 --- /dev/null +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/config/WxPayConfigTest.java @@ -0,0 +1,24 @@ +package com.github.binarywang.wxpay.config; + +import org.testng.annotations.Test; + +import static org.testng.Assert.*; + +/** + *
+ *  Created by BinaryWang on 2017/6/18.
+ * 
+ * + * @author Binary Wang + */ +public class WxPayConfigTest { + private WxPayConfig payConfig = new WxPayConfig(); + + @Test + public void testInitSSLContext() throws Exception { + payConfig.setMchId("123"); + payConfig.setKeyPath("classpath:/abc.p12"); + payConfig.initSSLContext(); + } + +} diff --git a/weixin-java-pay/src/test/resources/.gitignore b/weixin-java-pay/src/test/resources/.gitignore new file mode 100644 index 000000000..edd25bc77 --- /dev/null +++ b/weixin-java-pay/src/test/resources/.gitignore @@ -0,0 +1 @@ +*.p12