卡片令牌化
Quick Reference
What用安全令牌替代 PAN
WhyA55 安全存储卡数据并支持一键支付 / 循环扣款
Difficulty中级
Prerequisites身份验证 → 创建扣款
卡片 tokenization(令牌化)将**原始 PAN(主账号)**替换为不可逆的令牌,您的系统可安全存储和重复使用。即使数据泄露,攻击者也无法获得有效卡号;回头客只需一键即可完成支付。
为什么要令牌化
| 优势 | 说明 |
|---|---|
| 安全存储 | 令牌不是 PAN——A55 加密并安全存储原始卡数据,您的系统仅需存储令牌 |
| 一键结账 | 无需重新采集卡片数据即可对回头客发起扣款 |
| 循环扣款 | 使用同一令牌完成订阅续费(MIT(商户发起交易)) |
| 提高通过率 | 令牌化交易被发卡行视为可信交易 |
| 卡片生命周期连续性 | 令牌在卡片换卡后仍然有效(新有效期,令牌不变) |
自动与显式令牌化
A55 支持 2 种令牌化模式:
| 模式 | 触发方式 | 使用场景 |
|---|---|---|
| 自动(账户级别) | 首笔成功扣款时自动透明令牌化 | 零改动集成——开启即可获益 |
| 显式(逐卡) | 在任何扣款之前调用 POST /api/v1/bank/wallet/tokenization/ | 在首次支付前存储卡片、离线设置 |
激活方式
自动令牌化在账户级别配置。请联系 tech.services@a55.tech 申请开通。
令牌生命周期
显式令牌化
POST https://core-manager.a55.tech/api/v1/bank/wallet/tokenization/
- cURL
- Python
- JavaScript
curl -sS -X POST 'https://core-manager.a55.tech/api/v1/bank/wallet/tokenization/' \
-H 'Authorization: Bearer $ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"wallet_uuid": "1f937eb2-cf2c-421c-aa24-3f26519f42fa",
"merchant_uuid": "d6f921ef-5bdd-4ebf-a065-bd38de839bd1",
"card": {
"holder_name": "张伟",
"card_number": "4111111111111111",
"expiry_month": "12",
"expiry_year": "2030",
"cvv": "123",
"brand": "Visa"
}
}'
import os, requests
r = requests.post(
"https://core-manager.a55.tech/api/v1/bank/wallet/tokenization/",
headers={"Authorization": f"Bearer {os.environ['ACCESS_TOKEN']}"},
json={
"wallet_uuid": "1f937eb2-cf2c-421c-aa24-3f26519f42fa",
"merchant_uuid": "d6f921ef-5bdd-4ebf-a065-bd38de839bd1",
"card": {
"holder_name": "张伟",
"card_number": "4111111111111111",
"expiry_month": "12",
"expiry_year": "2030",
"cvv": "123",
"brand": "Visa",
},
},
timeout=30,
)
token = r.json()["card_token"]
const res = await fetch('https://core-manager.a55.tech/api/v1/bank/wallet/tokenization/', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
wallet_uuid: '1f937eb2-cf2c-421c-aa24-3f26519f42fa',
merchant_uuid: 'd6f921ef-5bdd-4ebf-a065-bd38de839bd1',
card: {
holder_name: '张伟',
card_number: '4111111111111111',
expiry_month: '12',
expiry_year: '2030',
cvv: '123',
brand: 'Visa',
},
}),
});
const { card_token } = await res.json();
响应
{
"card_token": "d7641ce9-9411-432c-bb25-240ce7dd3cef"
}
使用令牌扣款
获得 card_token 后,在后续扣款中引用该令牌,无需传入原始卡片字段:
{
"wallet_uuid": "1f937eb2-cf2c-421c-aa24-3f26519f42fa",
"merchant_id": "merchant_123",
"currency": "BRL",
"installment_value": 100,
"type_charge": "credit_card",
"card_token": "d7641ce9-9411-432c-bb25-240ce7dd3cef",
"payer_name": "张伟",
"payer_email": "zhangwei@example.com",
"payer_tax_id": "12345678901"
}
令牌优先
如果同一请求中同时传入了 card_token 和原始卡片字段,令牌优先。原始字段将被忽略。
行为说明
| 规则 | 说明 |
|---|---|
| 令牌优先 | 同时存在令牌和原始卡片数据时,令牌生效 |
| 自动模式 | 首笔成功扣款时自动令牌化——无需额外 API 调用 |
| 兼容性 | 与 3DS、反欺诈评分和路由逻辑完全兼容 |
| 不存储 CVV | CVV(卡片验证码)永远不会被存储——仅在初始令牌化时使用 |
| 生命周期 | 令牌在换卡后仍然有效;仅在显式请求或卡片注销时删除 |
安全提醒
显式令牌化接收原始 PAN 和 CVV。A55 会安全加密并存储这些数据。除非需要显式控制,否则优先使用自动令牌化——无需额外操作即可获得安全保障。