BlueSnap Payment API 如何仅验证银行卡而不扣款?
结论
可以。验证银行卡时,通常可以使用零金额预授权(Zero-Amount Authorization):创建一笔 AUTH_ONLY 交易,并将 amount 设为 0。这类请求只用于向发卡行验证卡片信息,不会实际扣款。
能否使用该功能,取决于 BlueSnap 账户配置、卡组织、发卡行和支付处理通道。接入前,请先向 BlueSnap 确认当前商户账户是否已启用零金额授权。
请求方式
向 BlueSnap 交易接口发送请求:
POST /services/2/transactions
核心参数如下:
{
"cardTransactionType": "AUTH_ONLY",
"amount": 0,
"currency": "USD"
}
参数说明:
- 将
cardTransactionType设为AUTH_ONLY,以免直接捕获款项。 - 将
amount设为0,表示执行零金额验证。 - 请求仍需提供
currency,并使用商户账户和支付通道支持的币种。 - 卡号、有效期和持卡人信息等字段,按普通银行卡交易请求填写。
cURL 示例
下面的示例使用 BlueSnap Sandbox 地址。请将认证信息和银行卡数据替换为测试环境中的有效值:
curl --request POST \
--url https://sandbox.bluesnap.com/services/2/transactions \
--user "${BLUESNAP_USERNAME}:${BLUESNAP_PASSWORD}" \
--header "Content-Type: application/json" \
--data '{
"cardTransactionType": "AUTH_ONLY",
"amount": 0,
"currency": "USD",
"cardHolderInfo": {
"firstName": "Jane",
"lastName": "Doe"
},
"creditCard": {
"cardNumber": "SANDBOX_TEST_CARD_NUMBER",
"securityCode": "123",
"expirationMonth": "12",
"expirationYear": "2030"
}
}'
在生产环境中,应改用 BlueSnap 提供的生产 API 地址。不要在源代码、日志或错误信息中保存用户名、密码、完整卡号或安全码。
如何判断验证结果
判断验证是否成功时,需要查看 API 响应中的交易状态、处理状态和错误代码,不能只看 HTTP 状态码。
零金额授权成功通常表示发卡行接受了这次验证请求,但不代表:
- 这张卡之后一定能完成实际付款;
- 卡内有足够的余额或信用额度;
- 后续交易不会被风控系统拒绝;
- 地址验证或安全码检查全部通过。
如果业务还需要校验 CVV 或 AVS,应分别检查响应中的对应结果,不能把授权请求被接受直接视为所有验证项都已通过。
注意事项
有些发卡行或处理通道不支持零金额授权。如果 amount: 0 被拒绝,请依次确认:
- BlueSnap 商户账户是否已启用零金额授权;
- 当前卡品牌、币种和收单通道是否支持该功能;
- 请求是否包含该通道要求的持卡人信息或账单地址;
- 返回结果是银行卡拒绝,还是 BlueSnap 参数或账户配置错误。
不要擅自改用小额实际扣款来模拟验证。即使之后退款或撤销,这笔交易也可能在用户账单上留下临时授权记录,还可能产生费用或合规问题。如果无法使用零金额授权,应请 BlueSnap 确认可用的官方替代流程。
服务器直接接收完整卡号会扩大 PCI DSS 合规范围。实际接入时,应优先考虑 BlueSnap 提供的托管字段、支付表单或令牌化方案,再用生成的支付凭据完成验证。
备注:内容仅供参考。