Browse Source
feat(WxLoginController): 添加调试接口获取AccessToken并增强错误处理 新增调试端点 /debug/getAccessToken用于手动触发获取微信 AccessToken, 便于问题排查。同时增强微信 API 调用的错误处理逻辑,针对常见错误码(如 AppID、AppSecret 配置错误)抛出更明确的异常信息,提升调试效率 和问题定位准确性。 ```dev
4 changed files with 42 additions and 99 deletions
@ -1,99 +0,0 @@ |
|||
# 微信Native支付修复验证 |
|||
|
|||
## 🔧 修复内容 |
|||
|
|||
### 问题描述 |
|||
微信支付API调用失败,错误信息: |
|||
1. **第一个错误**: |
|||
``` |
|||
PARAM_ERROR: "输入源"/body/appid"映射到字段"公众号ID"必填性规则校验失败,此字段为必填项" |
|||
``` |
|||
|
|||
2. **第二个错误**(修复appid后出现): |
|||
``` |
|||
PARAM_ERROR: "输入源"/body/notify_url"映射到字段"通知地址"必填性规则校验失败,此字段为必填项" |
|||
``` |
|||
|
|||
### 根本原因 |
|||
在 `WechatNativeStrategy.buildPrepayRequest()` 方法中缺少设置必填字段: |
|||
1. 缺少 `appId` 和 `mchId` 字段 |
|||
2. 缺少 `notify_url` 字段的正确处理 |
|||
|
|||
### 修复方案 |
|||
1. **添加PaymentService注入**:获取Native支付配置 |
|||
2. **新增getNativePaymentConfig方法**:专门获取type=102的Native支付配置 |
|||
3. **修改buildPrepayRequest方法**: |
|||
- 添加appId和mchId设置 |
|||
- 完善notify_url的处理逻辑 |
|||
|
|||
### 修复后的关键代码 |
|||
|
|||
```java |
|||
// 1. 获取Native支付配置 |
|||
Payment paymentConfig = getNativePaymentConfig(request.getTenantId()); |
|||
|
|||
// 2. 构建预支付请求时设置必填字段 |
|||
prepayRequest.setAppid(paymentConfig.getAppId()); |
|||
prepayRequest.setMchid(paymentConfig.getMchId()); |
|||
|
|||
// 3. 设置回调URL(必填字段) |
|||
String notifyUrl = null; |
|||
if (StringUtils.hasText(request.getNotifyUrl())) { |
|||
notifyUrl = request.getNotifyUrl(); |
|||
} else if (StringUtils.hasText(paymentConfig.getNotifyUrl())) { |
|||
notifyUrl = paymentConfig.getNotifyUrl(); |
|||
} else { |
|||
throw new RuntimeException("回调通知地址不能为空"); |
|||
} |
|||
prepayRequest.setNotifyUrl(notifyUrl); |
|||
``` |
|||
|
|||
## 🎯 支付类型区分 |
|||
|
|||
### 数据库配置 |
|||
- **type = 1**: 微信小程序支付(使用小程序appid) |
|||
- **type = 102**: 微信Native支付(使用开放平台appid) |
|||
|
|||
### 使用场景 |
|||
- **小程序支付**: 在微信小程序内调用支付 |
|||
- **Native支付**: PC端扫码支付,生成二维码 |
|||
|
|||
## ✅ 验证步骤 |
|||
|
|||
1. **确保数据库配置**: |
|||
```sql |
|||
SELECT * FROM sys_payment WHERE type = 102 AND tenant_id = ?; |
|||
``` |
|||
确保有Native支付配置且appId不为空 |
|||
|
|||
2. **测试支付调用**: |
|||
- 调用Native支付接口 |
|||
- 检查日志中是否包含AppID和商户号信息 |
|||
- 验证微信API不再返回PARAM_ERROR |
|||
|
|||
3. **检查日志输出**: |
|||
``` |
|||
构建微信预支付请求完成, 订单号: xxx, 金额: xxx分, AppID: wxXXX, 商户号: xxx, 回调URL: xxx |
|||
``` |
|||
|
|||
## ⚠️ 常见问题 |
|||
|
|||
### APPID_MCHID_NOT_MATCH 错误 |
|||
如果出现 "appid和mch_id不匹配" 错误,请检查: |
|||
|
|||
1. **确保appid和mchid是绑定关系**: |
|||
```sql |
|||
SELECT app_id, mch_id FROM sys_payment WHERE type = 102 AND tenant_id = ?; |
|||
``` |
|||
|
|||
2. **验证微信支付配置**: |
|||
- appid:必须是微信开放平台的网站应用appid(用于Native支付) |
|||
- mchid:必须是与该appid绑定的微信支付商户号 |
|||
|
|||
3. **检查微信支付后台**: |
|||
- 登录微信支付商户平台 |
|||
- 确认该商户号下绑定了正确的appid |
|||
- 确认产品权限已开通(Native支付) |
|||
|
|||
## 🚀 预期结果 |
|||
修复后,微信Native支付应该能够正常调用,不再出现参数错误。 |
Loading…
Reference in new issue