信用卡
Quick Reference
What接受信用卡支付
Why分期付款、3DS(3D Secure 验证)与反欺诈——一次 API(应用程序编程接口)调用
Reading Time10 分钟
Difficulty初级
Prerequisites身份验证 → 环境配置
为何通过 A55 接受卡支付
| 没有 A55 | 使用 A55 |
|---|---|
| 需分别对接每个收单机构 | 单一端点(endpoint)覆盖 8 种卡品牌与 29 家收单机构 |
| 自建 3DS 与反欺诈流水线 | 内置 3DS 2.2 与风控引擎——一个字段即可开关 |
| 按发卡行自行计算分期 | 发送 installment_count;A55 管理拆分与结算 |
| 在多个控制台监控拒付 | 从授权到拒付结案的统一 Webhook(网络钩子)生命周期 |
核心概念
| 概念 | 作用 |
|---|---|
| 3DS / 反欺诈 | 3-D Secure 验证持卡人;AF(反欺诈,Anti-Fraud)在收单机构前进行风险评分。 |
| 授权 / 扣款 | 授权预留或批准资金;capture: true 一步完成,capture: false 为预授权。 |
| 分期付款 / 退款 / 拒付 | installment_count 驱动拆分;退款退回资金;拒付为发卡行争议处理。 |
品牌与分期付款
| 卡段 | 分期付款 |
|---|---|
| Visa、Mastercard、Amex、Elo、Aura | 是 |
| Diners、Discover | 否 |
| JCB | 不支持 |
分期说明
installment_count 为 1 表示一次性付清;2–6 与 7–12 为按月拆分(较长方案可能适用更高费率)。规则遵循您与收单机构的协议。
交易流程
创建信用卡收费
数据安全
A55 全链路通过 PCI DSS(支付卡行业数据安全标准)一级认证。卡数据在我们认证的基础设施中安全传输和处理。如需更简化的集成方案——完全不在您的服务器上处理卡数据——请参阅 SDK(软件开发工具包)集成 或 Checkout Page。
- cURL
- Python
- JavaScript
curl -X POST https://core-manager.a55.tech/api/v1/bank/wallet/charge/ \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"wallet_uuid": "00000000-0000-0000-0000-000000000000",
"merchant_id": "11111111-1111-1111-1111-111111111111",
"payer_name": "李明",
"payer_email": "liming@example.com",
"payer_tax_id": "12345678901",
"payer_cell_phone": "+5511999999999",
"items": [{"name":"商品","quantity":1,"total_amount":100,"unit_amount":100,"sku":"SKU-001","code":"P001"}],
"payer_address": {"street":"Sample St","address_number":"123","complement":"","neighborhood":"Centro","city":"São Paulo","state":"SP","postal_code":"01000-000","country":"BR"},
"currency": "BRL",
"installment_value": 100,
"installment_count": 1,
"due_date": "2026-12-31",
"description": "订单 #1234",
"type_charge": "credit_card",
"card_name": "李明",
"card_number": "4111111111111111",
"card_expiry_month": "12",
"card_expiry_year": "2030",
"card_cvv": "123",
"capture": true,
"threeds_authentication": false,
"webhook_url": "https://yoursite.com/webhook",
"redirect_url": "https://yoursite.com/return"
}'
import requests
charge = requests.post(
"https://core-manager.a55.tech/api/v1/bank/wallet/charge/",
headers={"Authorization": f"Bearer {access_token}", "Content-Type": "application/json"},
json={
"wallet_uuid": "00000000-0000-0000-0000-000000000000",
"merchant_id": "11111111-1111-1111-1111-111111111111",
"payer_name": "李明",
"payer_email": "liming@example.com",
"payer_tax_id": "12345678901",
"payer_cell_phone": "+5511999999999",
"items": [{"name": "商品", "quantity": 1, "total_amount": 100, "unit_amount": 100, "sku": "SKU-001", "code": "P001"}],
"payer_address": {"street": "Sample St", "address_number": "123", "complement": "", "neighborhood": "Centro", "city": "São Paulo", "state": "SP", "postal_code": "01000-000", "country": "BR"},
"currency": "BRL",
"installment_value": 100,
"installment_count": 1,
"due_date": "2026-12-31",
"description": "订单 #1234",
"type_charge": "credit_card",
"card_name": "李明",
"card_number": "4111111111111111",
"card_expiry_month": "12",
"card_expiry_year": "2030",
"card_cvv": "123",
"capture": True,
"threeds_authentication": False,
"webhook_url": "https://yoursite.com/webhook",
"redirect_url": "https://yoursite.com/return",
},
)
charge.raise_for_status()
print(charge.json())
const response = await fetch(
"https://core-manager.a55.tech/api/v1/bank/wallet/charge/",
{
method: "POST",
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
wallet_uuid: "00000000-0000-0000-0000-000000000000",
merchant_id: "11111111-1111-1111-1111-111111111111",
payer_name: "李明",
payer_email: "liming@example.com",
payer_tax_id: "12345678901",
payer_cell_phone: "+5511999999999",
items: [{ name: "商品", quantity: 1, total_amount: 100, unit_amount: 100, sku: "SKU-001", code: "P001" }],
payer_address: { street: "Sample St", address_number: "123", complement: "", neighborhood: "Centro", city: "São Paulo", state: "SP", postal_code: "01000-000", country: "BR" },
currency: "BRL",
installment_value: 100,
installment_count: 1,
due_date: "2026-12-31",
description: "订单 #1234",
type_charge: "credit_card",
card_name: "李明",
card_number: "4111111111111111",
card_expiry_month: "12",
card_expiry_year: "2030",
card_cvv: "123",
capture: true,
threeds_authentication: false,
webhook_url: "https://yoursite.com/webhook",
redirect_url: "https://yoursite.com/return",
}),
}
);
if (!response.ok) throw new Error(`请求失败(HTTP ${response.status}):${await response.text()}`);
console.log(await response.json());
3DS 挂起状态
若 threeds_authentication: true 且发卡行要求 challenge,响应会返回 status: "pending" 与 url_3ds。最终状态通过 webhook 送达。
响应示例
{
"charge_uuid": "51dcca6e-7310-4b73-a94c-90835408f2ff",
"local_currency": 100,
"currency": "BRL",
"type": "credit_card",
"status": "captured",
"installment_count": 1,
"installments": [{ "installment_number": 1, "status": "captured", "local_currency": 100, "currency": "BRL" }]
}
状态生命周期
| 状态 | 含义 |
|---|---|
pending | 3DS 或异步步骤进行中 |
authorized | 授权成功(capture: false) |
captured | 扣款确认(capture: true) |
paid | 已确认待结算 |
failed | 拒绝或处理失败 |
cancelled | 完成前已作废 |
refunded | 已处理退款 |
chargeback | 发卡行争议处理中 |
跨境
跨境交易请确认货币、卡品牌与支付方式可用性。请联系支持以启用所需配置。