75 lines
3.0 KiB
Markdown
75 lines
3.0 KiB
Markdown
# jy_pay 支付模块
|
||
|
||
基于 **微信支付 APIv3** 的 Native 支付能力与支付日志记录。
|
||
|
||
## 功能
|
||
|
||
- **微信 Native 预下单**:生成 `code_url`,供前台生成二维码,用户扫码支付。
|
||
- **支付结果回调**:验签、解密并更新支付日志;可在此扩展订单状态等业务逻辑。
|
||
- **支付日志表** `jy_pay_log`:记录每笔预下单与支付结果,便于对账与排查。
|
||
|
||
## 依赖与接入
|
||
|
||
- 根工程 `pom.xml` 已加入模块:`<module>jy_pay</module>`,并在 `dependencyManagement` 中声明 `jy_pay`。
|
||
- 主应用(如 `back`)在 `pom.xml` 中增加对 `jy_pay` 的依赖后,会通过 `@MapperScan("com.ruoyi.**.mapper")` 与 `classpath*:mapper/**/*Mapper.xml` 自动扫描本模块的 Mapper 与 XML。
|
||
|
||
## 数据库
|
||
|
||
执行项目根目录下 `sql/jy_pay.sql`,创建表 `jy_pay_log`(与主库同库即可)。
|
||
|
||
## 配置
|
||
|
||
在 `application-xxx.yml` 中增加微信支付配置(可参考 `jy_pay/src/main/resources/application-jypay.yml`):
|
||
|
||
```yaml
|
||
wechat:
|
||
pay:
|
||
enabled: true
|
||
merchant-id: "你的商户号"
|
||
private-key-path: "/绝对路径/apiclient_key.pem"
|
||
merchant-serial-number: "商户API证书序列号"
|
||
api-v3-key: "32字节APIv3密钥"
|
||
app-id: "公众号/开放平台appid"
|
||
notify-url: "https://你的域名/pay/api/wechat/native/notify"
|
||
```
|
||
|
||
`notify-url` 需在微信商户平台配置,且公网可访问。未配置或 `enabled: false` 时,仅不创建微信 Config,不影响启动。
|
||
|
||
## 接口说明
|
||
|
||
| 说明 | 方法 | 路径 |
|
||
|------------|------|------------------------------------|
|
||
| Native 预下单 | POST | `/pay/api/wechat/native/prepay` |
|
||
| 微信支付回调 | POST | `/pay/api/wechat/native/notify` |
|
||
|
||
### 预下单请求参数
|
||
|
||
- `outTradeNo`(必填):商户订单号,唯一。
|
||
- `description`(必填):商品描述。
|
||
- `totalFen`(必填):金额,单位:分。
|
||
- `bizType`(可选):业务类型,默认 `ORDER`。
|
||
- `bizId`(可选):业务主键,如订单 ID,默认与 `outTradeNo` 一致。
|
||
|
||
### 预下单响应
|
||
|
||
- 成功:`{"codeUrl":"weixin://wxpay/...", "payLogId": 1}`,前台用 `codeUrl` 生成二维码。
|
||
- 失败:`{"errorCode":"xxx", "errorMsg":"xxx"}`。
|
||
|
||
## 支付日志状态
|
||
|
||
- `0`:待支付(预下单成功)
|
||
- `1`:已支付
|
||
- `2`:已关闭
|
||
- `3`:已退款
|
||
- `4`:失败
|
||
|
||
## 与订单联动
|
||
|
||
- 支付日志:回调中会调用 `payLogService.updateToPaid(...)` 更新 `jy_pay_log`。
|
||
- 订单表 `shop_order`:当预下单时 `bizType=ORDER` 且 `outTradeNo` 为订单的 `order_number` 时,回调中会调用 jy-shop 的 `IOrderService`,将对应订单更新为已支付:
|
||
- `status = 1`(待发货)
|
||
- `is_payed = 1`
|
||
- `pay_time`、`update_time` 为当前时间
|
||
仅当订单当前为待付款(`status=0`)时才会更新,避免重复回调导致错误。
|
||
- jy_pay 已依赖 jy-shop,主应用需同时引入 jy-shop 与 jy_pay,订单回写才会生效。
|