如何从Stripe Connected Account对象判断Rejected/Pending状态?
Stripe关联账户Rejected/Pending状态判断逻辑指正
Rejected状态判断
正确逻辑
关联账户被Stripe拒绝的核心判定依据是account.requirements.disabled_reason字段值为"rejected"。同时通常伴随account.charges_enabled和account.payouts_enabled均为false,因为拒绝后账户会被禁用交易功能。
代码示例:
const isRejected = account.requirements?.disabled_reason === "rejected";
常见推导错误
- 错误地将
account.requirements.currently_due或past_due有内容判定为拒绝:这些字段仅表示账户有未完成的必填要求,属于待补充状态,并非被拒绝。 - 忽略
disabled_reason的精确值:有些开发者会用!!account.requirements.disabled_reason直接判定拒绝,但disabled_reason还有其他值(比如"requirements_past_due"),这些属于受限而非拒绝。
Pending状态判断
正确逻辑
Pending状态对应两种场景:一是账户提交信息后正在等待Stripe审核,二是有未完成的必填要求但尚未触发拒绝。核心判定逻辑如下:
- 账户交易/提现功能未完全启用(
account.charges_enabled为false或account.payouts_enabled为false) account.requirements.disabled_reason不为"rejected"(排除已拒绝的情况)- 满足以下任一条件:
account.requirements.pending_verification数组长度大于0(表示有信息正在审核)account.requirements.currently_due数组长度大于0(有当前需完成的必填项)account.requirements.past_due数组长度大于0(有逾期未完成的必填项,但还没到拒绝程度)
代码示例:
const isPending = (!account.charges_enabled || !account.payouts_enabled) && account.requirements?.disabled_reason !== "rejected" && ( account.requirements?.pending_verification?.length > 0 || account.requirements?.currently_due?.length > 0 || account.requirements?.past_due?.length > 0 );
常见推导错误
- 仅用
pending_verification判断Pending:忽略了用户未提交必填信息的场景(此时pending_verification为空,但currently_due有内容,也属于Pending)。 - 混淆Pending和Restricted:Restricted是账户因未完成要求被限制功能,但Pending更偏向“待处理/待审核”的状态,两者有重叠但判定逻辑需区分(Restricted需要
disabled_reason存在且符合受限条件)。
额外纠正:你之前的isRestricted逻辑优先级问题
你原来的代码存在逻辑运算符优先级错误,&&的优先级高于?:,会导致判断逻辑不符合预期。修正后的代码应该是:
// 修正优先级,用括号明确逻辑顺序 const isRestricted = (!!account.requirements?.disabled_reason) && (account.requirements?.currently_due?.length > 0 || account.requirements?.past_due?.length > 0);
或者更简洁地用双重感叹号转换为布尔值,避免三元运算符的优先级问题。
内容的提问来源于stack exchange,提问作者ermir
相关产品推荐
相关产品推荐

