feat(WxLoginController): 添加调试接口获取AccessToken并增强错误处理

新增调试端点 /debug/getAccessToken用于手动触发获取微信 AccessToken,
便于问题排查。同时增强微信 API 调用的错误处理逻辑,针对常见错误码(如 AppID、AppSecret 配置错误)抛出更明确的异常信息,提升调试效率
和问题定位准确性。
```
This commit is contained in:
2025-09-23 01:11:24 +08:00
parent 55af0759e2
commit 03bbc465a9
4 changed files with 42 additions and 99 deletions

View File

@@ -0,0 +1,140 @@
# 微信支付回调处理完整实现
## 📋 **功能概述**
根据前端代码的需求,后端已经实现了完整的支付回调处理逻辑,包括:
### ✅ **已实现的核心功能**
1. **回调签名验证**
2. **支付订单状态更新**
3. **业务订单状态更新**
4. **支付成功后业务逻辑**
## 🔄 **完整处理流程**
### 1. 微信支付回调入口
```
POST /api/payment/notify/wechat/{tenantId}
```
### 2. 处理链路
```
PaymentNotifyController.wechatNotify()
PaymentServiceImpl.handlePaymentNotify()
WechatNativeStrategy.handleNotify()
WxPayNotifyService.handlePaymentNotify()
```
### 3. 核心处理逻辑
```
1. 验证回调参数
2. 获取微信支付配置
3. 解析并验证回调数据(签名验证)
4. 处理支付结果:
- SUCCESS: 处理支付成功
- REFUND: 处理退款
- FAILED: 处理支付失败
```
## 🎯 **支付成功处理详情**
### WxPayNotifyService.handlePaymentSuccess()
1. **验证金额**:确保回调金额与订单金额一致
2. **更新订单状态**
- `payStatus = true`
- `transactionId = 微信交易号`
- `payTime = 支付时间`
3. **调用业务逻辑**`shopOrderService.updateByOutTradeNo(order)`
4. **推送通知**`pushPaymentNotification()`
### ShopOrderServiceImpl.handlePaymentSuccess()
1. **使用优惠券**:标记优惠券为已使用
2. **累计商品销量**:更新商品销售数量
3. **特殊租户处理**租户10550的特殊业务逻辑
## 🛠️ **新增功能**
### 1. 增强的通知推送
- **详细日志记录**:记录支付成功的完整信息
- **通知发送框架**:为邮件、短信、站内消息预留接口
- **业务逻辑触发**:为后续业务扩展预留接口
### 2. 手动状态更新接口
```
PUT /api/payment/update-status
```
**请求参数**
```json
{
"orderNo": "ORDER_1756544921075",
"tenantId": 10398,
"transactionId": "4200001234567890123",
"payTime": "2025-01-26T10:30:00"
}
```
## 🚀 **测试建议**
### 1. 回调处理测试
```bash
# 模拟微信支付回调
curl -X POST "http://127.0.0.1:9200/api/payment/notify/wechat/10398" \
-H "Content-Type: application/json" \
-H "Wechatpay-Serial: 证书序列号" \
-H "Wechatpay-Signature: 签名" \
-H "Wechatpay-Timestamp: 时间戳" \
-H "Wechatpay-Nonce: 随机字符串" \
-d '回调数据'
```
### 2. 状态查询测试
```bash
# 查询支付状态
curl "http://127.0.0.1:9200/api/payment/query?orderNo=ORDER_1756544921075&tenantId=10398&paymentType=WECHAT_NATIVE"
```
### 3. 手动状态更新测试
```bash
# 手动更新支付状态
curl -X PUT "http://127.0.0.1:9200/api/payment/update-status" \
-H "Content-Type: application/json" \
-d '{
"orderNo": "ORDER_1756544921075",
"tenantId": 10398
}'
```
## 📝 **扩展建议**
### 1. 通知功能扩展
`sendPaymentSuccessNotification()` 方法中可以添加:
- 邮件通知服务
- 短信通知服务
- 微信模板消息
- 站内消息推送
### 2. 业务逻辑扩展
`triggerPostPaymentActions()` 方法中可以添加:
- 会员权益激活
- 积分奖励发放
- 营销活动触发
- 第三方系统同步
### 3. 监控和告警
- 支付成功率监控
- 回调处理失败告警
- 异常订单自动修复
## ✅ **总结**
当前的微信支付回调处理已经实现了前端代码中提到的所有核心功能,并且具有良好的扩展性。主要特点:
1. **完整的回调处理**:签名验证、数据解析、状态更新
2. **完善的业务逻辑**:优惠券使用、销量累计、特殊处理
3. **良好的错误处理**:异常不影响主流程
4. **扩展性设计**:预留了通知和业务逻辑扩展接口

View File

@@ -0,0 +1,184 @@
# 统一支付模块 - 订单创建与支付接口
## 🎯 **新接口概述**
新增了 `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"
```
这个方案既保持了架构的统一性,又提供了完整的业务功能!