Z Zise Developers

换绑账号邮箱 —— 换一张托管屏链接

POST /v1/members/{id}/email-sessions scope: members:write
商户自身 x-idempotency-key

hosted_url 交给终端用户。他在我方页面上填新地址,我方向新旧两个地址各发一个验证码,两个都填对才换。

── 为什么不是一个 PATCH 字段 ──邮箱是这个会员在我方唯一的强认证因子 —— 他没有我方的密码(建号时写的是随机占位串)、没有通行密钥、没有受信设备。

一个能直接改邮箱的写口,意味着你可以把任意会员的因子改指到你自己的信箱,之后随时替他过强认证:拿走卡密、新增提现地址。那是一条完整的账号接管路径,所以这件事只能由终端用户在我方域内完成。

两道码各自证明一件事:

  • 新地址那道 —— 他确实拥有这个新邮箱(防止绑到打错字的地址上,之后永久失联);
  • 当前地址那道 —— 他确实是这个账号的主人。

⚠ 换绑成功会吊销该会员在我方的全部会话、受信设备与通行密钥。对你没有直接影响(你的会员本来就不用我方的会话),但如果你在自己那侧缓存过他的邮箱,记得刷新。

⚠ 新地址已被平台上其他人占用时,用户会在那一页上看到提示 ——这个端点本身不做占用检查(在签票这一步做等于给你一个邮箱探测器)。

链接一次性、绑会员、24 小时。

路径参数

字段类型必填说明
id string 必填 会员标识。二选一:我方发的 mem_<uuid>,或你自己的 external_member_id。没有回落 —— 以 mem_ 开头的外部号会被 当成我方 id 解析。
字段类型必填说明
x-idempotency-key string 必填

响应

201票据已签发
{
  "id": "kyc_2e7f90b1c4a34d58ae3b6f2019c7d845",
  "hosted_url": "https://api.zise.com/hosted/email/kyc_2e7f90b1c4a34d58ae3b6f2019c7d845",
  "expires_at": 1786000000
}
400member_not_found 会员不存在或不属于你 · idempotency_key_required
请求
curl -X POST 'https://api.zise.com/v1/members/{id}/email-sessions' \
  -H 'x-auth-token: Bearer $TOKEN' \
  -H 'x-idempotency-key: $IDEMPOTENCY_KEY'
const res = await fetch("https://api.zise.com/v1/members/{id}/email-sessions", {
  method: "POST",
  headers: {
    "x-auth-token": "Bearer $TOKEN",
    "x-idempotency-key": "$IDEMPOTENCY_KEY",
  },
});
// 金额按字符串读,别让它变成 number
const data = await res.json();
import requests

res = requests.post(
    "https://api.zise.com/v1/members/{id}/email-sessions",
    headers={
        "x-auth-token": "Bearer $TOKEN",
        "x-idempotency-key": "$IDEMPOTENCY_KEY",
    },
)
# 金额用 Decimal(str(...)),不要 float
data = res.json()
req, _ := http.NewRequest("POST", "https://api.zise.com/v1/members/{id}/email-sessions",
    nil)
req.Header.Set("x-auth-token", "Bearer $TOKEN")
req.Header.Set("x-idempotency-key", "$IDEMPOTENCY_KEY")
res, err := http.DefaultClient.Do(req)
// 金额字段用 string 接,不要 float64
HttpRequest req = HttpRequest.newBuilder()
    .uri(URI.create("https://api.zise.com/v1/members/{id}/email-sessions"))
    .header("x-auth-token", "Bearer $TOKEN")
    .header("x-idempotency-key", "$IDEMPOTENCY_KEY")
    .method("POST", HttpRequest.BodyPublishers.noBody())
    .build();
// 金额字段用 String / BigDecimal,不要 double
$ch = curl_init('https://api.zise.com/v1/members/{id}/email-sessions');
curl_setopt_array($ch, [
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    'x-auth-token: Bearer $TOKEN',
    'x-idempotency-key: $IDEMPOTENCY_KEY',
  ],
]);
$res = curl_exec($ch);
// 金额用 bcmath / 字符串,不要 floatval
201
{
  "id": "kyc_2e7f90b1c4a34d58ae3b6f2019c7d845",
  "hosted_url": "https://api.zise.com/hosted/email/kyc_2e7f90b1c4a34d58ae3b6f2019c7d845",
  "expires_at": 1786000000
}