OTP 仅适用于用户会话(JWT 登录)。
pk_ API 密钥豁免:它们是服务器到服务器的集成,另一端没有持有手机的真人。如果您的整个业务都通过 API 密钥运行,本页内容不会对您的集成产生任何影响。工作原理
otp_token 为一次性使用,绑定到您的用户及其签发时对应的操作,并随质询(challenge)一同过期(验证码发送后 10 分钟)。
1. 查询您的策略
GET /v1/otp/settings 会告诉您 OTP 是否已启用,以及哪些操作需要验证码:
2. 请求验证码
201 —— 验证码已在发往账户手机号的途中:
409 phone_required(可通过 PATCH /v1/me 设置)。发送受每小时限额约束——超出限额将返回 429 too_many_attempts。
3. 验证验证码
401 invalid_code(每个质询最多可尝试 5 次)。
4. 携带令牌执行操作
idempotency_key 仍然是防重复的保障——OTP 并不能替代它。
两步登录
如果您的策略要求在login 时使用 OTP,POST /v1/auth/login 将不再直接返回会话:
pending_token 无法调用 API:它只能与验证码一起,换取真正的会话令牌:
账户的手机号
- E.164 格式(
+56912345678),可在注册时、通过PATCH /v1/me或由您的运营方设置。 phone_verified会在您首次成功验证质询时变为true:这证明持有人手中确实握有该手机。- 更换手机号(操作
phone_change)时,验证码将发送到原有号码进行校验——任何人在未持有您当前手机的情况下都无法劫持您的验证码。 - 如果手机号是首次绑定(或未经验证即被更改),SMS/WhatsApp 质询将锁定 24 小时:这是防会话劫持的窗口期。冷却期内,若您已注册身份验证器应用或已验证邮箱,质询会自动改用该更强的因素发出(质询响应中会返回实际使用的渠道);仅当没有任何替代因素时才会收到
403 phone_binding_cooldown。由运营方设置的手机号没有冷却期。 - 两步登录遵循同样的规则:登录 2FA 为 SMS/WhatsApp 且手机号处于冷却期时,登录验证码会改由身份验证器应用或您的登录邮箱发出(登录响应中返回实际的
channel)——绝不会发送到最近绑定且未验证的号码。没有替代因素时,登录返回403 phone_binding_cooldown,直到冷却期结束。
错误
常见问题
OTP 会影响我的服务器到服务器集成吗?
OTP 会影响我的服务器到服务器集成吗?
不会。
pk_ API 密钥在设计上即被豁免:自动化流程永远不经过 OTP。请妥善保管您的密钥——签发新密钥本身可能需要 OTP(操作 api_key_create)。我可以选择 SMS 还是 WhatsApp 吗?
我可以选择 SMS 还是 WhatsApp 吗?
渠道由您的运营方按操作配置(可按账户或整个组织配置)。您可以在
GET /v1/otp/settings 中查看。验证码有效期多长?我有多少次尝试机会?
验证码有效期多长?我有多少次尝试机会?
验证码与质询的有效期为 10 分钟。每个质询最多可验证 5 次,另有每小时发送限额。产生的
otp_token 为一次性使用。我可以申请一个令牌并用于多个操作吗?
我可以申请一个令牌并用于多个操作吗?
不可以:令牌与创建质询时指定的确切操作绑定(
payout 令牌不能用于 transfer),且在首次使用时即被消耗。令牌被消耗后操作失败了——我会被扣两次款吗?
令牌被消耗后操作失败了——我会被扣两次款吗?
不会。令牌被消耗只意味着您需要重新验证一个新的质询;操作的
idempotency_key 仍然保证不会产生重复。