# 支付模块集成使用指南 本支付模块支持两种使用方式:**独立运行** 和 **组件集成**。 --- ## 方式一:独立运行 ### 1. 编译打包 ```bash cd dryad-payment mvn clean package ``` 编译后会生成两个jar文件: - `dryad-payment-1.0.0.jar` - 普通jar,供其他项目依赖 - `dryad-payment-1.0.0-exec.jar` - 可执行jar,用于独立运行 ### 2. 运行服务 ```bash java -jar target/dryad-payment-1.0.0-exec.jar ``` ### 3. 访问接口 服务启动后,可以直接访问: - 健康检查: `http://localhost:8080/api/health` - 微信支付: `http://localhost:8080/api/pay/wechat/native` - 支付宝支付: `http://localhost:8080/api/pay/alipay/precreate` --- ## 方式二:作为组件集成到其他项目 ### 1. 安装到本地Maven仓库 首先将支付模块安装到本地仓库: ```bash cd dryad-payment mvn clean install ``` ### 2. 在主项目中添加依赖 在你的主项目 `pom.xml` 中添加: ```xml com.ruoyi dryad-payment 1.0.0 ``` ### 3. 配置支付参数 在主项目的 `application.yml` 中添加支付配置: ```yaml # 支付模块配置 payment: # 启用支付模块 enabled: true # 微信支付配置 wechat: appId: wx70f6a7346ee842xx mchId: 1573728xxx mchKey: Xz0ClPK3f5sCeT6SGa1vpVmyUFcbpxxx notifyUrl: https://api.966120.com/api/pay/notify/wechat signType: MD5 # 支付宝配置 alipay: appId: 2021xxxxxxxxxxxxx privateKey: MIIEvQIBADANBgkqhki... alipayPublicKey: MIIBIjANBgkqhki... serverUrl: https://openapi.alipay.com/gateway.do notifyUrl: https://api.966120.com/api/pay/notify/alipay signType: RSA2 # 业务回调配置 business: callbackSignSecret: your-hmac-secret-key-here callbackRetryMaxCount: 10 callbackRetryIntervals: 0,1,5,15,60 # 二维码配置 qrcode: size: 300 format: PNG # 对账配置 reconciliation: enabled: true cron: "0 0 2 * * ?" ``` ### 4. 配置数据库 在主项目的 `application.yml` 中配置数据库连接: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/dryad_payment?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: root ``` 执行支付模块的数据库脚本: ```bash mysql -u root -p < dryad-payment/src/main/resources/sql/schema.sql ``` ### 5. 启动主项目 启动你的主项目,控制台会显示: ``` ================================= 支付模块已启用 ================================= ``` ### 6. 使用支付功能 支付模块的所有接口会自动注册到主项目中,可以直接调用: ```java @RestController @RequestMapping("/order") public class OrderController { @Autowired private PaymentService paymentService; @PostMapping("/pay") public AjaxResult createPayment(@RequestBody OrderDTO order) { PaymentRequest request = new PaymentRequest(); request.setBizOrderId(order.getOrderNo()); request.setAmount(order.getAmount()); request.setSubject(order.getSubject()); request.setCallbackUrl("https://your-domain.com/order/notify"); PaymentResponse response = paymentService.createWechatNativePayment(request); return AjaxResult.success(response); } } ``` --- ## 可选配置 ### 禁用支付模块 如果某个环境不需要支付功能,可以通过配置禁用: ```yaml payment: enabled: false # 禁用支付模块 ``` ### 自定义接口路径 如果需要修改接口路径,可以在主项目中配置: ```yaml server: servlet: context-path: /api # 主项目统一前缀 ``` 支付接口会自动添加此前缀,例如: - `/api/api/pay/wechat/native` ### 覆盖默认配置 主项目的配置会覆盖支付模块的默认配置,例如修改端口: ```yaml server: port: 9090 # 主项目端口 ``` --- ## 打包说明 ### 生成的文件 执行 `mvn clean package` 后会生成: 1. **dryad-payment-1.0.0.jar** - 普通jar包 - 用于被其他项目依赖 - 不包含Spring Boot启动器 2. **dryad-payment-1.0.0-exec.jar** - 可执行jar包 - 用于独立运行 - 包含所有依赖 3. **dryad-payment-1.0.0-sources.jar** - 源码jar包 - 便于开发时查看源码 ### Maven命令 ```bash # 编译 mvn clean compile # 打包(生成jar) mvn clean package # 安装到本地仓库 mvn clean install # 跳过测试打包 mvn clean package -DskipTests # 部署到远程仓库(需配置) mvn clean deploy ``` --- ## 最佳实践 ### 1. 配置管理 建议将敏感配置(密钥等)放在配置中心或环境变量中: ```yaml payment: wechat: mchKey: ${WECHAT_MCH_KEY} # 从环境变量读取 alipay: privateKey: ${ALIPAY_PRIVATE_KEY} ``` ### 2. 多环境配置 创建不同环境的配置文件: - `application-dev.yml` - 开发环境(沙箱) - `application-prod.yml` - 生产环境 ```yaml # application-dev.yml payment: alipay: serverUrl: https://openapi.alipaydev.com/gateway.do # 沙箱环境 ``` ### 3. 日志配置 在主项目中可以单独配置支付模块的日志级别: ```yaml logging: level: com.ruoyi.payment: DEBUG # 支付模块详细日志 ``` ### 4. 数据库隔离 如果主项目和支付模块使用不同数据库,需要配置多数据源。 --- ## 常见问题 ### Q1: 集成后提示找不到Bean? **A**: 确保主项目的启动类包路径在 `com.ruoyi` 或其子包下,或者手动添加扫描: ```java @SpringBootApplication @ComponentScan(basePackages = {"com.ruoyi.main", "com.ruoyi.payment"}) public class MainApplication { // ... } ``` ### Q2: 接口路径冲突? **A**: 如果主项目也有 `/api/pay` 路径,建议修改支付模块的 `@RequestMapping` 路径。 ### Q3: 配置不生效? **A**: 检查配置文件格式,确保: - YAML缩进正确(2个空格) - 属性名称正确 - 配置文件名称正确(application.yml) ### Q4: 数据库表冲突? **A**: 支付模块的表都以 `pay_` 开头,一般不会冲突。如需修改表名,请修改实体类的 `@TableName` 注解。 --- ## 技术支持 如有问题,请查看: - 接口文档: `API接口文档.md` - 设计文档: `doc/设计方案.md` - 源码注释: 代码中包含详细注释