提交 a7d8ecbb 编写于 作者: J Javen205

新增支付宝支付 springboot starter

上级 0346c058
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
\ No newline at end of file
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>IJPay-Plugin</artifactId>
<groupId>com.github.javen205</groupId>
<version>2.9.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ijpay-alipay-spring-boot-starters</artifactId>
<name>${project.artifactId}</name>
<description>IJPay 各个模块的 Spring Boot Starter</description>
<url>https://github.com/javen205/IJPay</url>
<properties>
<spring.boot.version>2.7.4</spring.boot.version>
<ijpay.alipay.version>2.9.2</ijpay.alipay.version>
<slf4j.api.version>2.0.3</slf4j.api.version>
</properties>
<dependencies>
<dependency>
<groupId>com.github.javen205</groupId>
<artifactId>IJPay-AliPay</artifactId>
<version>${ijpay.alipay.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.23</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.api.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
package com.ijpay.alipay.starter.config;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.alipay.api.AlipayApiException;
import com.ijpay.alipay.AliPayApiConfig;
import com.ijpay.alipay.starter.properties.AliPayProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
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;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* <p>自动配置</p>
*
* @author Javen
*/
@Slf4j
@Configuration
@EnableConfigurationProperties(AliPayProperties.class)
@ConditionalOnClass(AliPayApiConfig.class)
@ConditionalOnProperty(prefix = "alipay.pay", value = "enabled", matchIfMissing = true)
public class AliPayAutoConfiguration {
/**
* 支付宝支付配置
*/
private final AliPayProperties aliPayProperties;
@Autowired
public AliPayAutoConfiguration(AliPayProperties aliPayProperties) {
this.aliPayProperties = aliPayProperties;
}
/**
* 构造支付宝支付常用配置
*
* @return {@link AliPayApiConfig} 支付宝支付常用配置
*/
@Bean
@ConditionalOnMissingBean(AliPayApiConfig.class)
public AliPayApiConfig aliPayApiConfig() {
if (null == aliPayProperties || CollUtil.isEmpty(aliPayProperties.getConfigs())) {
log.error("未获取到任何支付宝支付的配置信息,如有疑问请联系 723992875、864988890");
return null;
}
AliPayApiConfig config = aliPayProperties.getConfigs().get(0);
if (config.isCertModel()) {
log.debug("即将尝试使用「证书模式」来构建 AlipayClient");
try {
if (StrUtil.isAllNotEmpty(config.getAppCertPath(), config.getAliPayCertPath(), config.getAliPayRootCertPath())) {
log.debug("使用证书文件路径来构建 AlipayClient");
config = config.buildByCert();
} else {
log.debug("支付宝支付证书文件路径不全,即将尝试使用证书文件内容来构建 AlipayClient");
if (StrUtil.isAllNotEmpty(config.getAppCertPath(), config.getAliPayCertPath(), config.getAliPayRootCertPath())) {
log.debug("使用证书文件内容来构建 AlipayClient");
config = config.buildByCertContent();
}
}
} catch (AlipayApiException e) {
throw new RuntimeException("构建 AlipayClient 失败请检查支付宝支付配置信息", e);
}
} else {
log.debug("使用「普通公钥方式」来构建 AlipayClient");
config = config.build();
}
log.debug("自动注入的支付宝支付配置信息为 {}", config);
return config;
}
}
package com.ijpay.alipay.starter.constants;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* @author Javen
*/
public interface IJPayConstant {
/**
* 在线交流
*/
String ONLINE_CONTACT = "IJPay 让支付触手可及,交流群 723992875、864988890";
}
package com.ijpay.alipay.starter.controller;
import com.alipay.api.AlipayApiException;
import com.ijpay.alipay.AliPayApiConfig;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* @author Javen
*/
public abstract class AbstractAliPayApiController {
/**
* 获取支付宝配置
*
* @return {@link AliPayApiConfig} 支付宝配置
* @throws AlipayApiException 支付宝 Api 异常
*/
public abstract AliPayApiConfig getApiConfig() throws AlipayApiException;
}
package com.ijpay.alipay.starter.controller;
import com.ijpay.alipay.AliPayApiConfig;
import com.ijpay.alipay.AliPayApiConfigKit;
import com.ijpay.alipay.starter.constants.IJPayConstant;
import com.ijpay.alipay.starter.properties.AliPayProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.annotation.Resource;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付等常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* @author Javen
*/
@Slf4j
public class AbstractAliPayController extends AbstractAliPayApiController {
/**
* starter 自动生成的支付宝支付配置,默认取配置的第一个
*/
@Resource
protected AliPayApiConfig aliPayApiConfig;
/**
* yml 配置
*/
@Resource
protected AliPayProperties aliPayProperties;
/**
* 获取支付宝支付配置
*
* @return {@link AliPayApiConfig} 支付宝支付配置
*/
@Override
public AliPayApiConfig getApiConfig() {
AliPayApiConfig apiConfig;
try {
apiConfig = AliPayApiConfigKit.getAliPayApiConfig();
} catch (Exception e) {
apiConfig = aliPayApiConfig;
}
return apiConfig;
}
@RequestMapping(value = "/onlineContact", method = {RequestMethod.GET, RequestMethod.POST})
public String onlineContact() {
return IJPayConstant.ONLINE_CONTACT;
}
@RequestMapping(value = "/getCurrentConfig", method = {RequestMethod.GET, RequestMethod.POST})
public AliPayApiConfig getCurrentConfig() {
return AliPayApiConfigKit.getAliPayApiConfig();
}
}
package com.ijpay.alipay.starter.interceptor;
import com.alipay.api.AlipayApiException;
import com.ijpay.alipay.AliPayApiConfig;
import com.ijpay.alipay.AliPayApiConfigKit;
import com.ijpay.alipay.starter.controller.AbstractAliPayApiController;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* <p>支付宝支付拦截器</p>
*
* @author Javen
*/
public class AliPayInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws AlipayApiException {
if (HandlerMethod.class.equals(handler.getClass())) {
HandlerMethod method = (HandlerMethod) handler;
Object controller = method.getBean();
if (!(controller instanceof AbstractAliPayApiController)) {
throw new RuntimeException("控制器需要继承 AbstractAliPayApiController");
}
AliPayApiConfig apiConfig = ((AbstractAliPayApiController) controller).getApiConfig();
if (null == apiConfig || null == apiConfig.getAliPayClient()) {
throw new RuntimeException("支付宝支付配置信息错误,请检查配置文件,如有疑问请联系 723992875、864988890");
}
AliPayApiConfigKit.setThreadLocalAliPayApiConfig(apiConfig);
return true;
}
return false;
}
}
package com.ijpay.alipay.starter.properties;
import com.ijpay.alipay.AliPayApiConfig;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付等常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* <p>支付宝支付属性配置类</p>
*
* @author Javen
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties(prefix = "alipay.pay")
public class AliPayProperties {
private List<AliPayApiConfig> configs;
}
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.ijpay.alipay.starter.config.AliPayAutoConfiguration
......@@ -14,6 +14,7 @@
<modules>
<module>IJPay-WxPay-Starter</module>
<module>IJPay-AliPay-Starter</module>
</modules>
<properties>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册