feat(WxLoginController): 添加调试接口获取AccessToken并增强错误处理 新增调试端点 /debug/getAccessToken用于手动触发获取微信 AccessToken, 便于问题排查。同时增强微信 API 调用的错误处理逻辑,针对常见错误码(如 AppID、AppSecret 配置错误)抛出更明确的异常信息,提升调试效率 和问题定位准确性。 ```
185 lines
4.4 KiB
Markdown
185 lines
4.4 KiB
Markdown
# 统一支付模块 - 订单创建与支付接口
|
||
|
||
## 🎯 **新接口概述**
|
||
|
||
新增了 `POST /api/payment/create-with-order` 接口,实现了:
|
||
1. **订单创建**:完整的商品验证、库存扣减、价格计算
|
||
2. **支付发起**:统一支付模块的支付创建
|
||
3. **数据一致性**:事务保证订单和支付的一致性
|
||
|
||
## 📋 **接口详情**
|
||
|
||
### **请求地址**
|
||
```
|
||
POST /api/payment/create-with-order
|
||
```
|
||
|
||
### **请求参数**
|
||
```json
|
||
{
|
||
"paymentType": "WECHAT_NATIVE",
|
||
"amount": 100.00,
|
||
"subject": "网站建设服务订单",
|
||
"description": "网站建设服务",
|
||
"tenantId": 10398,
|
||
"orderInfo": {
|
||
"type": 0,
|
||
"realName": "无",
|
||
"address": "无",
|
||
"addressId": 0,
|
||
"deliveryType": 0,
|
||
"channel": 0,
|
||
"merchantId": null,
|
||
"merchantName": null,
|
||
"couponId": null,
|
||
"comments": "网站建设服务订单",
|
||
"goodsItems": [
|
||
{
|
||
"goodsId": 10004,
|
||
"skuId": null,
|
||
"quantity": 1,
|
||
"specInfo": null
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### **响应数据**
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "订单创建并发起支付成功",
|
||
"data": {
|
||
"success": true,
|
||
"orderNo": "ORDER_1756547282147",
|
||
"paymentType": "WECHAT_NATIVE",
|
||
"paymentStatus": "PENDING",
|
||
"amount": 100.00,
|
||
"tenantId": 10398,
|
||
"codeUrl": "weixin://wxpay/bizpayurl?pr=xxx",
|
||
"currency": "CNY",
|
||
"createTime": "2025-01-26T10:30:00"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 🔄 **处理流程**
|
||
|
||
### **1. 请求验证**
|
||
- 用户登录状态验证
|
||
- 支付参数验证(金额、类型等)
|
||
- 订单参数验证(商品列表、收货信息等)
|
||
|
||
### **2. 订单创建**
|
||
```
|
||
PaymentServiceImpl.createPaymentWithOrder()
|
||
↓
|
||
convertToOrderCreateRequest() - 转换请求格式
|
||
↓
|
||
orderBusinessService.createOrder() - 完整订单创建逻辑
|
||
↓
|
||
- 商品验证(存在性、状态、价格)
|
||
- 库存验证和扣减
|
||
- 优惠券处理
|
||
- 订单保存
|
||
- 订单商品保存
|
||
- 微信支付订单创建
|
||
```
|
||
|
||
### **3. 支付响应**
|
||
- 返回微信支付二维码URL
|
||
- 包含订单号和支付状态
|
||
- 统一的响应格式
|
||
|
||
## 🆚 **与现有接口对比**
|
||
|
||
| 接口 | 功能 | 优势 | 适用场景 |
|
||
|------|------|------|----------|
|
||
| `/api/payment/create` | 纯支付 | 简单快速 | 已有订单,只需支付 |
|
||
| `/api/shop/shop-order` | 纯订单 | 完整业务逻辑 | 创建订单,后续支付 |
|
||
| `/api/payment/create-with-order` | 订单+支付 | 一体化流程 | **推荐**:预下单场景 |
|
||
|
||
## 🎯 **兼容性处理**
|
||
|
||
### **支持你的数据格式**
|
||
你的原始数据:
|
||
```json
|
||
{
|
||
"addressId": 0,
|
||
"comments": "网站建设服务订单",
|
||
"deliveryType": 0,
|
||
"payType": 102,
|
||
"goodsItems": [{"goodsId": 10004, "quantity": 1}],
|
||
"orderNo": "ORDER_1756547282147",
|
||
"realName": "无"
|
||
}
|
||
```
|
||
|
||
**转换为新格式**:
|
||
```json
|
||
{
|
||
"paymentType": "WECHAT_NATIVE",
|
||
"amount": 100.00,
|
||
"subject": "网站建设服务订单",
|
||
"tenantId": 10398,
|
||
"orderInfo": {
|
||
"type": 0,
|
||
"realName": "无",
|
||
"addressId": 0,
|
||
"deliveryType": 0,
|
||
"comments": "网站建设服务订单",
|
||
"goodsItems": [{"goodsId": 10004, "quantity": 1}]
|
||
}
|
||
}
|
||
```
|
||
|
||
## ✅ **优势总结**
|
||
|
||
### **1. 架构统一**
|
||
- 所有支付逻辑集中在统一支付模块
|
||
- 统一的错误处理和日志记录
|
||
- 统一的响应格式
|
||
|
||
### **2. 业务完整**
|
||
- 复用现有的完整订单创建逻辑
|
||
- 商品验证、库存管理、优惠券处理
|
||
- 支付成功后的完整回调处理
|
||
|
||
### **3. 数据一致性**
|
||
- 事务保证订单创建和支付的原子性
|
||
- 支付失败时订单状态正确
|
||
- 支付成功时自动更新订单状态
|
||
|
||
### **4. 扩展性好**
|
||
- 支持多种支付方式(微信、支付宝、银联等)
|
||
- 支持复杂订单场景(多商品、多规格、优惠券等)
|
||
- 预留了通知和业务逻辑扩展接口
|
||
|
||
## 🚀 **测试建议**
|
||
|
||
### **1. 创建订单并支付**
|
||
```bash
|
||
curl -X POST "http://127.0.0.1:9200/api/payment/create-with-order" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"paymentType": "WECHAT_NATIVE",
|
||
"amount": 100.00,
|
||
"subject": "网站建设服务",
|
||
"tenantId": 10398,
|
||
"orderInfo": {
|
||
"type": 0,
|
||
"realName": "测试用户",
|
||
"comments": "测试订单",
|
||
"goodsItems": [{"goodsId": 10004, "quantity": 1}]
|
||
}
|
||
}'
|
||
```
|
||
|
||
### **2. 查询支付状态**
|
||
```bash
|
||
curl "http://127.0.0.1:9200/api/payment/query?orderNo=ORDER_xxx&tenantId=10398&paymentType=WECHAT_NATIVE"
|
||
```
|
||
|
||
这个方案既保持了架构的统一性,又提供了完整的业务功能!
|