fix(reward-service): 修复 WalletServiceClient 未正确解析 wallet-service 响应格式的 Bug
问题原因:
wallet-service 使用全局 TransformInterceptor 拦截器,会将所有响应包装成:
{ success: true, data: { success: boolean, ... }, timestamp: "..." }
原代码直接读取外层的 success 字段(始终为 true),导致即使业务失败
(内层 data.success = false)也被误判为成功。
具体案例:
用户 D25122700024 点击结算时,wallet-service 因余额不足返回:
{ success: true, data: { success: false, error: "Insufficient..." }, ... }
reward-service 误读为成功,导致奖励被标记为 SETTLED 但钱包余额未变更。
修复内容:
1. settleToBalance: 解析 response_data.data 获取真实业务结果
2. confirmPlantingDeduction: 同上
3. allocateFunds: 同上
所有方法现在会:
- 使用 response_data.data || response_data 兼容包装和非包装格式
- 严格检查 data.success !== true 来判断业务是否成功
- 失败时记录详细错误日志
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
8b80e45524
commit
ec71121907
|
|
@ -133,6 +133,19 @@ export class WalletServiceClient {
|
|||
};
|
||||
}
|
||||
|
||||
// wallet-service 使用全局 TransformInterceptor,响应格式为:
|
||||
// { success: true, data: { success: boolean, ... }, timestamp: "..." }
|
||||
const response_data = await response.json();
|
||||
const data = response_data.data || response_data;
|
||||
|
||||
if (data.success !== true) {
|
||||
this.logger.error(`Confirm deduction failed for order ${params.orderId}: ${data.error || 'Unknown error'}`);
|
||||
return {
|
||||
success: false,
|
||||
error: data.error || 'Confirm deduction failed',
|
||||
};
|
||||
}
|
||||
|
||||
this.logger.log(`Successfully confirmed deduction for order ${params.orderId}`);
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
|
|
@ -181,14 +194,25 @@ export class WalletServiceClient {
|
|||
};
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
const response_data = await response.json();
|
||||
// wallet-service 使用全局 TransformInterceptor,响应格式为:
|
||||
// { success: true, data: { success: boolean, ... }, timestamp: "..." }
|
||||
const data = response_data.data || response_data;
|
||||
|
||||
if (data.success !== true) {
|
||||
this.logger.error(`Settlement failed for ${params.accountSequence}: ${data.error || 'Unknown error'}`);
|
||||
return {
|
||||
success: false,
|
||||
error: data.error || 'Settlement failed',
|
||||
};
|
||||
}
|
||||
|
||||
this.logger.log(`Successfully settled to balance for ${params.accountSequence}`);
|
||||
return {
|
||||
success: data.success,
|
||||
success: true,
|
||||
settlementId: data.settlementId,
|
||||
settledAmount: data.settledAmount,
|
||||
balanceAfter: data.balanceAfter,
|
||||
error: data.error,
|
||||
};
|
||||
} catch (error) {
|
||||
this.logger.error(`Error settling to balance for ${params.accountSequence}:`, error);
|
||||
|
|
@ -224,6 +248,19 @@ export class WalletServiceClient {
|
|||
};
|
||||
}
|
||||
|
||||
// wallet-service 使用全局 TransformInterceptor,响应格式为:
|
||||
// { success: true, data: { success: boolean, ... }, timestamp: "..." }
|
||||
const response_data = await response.json();
|
||||
const data = response_data.data || response_data;
|
||||
|
||||
if (data.success !== true) {
|
||||
this.logger.error(`Allocate funds failed for order ${request.orderId}: ${data.error || 'Unknown error'}`);
|
||||
return {
|
||||
success: false,
|
||||
error: data.error || 'Allocate funds failed',
|
||||
};
|
||||
}
|
||||
|
||||
this.logger.log(`Successfully allocated funds for order ${request.orderId}`);
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue