2025-08-27 14:29:37 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 支付/订单相关工具
|
|
|
|
|
|
*/
|
|
|
|
|
|
import type { OrderStatus } from 'db://assets/Scripts/chat18x/payment/types';
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 将数值状态映射为前端字符串状态
|
|
|
|
|
|
* @param status CSQueryOrderRes.status:-1=失败,0=成功,1=处理中,其它=未知
|
|
|
|
|
|
* @param options 可选标记(若你的业务在别处判定了取消/过期)
|
|
|
|
|
|
* @returns OrderStatus
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function mapQueryOrderStatus(
|
|
|
|
|
|
status: number | null | undefined,
|
|
|
|
|
|
options: { canceled?: boolean; expired?: boolean } = {}
|
|
|
|
|
|
): OrderStatus {
|
|
|
|
|
|
const { canceled = false, expired = false } = options;
|
|
|
|
|
|
|
|
|
|
|
|
if (canceled) return "CANCELED";
|
|
|
|
|
|
if (expired) return "EXPIRED";
|
|
|
|
|
|
|
|
|
|
|
|
switch (status) {
|
|
|
|
|
|
case 1: return "PENDING"; // 处理中
|
|
|
|
|
|
case 0: return "SUCCESS"; // 成功
|
|
|
|
|
|
case -1: return "FAILED"; // 失败
|
2025-09-11 15:36:15 +08:00
|
|
|
|
case 90: return "CANCELED"; // 取消
|
|
|
|
|
|
case 92: return "TIMEOUT"; // 轮询超时
|
2025-08-27 14:29:37 +08:00
|
|
|
|
default: return "CREATED"; // 未知/初始,按“已创建”兜底
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/** 是否为终态(无需再轮询) */
|
|
|
|
|
|
export function isTerminalStatus(s: OrderStatus): boolean {
|
2025-09-11 15:36:15 +08:00
|
|
|
|
return s === "SUCCESS" || s === "FAILED" || s === "CANCELED" || s === "EXPIRED" || s === "TIMEOUT";
|
2025-08-27 14:29:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/** 是否应继续轮询查询订单 */
|
|
|
|
|
|
export function shouldPoll(s: OrderStatus): boolean {
|
|
|
|
|
|
return s === "CREATED" || s === "PENDING";
|
|
|
|
|
|
}
|