卡片
1. 基础地址
测试环境基础地址
https://api.futurepay-develop.com/api/v1/issuing/card生产环境基础地址
https://api.futurepay.global/api/v1/issuing/card1.1 接口一览
| 功能 | POST 路径 | 成功时 data |
|---|---|---|
| 创建卡片 | /create | 卡片对象 |
| 分页查询 | /paging | 分页对象,列表项为卡片对象 |
| 查询详情 | /{id}/detail | 卡片对象 |
| 查询完整卡号及 CVC | /{id}/secret | 卡密对象 |
| 替换卡片 | /{id}/replace | 新卡片对象 |
| 激活卡片 | /{id}/activate | true |
| 冻结卡片 | /{id}/freeze | true |
| 解冻卡片 | /{id}/unfreeze | true |
| 注销卡片 | /{id}/cancel | true |
| 查询消费控制 | /{id}/controls/detail | 消费控制对象 |
| 设置消费控制 | /{id}/controls | 保存后的消费控制对象 |
2. 统一响应
2.1 成功响应
{
"code": "0",
"msg": "succeeded",
"serverTime": "1793923200000",
"data": true,
"success": true
}| 字段 | 说明 |
|---|---|
code | 响应码,成功为 0 |
msg | 响应说明 |
serverTime | 响应时间 |
data | 业务数据 |
success | 是否成功 |
2.2 失败响应
{
"code": "CARD_NOT_FOUND",
"msg": "Card not found",
"serverTime": "1793923200000",
"success": false
}3. 创建卡片
POST /create| 字段 | 类型 | 必填/默认 | 说明 |
|---|---|---|---|
cardholderId | String | 必填 | 持卡人编号 |
type | String | 默认 virtual | 虚拟卡 |
activeEnabled | Boolean | 默认 true | 是否创建后立即激活 |
singleUseEnabled | Boolean | 默认 false | false 为重复使用,true 为一次性使用 |
singleUseAmount | Number | 一次性卡必填 | 一次性卡单笔消费金额上限,最小 0.01,整数最多 10 位,小数最多 2 位 |
validityHours | Integer | 默认 24 | 一次性卡有效小时数,1–720 |
创建成功生成新的卡片 id。activeEnabled=true 时为 active,false 时为 inactive,之后可调用激活接口。
3.1 重复使用卡
{
"cardholderId": "ich_example",
"type": "virtual",
"activeEnabled": true,
"singleUseEnabled": false
}3.2 一次性卡
{
"cardholderId": "ich_example",
"type": "virtual",
"activeEnabled": false,
"singleUseEnabled": true,
"singleUseAmount": 100.00,
"validityHours": 24
}一次性卡创建时必须设置 singleUseAmount,首次交易清算后自动失效。
4. 分页查询
POST /paging| 字段 | 类型 | 规则 |
|---|---|---|
id | String | 选填,卡片业务编号精确筛选 |
cardholderId | String | 选填,持卡人业务编号筛选 |
status | String | 选填:active、inactive、frozen、controlled、canceled |
type | String | 选填:virtual、physical |
keyword | String | 选填,系统卡编号、持卡人姓名关键词 |
cardNumber | String | 选填,4 位尾号或 16 位完整卡号 |
startDate | String | 选填,创建时间起始值 |
endDate | String | 选填,创建时间结束值,不得早于 startDate |
pageNum | Integer | 默认 1,最小 1 |
pageSize | Integer | 默认 20,范围 1–100 |
{
"pageNum": 1,
"pageSize": 20,
"status": "active",
"type": "virtual"
}响应 data:
{
"pageNum": 1,
"pageSize": 20,
"total": 0,
"totalPage": 0,
"list": []
}5. 卡片详情与卡片对象
POST /{id}/detail请求体:
{}卡片对象
{
"id": "ic_example",
"cardholderId": "ich_example",
"type": "virtual",
"currency": "USD",
"status": "active",
"last4": "4242",
"expMonth": "11",
"expYear": "2029",
"singleUseEnabled": false,
"singleUseExpiresAt": null,
"createdAt": "2026-11-06 10:00:00",
"updatedAt": "2026-11-06 10:00:00",
"replacementFor": null
}| 字段 | 类型 | 说明 |
|---|---|---|
id | String | 卡片编号 |
cardholderId | String | 持卡人编号 |
type | String | virtual 虚拟卡,physical 实体卡 |
currency | String | 币种 |
status | String | 见下表 |
last4 | String | 卡号末四位 |
expMonth | String | 有效期月份 |
expYear | String | 有效期年份 |
singleUseEnabled | Boolean | 是否一次性卡 |
singleUseExpiresAt | String | 一次性卡到期时间 |
createdAt | String | 创建时间 |
updatedAt | String | 更新时间 |
replacementFor | String | 被替换的旧卡编号 |
| status | 含义 | 新消费 | 状态恢复方式 |
|---|---|---|---|
active | 已激活、使用中 | 按消费控制规则处理 | — |
inactive | 未激活 | 不允许 | 调用激活接口 |
frozen | 已冻结,临时停用 | 不允许 | 调用解冻接口 |
controlled | 风控管控中 | 不允许 | 由管理端解除管控,不能通过激活或解冻接口恢复 |
canceled | 已注销,永久停用 | 不允许 | 不可恢复 |
status 表示卡片当前状态;reason 用于提交注销或换卡的原因。换卡原因决定卡号等信息是否更换。
操作对卡号、CVV 和有效期的影响
CVV 为卡片安全码,对应接口字段 cvc;有效期对应 expMonth、expYear。
| 操作 | 是否更换卡号 | 是否更换 CVV | 是否更新有效期 |
|---|---|---|---|
| 激活、冻结、解冻 | 否 | 否 | 否 |
| 注销(所有原因) | 否 | 否 | 否 |
| 设置消费控制 | 否 | 否 | 否 |
到期换卡(expired) | 否 | 是 | 是 |
丢失、被盗换卡(lost、stolen) | 是 | 是 | 是 |
注销后原卡停止使用,不生成新的卡号或 CVV。一次性卡的 validityHours 调整其使用截止时间 singleUseExpiresAt。
6. 激活、冻结、解冻
| 操作 | POST 路径 | 允许的当前状态 | 成功后状态 | 用途 |
|---|---|---|---|---|
| 激活 | /{id}/activate | inactive | active | 启用尚未激活的卡 |
| 冻结 | /{id}/freeze | active | frozen | 临时停用,之后可解冻 |
| 解冻 | /{id}/unfreeze | frozen | active | 恢复已冻结的卡 |
上述三个接口均传:
{}这三个操作不传 reason,保留原卡 id、cardholderId、卡号、CVC、有效期、消费限额、MCC 规则及已用额度。
7. 注销卡片
POST /{id}/cancel| 字段 | 类型 | 规则 |
|---|---|---|
reason | String | 选填:lost、stolen、design_rejected、unactivated |
7.1 注销原因
| reason | 含义 | 处理结果 |
|---|---|---|
lost | 卡片丢失 | 注销卡片,标记丢失 |
stolen | 卡片被盗 | 注销卡片,标记被盗 |
design_rejected | 卡片设计被拒绝 | 注销卡片,记录设计拒绝原因 |
unactivated | 卡片未激活 | 注销卡片,记录未激活原因 |
| 不传 | 未指定原因 | 注销卡片 |
不同原因的最终状态均为 canceled。注销不会自动创建替换卡。
7.2 状态与数据变化
| 项目 | 注销后的结果 |
|---|---|
| 原状态 | active、inactive、frozen、controlled 均可申请注销 |
| 成功后状态 | canceled,不可再激活或解冻 |
卡片 id、cardholderId | 保持不变 |
| 卡号、CVC、有效期 | 不换发,原卡停止新消费 |
| 历史交易 | 保留,仍可查询 |
指定丢失原因:
{
"reason": "lost"
}不指定原因:
{}8. 查询完整卡号与 CVC
POST /{id}/secret请求体:
{}响应 data:
{
"id": "ic_example",
"number": "4242424242424242",
"cvc": "123",
"expMonth": "11",
"expYear": "2029"
}9. 换卡
POST /{id}/replace| 字段 | 类型 | 规则 |
|---|---|---|
reason | String | 必填:lost、stolen、expired |
activate | Boolean | 是否激活新卡,默认 true |
{
"reason": "lost",
"activate": true
}换卡成功返回新卡片对象。当前支持重复使用的虚拟卡;一次性卡、已注销卡不支持换卡。
9.1 换卡原因与卡密变化
- 卡片到期(
expired):卡片已到期或即将到期。新卡保留原卡号,更新有效期并更换 CVV。 - 卡片丢失(
lost):卡片遗失,需要停用旧卡。新卡使用新的卡号、CVV 和有效期。 - 卡片被盗(
stolen):卡片被盗,需要停用旧卡。新卡使用新的卡号、CVV 和有效期。
| 换卡原因 | 是否更换卡号 | 是否更换 CVV | 是否更新有效期 |
|---|---|---|---|
到期(expired) | 否 | 是 | 是 |
丢失(lost) | 是 | 是 | 是 |
被盗(stolen) | 是 | 是 | 是 |
当前接口不支持卡片损坏(damaged)换卡。
9.2 新旧卡状态
| activate | 新卡状态 | 换卡成功后的旧卡状态 |
|---|---|---|
true | active(已激活) | canceled(已注销) |
false | inactive(未激活) | canceled(已注销) |
以上状态适用于所有换卡原因。旧卡注销后不可恢复;新卡未激活时,可调用激活接口。
9.3 保留与变化的字段
| 项目 | 换卡后的结果 |
|---|---|
卡片 id | 新卡生成新的编号;旧卡编号保留 |
cardholderId | 新旧卡相同,持卡人不变 |
replacementFor | 新卡指向旧卡编号 |
type、currency、singleUseEnabled | 沿用旧卡 |
| 卡号、CVC、有效期 | 按换卡原因处理,见 9.1 |
| 消费限额、MCC 规则 | 新卡继承旧卡配置 |
| 已用额度 | 继承旧卡,换卡不会重置已用额度或重新开始额度周期 |
| 历史交易 | 保留原记录,不改写为新卡编号 |
后续查询和操作新卡使用返回的新 id;activate=false 时,通过新卡 id 调用激活接口。
10. 消费控制
10.1 查询
POST /{id}/controls/detail请求体:
{}响应 data 示例:
{
"limits": [
{
"amount": 5000.00,
"currency": "USD",
"interval": "monthly",
"usedAmount": 100.00
}
],
"categories": [
{
"rule": "deny",
"mcc": ["0742", "7311"]
}
]
}10.2 设置(全量替换)
POST /{id}/controls设置成功更新消费限额和 MCC 规则,卡片状态、卡片 id、cardholderId、卡号及 CVC 保持不变。一次性卡传入 validityHours 时,同时调整其到期时间。
{
"limits": [
{
"amount": 500.00,
"interval": "per_authorization"
},
{
"amount": 5000.00,
"interval": "monthly"
}
],
"categories": [
{
"rule": "deny",
"mcc": ["0742", "7311"]
}
]
}| 字段 | 类型 | 校验规则 |
|---|---|---|
limits | Array | 必填;一次性卡必须且只能有一条 per_authorization 单笔限额 |
limits[].amount | Number | 必填,最小 0.01,整数最多 10 位,小数最多 2 位 |
limits[].interval | String | 必填,见周期枚举;同一周期只能出现一次 |
categories | Array | 必填,消费类别规则列表 |
categories[].rule | String | 必填,allow 白名单、deny 黑名单 |
categories[].mcc | Array | MCC 列表 |
validityHours | Integer | 选填,1–720,仅用于一次性卡有效期调整 |
| interval | 含义 |
|---|---|
per_authorization | 单笔授权限额 |
daily | 每日限额 |
weekly | 每周限额 |
monthly | 每月限额 |
yearly | 每年限额 |
all_time | 累计限额 |
10.3 清空控制(重复使用卡)
{
"limits": [],
"categories": []
}10.4 一次性卡控制
一次性卡每次设置或更新消费控制时,必须提交单笔消费金额上限;仅允许一条 per_authorization 限额,不能清空或改为其他周期。
{
"limits": [
{
"amount": 500.00,
"interval": "per_authorization"
}
],
"categories": [],
"validityHours": 24
}11. 常见错误
| code | 含义 |
|---|---|
400 | 必填、字段类型、格式或范围错误,具体原因见英文 msg |
404 | API 路径不存在 |
VCC_PRODUCT_NOT_ENABLED | 商户未开通或未启用 VCC 产品能力 |
API_CARD_PARAMETER_INVALID | 参数组合不合法,例如周期重复或 MCC 不支持 |
API_CARD_PHYSICAL_NOT_SUPPORTED | 实体卡发卡/换卡暂未开放 |
API_CARD_SECRET_UNAVAILABLE | 卡密数据尚未准备好 |
CARD_NOT_FOUND | 卡片不存在或不属于当前商户 |
CARDHOLDER_NOT_FOUND | 持卡人不存在或不属于当前商户 |
CARDHOLDER_STATUS_INVALID | 持卡人当前不满足发卡条件 |
CARD_STATUS_INVALID | 当前卡片状态不允许执行该操作 |
CARD_ALREADY_ACTIVE | 已激活,不能重复激活 |
CARD_ALREADY_INACTIVE | 已冻结,不能重复冻结 |
CARD_ALREADY_CANCELED | 已注销 |
CARD_UNDER_CONTROL | 风控管控中 |
CARD_SINGLE_USE_LIMIT_REQUIRED | 一次性卡需要正确的单笔限额 |
CARD_SINGLE_USE_REPLACEMENT_NOT_ALLOWED | 一次性卡不支持换卡 |
CARD_LIMIT_CURRENCY_INVALID | 非 USD 卡片不支持设置美元限额 |
CARD_CONTROL_UPDATE_FAILED | 消费控制设置失败 |
CARD_ISSUE_FAILED | 发卡或换卡失败 |
VCC_ISSUING_PRODUCT_NOT_FOUND | 商户没有可用发卡产品或策略配置不满足要求 |
Updated about 17 hours ago