fix: 支付网关失败时返回友好错误信息

捕获支付提供商配置缺失或调用失败,
包装成 PAYMENT_GATEWAY_ERROR 错误码并返回中文提示,
前端同步处理该错误码显示具体原因。
This commit is contained in:
erio
2026-03-01 19:56:41 +08:00
parent 902c4349c2
commit e4005da38e
2 changed files with 11 additions and 1 deletions

View File

@@ -181,6 +181,7 @@ function PayContent() {
TOO_MANY_PENDING: '您有过多待支付订单,请先完成或取消现有订单后再试',
USER_NOT_FOUND: '用户不存在,请检查链接是否正确',
DAILY_LIMIT_EXCEEDED: data.error,
PAYMENT_GATEWAY_ERROR: data.error,
};
setError(codeMessages[data.code] || data.error || '创建订单失败');
return;

View File

@@ -133,7 +133,16 @@ export async function createOrder(input: CreateOrderInput): Promise<CreateOrderR
};
} catch (error) {
await prisma.order.delete({ where: { id: order.id } });
throw error;
// 已经是业务错误,直接向上抛
if (error instanceof OrderError) throw error;
// 支付网关配置缺失或调用失败,转成友好错误
const msg = error instanceof Error ? error.message : String(error);
if (msg.includes('environment variables') || msg.includes('not configured') || msg.includes('not found')) {
throw new OrderError('PAYMENT_GATEWAY_ERROR', `支付渠道(${input.paymentType})暂未配置,请联系管理员`, 503);
}
throw new OrderError('PAYMENT_GATEWAY_ERROR', '支付渠道暂时不可用,请稍后重试或更换支付方式', 502);
}
}