diff --git a/payment-spring-boot-autoconfigure/pom.xml b/payment-spring-boot-autoconfigure/pom.xml index 0cf299e..a561726 100644 --- a/payment-spring-boot-autoconfigure/pom.xml +++ b/payment-spring-boot-autoconfigure/pom.xml @@ -12,8 +12,8 @@ org.apache.maven.plugins maven-compiler-plugin - 7 - 7 + 8 + 8 @@ -70,14 +70,17 @@ com.fasterxml.jackson.dataformat jackson-dataformat-xml + true com.squareup.okhttp3 okhttp + true org.bouncycastle bcprov-jdk15to18 + true diff --git a/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/alipay/configuration/AliPayConfiguration.java b/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/autoconfigure/AliPayConfiguration.java similarity index 71% rename from payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/alipay/configuration/AliPayConfiguration.java rename to payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/autoconfigure/AliPayConfiguration.java index 009cc06..c6dbeb5 100644 --- a/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/alipay/configuration/AliPayConfiguration.java +++ b/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/autoconfigure/AliPayConfiguration.java @@ -1,5 +1,6 @@ -package com.enongm.dianji.payment.alipay.configuration; +package com.enongm.dianji.payment.autoconfigure; +import com.enongm.dianji.payment.autoconfigure.AliPayProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; diff --git a/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/alipay/configuration/AliPayProperties.java b/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/autoconfigure/AliPayProperties.java similarity index 94% rename from payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/alipay/configuration/AliPayProperties.java rename to payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/autoconfigure/AliPayProperties.java index fe58bae..6693fd2 100644 --- a/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/alipay/configuration/AliPayProperties.java +++ b/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/autoconfigure/AliPayProperties.java @@ -1,4 +1,4 @@ -package com.enongm.dianji.payment.alipay.configuration; +package com.enongm.dianji.payment.autoconfigure; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/autoconfigure/EnableWechatPay.java b/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/autoconfigure/EnableWechatPay.java new file mode 100644 index 0000000..51a6108 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/autoconfigure/EnableWechatPay.java @@ -0,0 +1,11 @@ +package com.enongm.dianji.payment.autoconfigure; + +import org.springframework.context.annotation.Import; + +/** + * @author Dax + * @since 9:49 + */ +@Import(WechatPayConfiguration.class) +public @interface EnableWechatPay { +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/autoconfigure/WechatPayConfiguration.java b/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/autoconfigure/WechatPayConfiguration.java index 77938e0..ecabe44 100644 --- a/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/autoconfigure/WechatPayConfiguration.java +++ b/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/autoconfigure/WechatPayConfiguration.java @@ -6,6 +6,7 @@ import com.enongm.dianji.payment.wechat.WechatPayV3Service; import com.enongm.dianji.payment.wechat.v2.WechatPayV2Service; import com.enongm.dianji.payment.wechat.v3.SignatureProvider; import com.enongm.dianji.payment.wechat.v3.model.WechatMetaBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -14,12 +15,13 @@ import org.springframework.context.annotation.Configuration; * The type Wechat pay configuration. */ @Configuration +@ConditionalOnProperty(prefix = "wechat.pay",havingValue = "v3") @EnableConfigurationProperties(WechatPayProperties.class) public class WechatPayConfiguration { private static final String CERT_ALIAS = "Tenpay Certificate"; /** - * 微信支付公私钥 以及序列号. + * 微信支付公私钥 以及序列号等元数据. * * @param wechatPayProperties the wechat pay properties * @return the wechat cert bean @@ -35,13 +37,13 @@ public class WechatPayConfiguration { } /** - * Signature provider signature provider. + * 微信支付V3签名工具. * * @param wechatMetaBean the wechat meta bean * @return the signature provider */ @Bean - public SignatureProvider signatureProvider(WechatMetaBean wechatMetaBean) { + SignatureProvider signatureProvider(WechatMetaBean wechatMetaBean) { return new SignatureProvider(wechatMetaBean); } @@ -58,7 +60,7 @@ public class WechatPayConfiguration { } /** - * Wechat pay service wechat pay service. + * 微信支付V3 全量支持. * * @param signatureProvider the signature provider * @return the wechat pay service diff --git a/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/wechat/v2/WechatPayV2Service.java b/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/wechat/v2/WechatPayV2Service.java index be2726d..da41a84 100644 --- a/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/wechat/v2/WechatPayV2Service.java +++ b/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/wechat/v2/WechatPayV2Service.java @@ -5,22 +5,37 @@ import com.enongm.dianji.payment.autoconfigure.WechatPayProperties; import com.enongm.dianji.payment.wechat.v2.model.BaseModel; /** + * The type Wechat pay v 2 service. + * * @author Dax - * @since 15:15 + * @since 15 :15 */ public class WechatPayV2Service { private final WechatPayProperties wechatPayProperties; + /** + * Instantiates a new Wechat pay v 2 service. + * + * @param wechatPayProperties the wechat pay properties + */ public WechatPayV2Service(WechatPayProperties wechatPayProperties) { this.wechatPayProperties = wechatPayProperties; } + /** + * Model base model. + * + * @param the type parameter + * @param model the model + * @return the base model + */ public BaseModel model(M model) { WechatPayProperties.V3 v3 = wechatPayProperties.getV3(); return model.appId(v3.getAppId()) - .mchId(v3.getMchId()); + .mchId(v3.getMchId()) + .appSecret(v3.getAppSecret()); } } diff --git a/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/wechat/v2/model/BaseModel.java b/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/wechat/v2/model/BaseModel.java index fce9b48..9c5647d 100644 --- a/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/wechat/v2/model/BaseModel.java +++ b/payment-spring-boot-autoconfigure/src/main/java/com/enongm/dianji/payment/wechat/v2/model/BaseModel.java @@ -19,6 +19,7 @@ import org.bouncycastle.crypto.Digest; import org.bouncycastle.crypto.digests.MD5Digest; import org.bouncycastle.util.encoders.Hex; import org.springframework.util.AlternativeJdkIdGenerator; +import org.springframework.util.Assert; import org.springframework.util.IdGenerator; @@ -52,7 +53,7 @@ public class BaseModel { private String mchid; private String sign; @JsonIgnore - private String key; + private String appSecret; @JsonIgnore private V2PayType payType; @@ -72,6 +73,11 @@ public class BaseModel { return this; } + public BaseModel appSecret(String appSecret) { + this.appSecret = appSecret; + return this; + } + /** * Xml string. * @@ -79,15 +85,8 @@ public class BaseModel { */ @SneakyThrows public String xml() { - - - - this.key = "Djkjchina19491001"; - String link = link(this, key); - + String link = link(this); this.sign = this.bouncyCastleMD5(link); - - return MAPPER.writer() .withRootName("xml") .writeValueAsString(this); @@ -116,8 +115,10 @@ public class BaseModel { * @return the map */ @SneakyThrows - private String link(T t, String apiKey) { - + private String link(T t) { + Assert.hasText(this.mchAppid, "wechat pay appId is required"); + Assert.hasText(this.mchid, "wechat pay mchId is required"); + Assert.hasText(appSecret, "wechat pay appSecret is required"); return new ObjectMapper() .configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true) .setSerializationInclusion(JsonInclude.Include.NON_NULL) @@ -128,13 +129,13 @@ public class BaseModel { .replaceAll("\",\"", "&") .replaceAll("\\{\"", "") .replaceAll("\"}", "") - .concat("&key=").concat(apiKey); + .concat("&key=").concat(this.appSecret); } @SneakyThrows public WechatResponseBody request() { - + Assert.notNull(payType, "wechat pay payType is required"); Request request = new Request.Builder() .method(payType.method(), RequestBody.create(MediaType.parse("application/x-www-form-urlencoded"), this.xml())) .url(payType.defaultUri(WeChatServer.CHINA)) diff --git a/payment-spring-boot-starter/pom.xml b/payment-spring-boot-starter/pom.xml index 7169396..9bf8b98 100644 --- a/payment-spring-boot-starter/pom.xml +++ b/payment-spring-boot-starter/pom.xml @@ -38,6 +38,18 @@ com.enongm.dianji payment-spring-boot-autoconfigure + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + + + com.squareup.okhttp3 + okhttp + + + org.bouncycastle + bcprov-jdk15to18 + \ No newline at end of file