/rechargeCard 向储值卡充值时收取?/rechargeCard 向储值卡充值不收取手续费。/refundCard 将卡内余额退回账户时,已收取的 充值手续费是否返还?product_code 或 BIN?537872、555671、544015、525962。| 费用类型 | 计费规则 |
|---|---|
| 消费授权或失败交易费 | BIN 537872:0.20 USD/笔;BIN 555671、544015、525962:0.30 USD/笔。 |
| 消费退款费 | BIN 537872:每笔消费退款收取 5% 手续费;BIN 555671、544015、525962:每笔消费退款收取 10% 手续费。 |
| 拒付或争议费 | 拒付(Declined Transaction)按交易失败处理,费用同消费授权或失败交易费;争议(Chargeback Transaction)按 35 USD/笔收取。 |
| 跨境交易费及外汇转换费 | 不收取。 |
| 卡余额退回费 | 不收取。 |
| 账户提现或资金转出费 | VM 总账余额提现至外部钱包时, 按提现金额的 2% 收取。 |
{
"content": "RSA密文"
}content 加密报文?{"content":"RSA密文"} 格式,包括:/createCard/cardDetail/freezeCard/deleteCard/rechargeCard/refundCard/cardTransaction/updateCardLimit/getCardList/getCardFlow/getProductCode 和 /getAccountBalance 不包含业务请求体,可以提交空 Body。data 是否始终加密?/getAccountBalance、/createCard、/cardDetail、/rechargeCard 和 /refundCard 的完整 Sandbox cURL 与实际响应示例?json.dumps(data) 序列化后进行 UTF-8 编码;解密后按 UTF-8 字符串解析 JSON。/getAccessToken 当前使用 app_id 和 app_secret 获取 Token。| 问题 | 答复 |
|---|---|
Authorization 请求头应直接填写 Token,还是使用 Bearer <token>? | 直接填写 Token,不使用 Bearer 格式。 |
expired_time 是否为 Unix 秒时间戳? | 是。 |
| Token 默认有效期是多久? | 7200 秒。 |
| 是否建议在到期前提前获取新 Token? | 建议至少提前 600 秒获取。 |
| 获取新 Token 后,旧 Token 是否立即失效? | 建议立即停止使用旧 Token。 |
| 是否允许多个有效 Token 同时存在? | 建议仅使用最新 Token。 |
| App Secret 和 Token 的撤销及轮换流程是什么? | 请参阅后续相关问题的答复。 |
是否支持通过 POST Body 或其他方式提交 app_secret? | 不支持。/getAccessToken 当前为 GET 路由,通过 app_id 和 app_secret 参数获取。 |
X-Client-Request-Id。/createCard、/rechargeCard、/refundCard、/updateCardLimit 和 /deleteCard?-、_、.、:。唯一性按照 AppId + ClientRequestId 组合判断。当前实现仅记录格式无效标记,不会直接拦截格式不合规的请求。Duplicate Client Request Id。Duplicate Client Request Id。Duplicate Client Request Id。/getCardList 或 /cardDetail/getCardFlow/cardTransaction| 信息 | 当前口径 |
|---|---|
| 唯一操作流水号 | /getCardFlow 返回 flow_id,可用于对账和去重。 |
| 操作状态 | 需结合具体业务判断。 |
| 申请金额和实际金额 | 需结合具体业务判断。 |
| 手续费 | 暂无统一返回。 |
| 操作前后余额 | 当前返回操作后的余额。 |
| 创建时间和更新时间 | 以相关接口实际返回字段为准。 |
/getProductCode 当前返回 BIN、产品码、卡类型、卡组织、发行地区及剩余可开卡数量。| 项目 | 当前口径 |
|---|---|
| 开卡费和充值费 | 接口不返回。 |
/createCard 金额范围 | amount >= 1;save 卡同时要求 amount <= 50000。 |
/rechargeCard 金额范围 | 10 <= amount <= 50000。 |
/refundCard 金额范围 | amount >= 0。具体最低保留余额请参阅 2026-08-15 的补充确认。 |
| 单卡、单日和账户级频次限制 | 线下沟通。 |
| 3DS、AVS 和订阅支付能力 | 单独沟通。 |
| 支持或限制的国家、商户及 MCC | 单独沟通。 |
| 卡有效期及产品上下架通知 | 单独沟通。 |
/createCard 时,amount 是否代表首次卡充值金额?amount 是否代表总额度?balance 与 wallet_balance 分别对应哪种资金池?balance 为账户主余额,对应储值卡资金池;wallet_balance 为钱包余额,对应共享卡/额度卡资金池。/updateCardLimit 修改 amount 时,实际如何影响额度钱包?amount 将作为新的总额度。/createCard 中的 card_address 是否可以完全省略?card_address 后,address_line_two 是否必填?first_name 和 last_name 必填,且不得为空。card_address 整体可选;如传入,则除 address_line_two 外,其余内部字段均为必填。-),不支持中文或逗号、句号、#、@ 等特殊符号。/rechargeCard 和 /refundCard 的资金分别从哪里扣除、退回哪里?/rechargeCard 从主账户 balance 扣款并增加储值卡余额;/refundCard 从储值卡余额退回主账户 balance。amount 充值或退回。/rechargeCard 金额范围为 10 至 50000;/refundCard 要求 amount >= 0。PENDING?"true" 时,是否代表资金已经最终完成?flow_id 或其他资金操作流水号?/getCardFlow 的说明。/refundCard 的可退金额以卡片当前可用余额为准。待清算授权对应的金额通常已被卡组织或通道冻结、占用,通道返回的可用余额会相应减少;VM API 不会再次重复扣减该部分金额。getCardFlow 中的 amount、reality_amount、account_balance、ref 和 code 分别表示什么?flow_id:资金流水 ID。amount:流水金额。reality_amount:实际金额字段。account_balance:该笔流水完成后的账户余额。ref、code:透传资金流水表中的对应字段。getCardFlow.flow_id 是否全局唯一且不会复用?auth_id 是否会贯穿 Authorization、Settlement、Reversal 和 Refund?auth_id 是 VM 系统生成的交易记录 ID,并非通道原始授权 ID。该字段可以标识一条返回记录,但不能稳定作为 Authorization、Settlement、Reversal 和 Refund 之间的统一关联 ID。auth_id 关联。经后续确认,auth_id 不能保证作为完整交易生命周期的稳定关联 ID。/cardTransaction,当前口径如下:| 项目 | 答复 |
|---|---|
start_time 和 end_time 的筛选字段 | 按 auth_time 筛选。 |
| 时间范围边界 | 包含起止时间。 |
| 时间字段时区 | auth_time 的存储时区取决于各通道返回的数据时区。 |
| 默认排序 | 按 auth_time 降序。 |
| 分页稳定性 | 当前采用 offset/limit 分页,查询期间新增记录时不能保证分页结果稳定。 |
| 最大查询跨度及数据保留期 | page_size 最大为 1000;当前未明确限制查询时间跨度,历史数据目前长期保留。 |
| 增量查询 | 不支持按更新时间、游标或事件 ID 增量查询。 |
auth_amount/auth_currency 与 settle_amount/settle_currency 分别表示什么?auth_amount 和 auth_currency 分别表示授权金额和授权币种;settle_amount 和 settle_currency 分别表示清算金额和清算币种。对外返回的金额取绝对值。1.234 处理为 1.23,1.235 处理为 1.24。| 验证能力 | 当前情况 |
|---|---|
| HMAC 或公钥签名 | 暂不支持。 |
| 可配置的回调 Secret | 当前仅配置回调 URL,不提供独立的 Callback Secret。 |
timestamp 与 nonce | 交易数据中包含交易时间,但该字段不是用于验签或防重放的 timestamp + nonce。 |
唯一 event_id 或 delivery_id | 普通交易可使用 auth_id 识别交易,但没有独立的 event_id 或 delivery_id;3DS 通知也没有独立事件 ID。 |
| 固定出口 IP 清单 | 需单独沟通确认。 |
| mTLS | 当前回调未使用双向 TLS。 |
| 问题 | 答复 |
|---|---|
普通 Webhook 中卡 ID 的正式字段名是 cardId 还是 card_id? | card_id。 |
| Webhook 接收成功是否仅判断 HTTP 2xx? | 早期口径为判断 HTTP Code,不强制校验 Message,但建议返回成功消息。后续不同类别的 ACK 规则有所细化。 |
| 响应超时时间 | 30 秒。 |
| “重复发送三次”的含义 | 最多总计尝试 3 次。后续答复对不同 Webhook 类别作了区分。 |
| 重试间隔和最长投递时间 | 早期口径为超时后重试。后续确认未承诺固定重试间隔或严格最长投递期。 |
| 是否可能重复或乱序投递 | 不保证严格有序,业务系统不得假设通知有序或仅投递一次。 |
| 是否提供投递日志、失败查询及人工补发 | 需单独沟通,后续答复对不同 Webhook 类别作了说明。 |
| 项目 | 当前情况 |
|---|---|
challenge_id 或 transaction_id | 当前 3DS 回调不包含这两个字段。 |
| 唯一事件 ID | 不提供独立的 event_id 或 delivery_id。 |
| OTP 生成时间和到期时间 | 回调中不返回。 |
| 同一交易的通知次数或尝试次数 | Payload 不包含通知次数或尝试次数;系统队列失败时会进行重试。 |
| OTP 重放防护规则 | 当前未提供重放防护字段或规则。 |
| Webhook 遗漏后的查询或补发方式 | 当前没有 3DS 通知查询或补发接口;失败时由系统队列自动重试。 |
code 的对应关系是什么?code = 0 表示业务请求成功,非 0 表示失败。各接口仍应以正式接口文档和实际响应为准。Authorization 为空、Token 无效或过期时返回 400003;App Secret 错误时返回 400007。400004 与 400007 分别对应哪种权限问题?400004 表示未开通权限(No Permission);400007 表示 App Secret 错误。Authorization Is Empty、Invalid Token、Invalid AppId、Params Content Error 及解密失败等。错误场景无法穷举,建议重试前先通过卡详情、卡列表、卡流水或交易流水查询最终状态。400008 对应的 Sandbox 和 Production 限频、时间窗口及并发限制是什么?Retry-After?CANCELLED 是否始终表示可以通过 ACTIVE 恢复的冻结状态?ACTIVE 表示激活,CANCELLED 表示禁用,DELETED 表示删除。在 /freezeCard 中,CANCELLED 表示冻结或停用,可以提交 ACTIVE 恢复;DELETED 状态不可恢复。CANCELLED?DELETED。因 CVV 或有效期连续输入错误三次而被发卡行冻结时,可能表现为 CANCELLED,一般等待 3 至 5 天后会自动解除。/deleteCard 是否不可逆?1.0.0 是否为当前 Production 契约版本,并说明 Sandbox 与 Production 在 Schema 或行为上的差异。Retry-After。请确认限流所称“同一主体”是按 AppId、账户、子账户、出口 IP,还是组合维度计算。{
"content": "RSA密文"
}/createCard/cardDetail/freezeCard/deleteCard/rechargeCard/refundCard/cardTransaction/updateCardLimit/getCardList/getCardFlow/getProductCode 和 /getAccountBalance 没有业务请求体,可以提交空 Body。业务接口不支持直接提交明文 JSON。成功响应中的 data 为加密数据;参数、鉴权或解密失败时,错误响应为明文。appId + 接口 维度限流;/getAccessToken 按照 来源 IP + 请求 URL 维度限流。json.dumps(data) 序列化后进行 UTF-8 编码。Duplicate,不会返回首次请求结果,且当前没有统一的操作状态查询接口。flow_id 已确认为全局唯一,但 Request ID 与 flow_id 的映射仍需确认。除响应头回显及内部日志外,请确认 Request ID 是否写入 Card Flow、Transaction、Webhook 或财务明细。X-Client-Request-Id 适用于全部 API,包括开卡、充值、退款、修改限额和删卡接口。规则如下:-、_、.、:。AppId + ClientRequestId。ClientRequestId。Duplicate Client Request Id。Duplicate。/getCardList 或 /cardDetail/getCardFlow/cardTransactionCANCELLED 前已批准的 Authorization,冻结后是否仍可能形成 Settlement;如可能,资金如何扣取和查询。flow_id 或财务关联字段是什么。ACTIVE:激活。CANCELLED:冻结或停用,可以提交 ACTIVE 恢复。DELETED:删除,不可恢复。DELETED。因 CVV 或有效期连续输入错误导致的发卡行冻结可能表现为 CANCELLED,一般在 3 至 5 天后自动解除。/deleteCard 不可逆。8.219.3.65。如地址发生变更,将在对接群通知;客户完成配置变更后,VM 再执行相应切换。code = 0 表示业务请求成功,非 0 表示失败。200 OK,并返回以下 JSON,以兼容当前交易流水类 Webhook 的成功判定:{
"msg": "ok"
}msg 不为 ok,可能被视为投递失败,并触发重试或记录失败。request_id、callback_url、请求体、响应码、响应体、状态、失败原因及发送时间等信息。/cardTransaction、普通 Webhook、/getCardFlow(如适用)和财务明细?/getCardFlow 的 DECLINED 及其他失败状态是否一定为终局且没有资金或卡状态副作用,还是仍可能发生补偿、回滚或迟到成功。X-Client-Request-Id 的去重登记发生在 VM API 日志中间件,与后续业务表写入不属于同一个数据库事务,因此不能承诺其与业务事务原子一致。request_id,但它不是交易、资金或卡片事实的一一关联键。/getCardFlow 查询的是卡充值和卡余额退回账户等资金流水,不是消费交易生命周期流水。DECLINED 表示该笔资金流水处理失败,PENDING 表示处理中,COMPLETE 表示完成。DECLINED 可以作为该笔 Flow 的失败状态,但不能单独作为全链路最终资金结论。/cardTransaction.auth_time 是否采用目标产品固定时区?如未固定,如何获取每条记录的 Timezone 或 UTC Offset?Sandbox 中曾出现一笔 /getCardFlow 流水为 amount = -10、reality_amount = 0,但余额实际变化为 10,其最终账务语义是什么?/cardTransaction.auth_time 当前不返回 Timezone 或 UTC Offset 字段。记录时间来自各通道交易处理后的入库值。该笔异常流水的最终账务语义仍需结合通过受控渠道提供的原始流水进一步确认。flow_id 的 card refund,以及其与 /deleteCard 请求、财务明细之间是否存在稳定关联字段。700004。flow_id 及其稳定关联字段。/cardTransaction、Webhook 及财务明细中的字段、枚举和资金动作。/refundCard 是否支持将卡余额精确退至零/refundCard 时,amount 是否允许精确等于调用时卡片的全部 available_amount,并使退款后的卡余额精确为 0.00 USD。| 环境 | 需要确认的事项 |
|---|---|
| Sandbox | 是否允许 amount = available_amount,并使卡余额精确变为 0.00 USD。 |
| Production | 是否允许 amount = available_amount,并使卡余额精确变为 0.00 USD。 |
/refundCard 单次允许退回的准确上限,以及必须保留的准确最低余额。如两个环境的处理口径一致,请明确说明;如仅适用于特定产品或版本,请同时说明适用范围。| 产品 | 卡组织及发卡国家 | BIN | 最低保留余额 |
|---|---|---|---|
| VC110 | Visa,美国 | 43612077、43612078、43612079、43612080、43612081、40041641、40024200 | 0.10 USD |
| VC113 | Mastercard,美国 | 537872 | 0.10 USD |
| VC102 | Mastercard,美国 | 555671、544015、525962 | 可退至 0.00 USD |
/getCardFlow 中以某种 type 返回,还是在交易查询接口中以某种 transaction_type 返回,或者两个接口都会返回?/cardTransaction 返回,同一笔商户退款事件不会同时作为 /getCardFlow 流水返回。各类型的业务含义如下:/getCardFlow 中 type = "card recharge":表示平台账户资金转入卡片。/getCardFlow 中 type = "card refund":表示卡内余额退回平台账户。/cardTransaction 中 type = "Refund":表示商户消费退款。/cardTransaction 中 type = "Reversal":表示消费授权撤销。auth_id 或类似字段?金额字段的语义是什么,退款完成的终态标志是什么?type = "Refund" AND status = "COMPLETE"type 为 Refund。Webhook 载荷字段如下:| 参数名 | 类型 | 说明 |
|---|---|---|
auth_id | String | 交易 ID |
card_id | String | 卡 ID |
vm_card_id | String | VM 卡 ID |
auth_time | String | 交易授权时间 |
auth_amount | Double | 授权金额 |
auth_currency | String | 授权币种 |
settle_amount | Double | 结算金额 |
settle_currency | String | 结算币种 |
status | String | 交易状态 |
type | String | 交易类型 |
merchant_name | String | 交易商户 |
create_time | String | 创建时间 |
description | String | 交易详情或交易失败信息 |