fix: 支付网关失败时返回友好错误信息
捕获支付提供商配置缺失或调用失败, 包装成 PAYMENT_GATEWAY_ERROR 错误码并返回中文提示, 前端同步处理该错误码显示具体原因。
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user