哪种 Payment gateway 的交易手续费最低?
结论
没有哪一种 Payment gateway 能保证在所有情况下手续费最低。对于单笔 $3 到 $5 的小额支付,成本往往主要取决于每笔固定手续费,而不是百分比费率。
计算方式如下:
[ 手续费 = 交易金额 \times 百分比费率 + 每笔固定费用 ]
假设费率是 2.9% + $0.30:
- 一笔
$3的交易,手续费约为$0.39,约占交易额的13% - 一笔
$5的交易,手续费约为$0.45,约占交易额的9%
选择服务商时,可以优先考虑以下方案:
- 支持 micropayment pricing、低固定手续费或纯比例计费。
- 如果业务允许,先累计多笔消费,再合并扣款。
- 确认服务商支持
authorize now, capture later。这种模式通常称为manual capture、delayed capture,或auth and capture分离。 - 除了 Payment gateway 的报价,还要计算收单、卡组织、跨境、退款和拒付费用。
哪家服务商最便宜,取决于公司所在国家、客户银行卡地区、月交易量、卡种和商户类别。费率也会调整。缺少这些信息和最新报价时,无法严谨地指定唯一服务商。
延迟付款应如何实现
一般可以按以下流程处理:
- 客户提交银行卡信息。
- 支付平台创建一笔仅授权、暂不扣款的交易。
- 发卡行冻结相应额度。
- 业务在几天后确认履约。
- 在授权有效期内执行 capture。
- 如果交易取消,撤销授权,而不是发起退款。
创建授权时,接口通常需要传入类似 capture_method=manual 的参数。下面是与服务商无关的示意代码,实际字段名应以所选平台的 API 文档为准:
const authorization = await paymentGateway.createPayment({
amount: 500,
currency: "USD",
paymentMethod: paymentMethodId,
captureMethod: "manual"
});
// 保存授权标识和到期时间
await database.orders.update(orderId, {
paymentAuthorizationId: authorization.id,
authorizationExpiresAt: authorization.expiresAt
});
确认可以扣款后,再执行 capture:
await paymentGateway.capturePayment(
authorization.id,
{
amount: 500
}
);
订单取消时,释放授权:
await paymentGateway.cancelPayment(authorization.id);
金额通常以最小货币单位表示。例如,500 美分就是 $5.00。保存金额时不要使用浮点数。
如何比较实际成本
先向候选服务商索取符合自身业务情况的报价,再根据预期交易结构计算有效费率:
[ 有效费率 = \frac{ 成功交易手续费 + 网关费 + 月费 + 退款费 + 拒付损失 }{ 成功交易总额 } ]
可以用简单脚本比较不同报价:
providers = [
{"name": "Provider A", "rate": 0.029, "fixed": 0.30},
{"name": "Provider B", "rate": 0.050, "fixed": 0.05},
]
amounts = [3.00, 4.00, 5.00]
for amount in amounts:
print(f"${amount:.2f}")
for provider in providers:
fee = amount * provider["rate"] + provider["fixed"]
effective_rate = fee / amount
print(
provider["name"],
f"fee=${fee:.2f}",
f"effective={effective_rate:.1%}"
)
这些费率只用于演示计算,不代表任何服务商的实际报价。成本模型中还应包括:
- 月租费和最低消费
- gateway fee 与 processor fee
- 授权费、capture 费和失败交易费
- 国际卡及货币转换附加费
- 退款时是否退还原交易手续费
- 拒付费
- 延迟 capture 是否加价
- 提现、结算和储备金成本
更适合小额支付的方案
如果客户会连续产生多笔 $3 到 $5 的消费,合并扣款通常比寻找略低的逐笔费率更有效。例如,五笔 $3 交易分别扣款,要支付五次固定费用;合并为一笔 $15 交易,只需支付一次固定费用。
常见方式有:
- 预充值余额
- 达到金额阈值后统一扣款
- 按日或按周汇总账单
- 月度订阅加超额用量结算
不要反复授权同一张卡后长期等待扣款。如果需要保存银行卡以便以后扣款,应使用支付平台提供的 tokenization 或 vaulted payment method,并取得符合业务所在地法规和卡组织规则的客户授权。服务器不应自行保存完整卡号或 CVV。
延迟一周扣款的注意事项
银行卡授权不能无限期保留。有效期由卡组织、卡种、交易类型、发卡行和支付服务商共同决定,不能直接假定为七天。
实施前需要确认:
- 当前商户类别能否保留授权一周。
- API 是否返回准确的授权到期时间。
- 到期前没有 capture 时,授权会自动取消,还是需要主动撤销。
- 延迟期间能否调整最终金额。
- 授权成功只表示额度暂时可用,并不保证最终付款。
- capture 失败后能否重新授权,是否需要客户再次确认。
- 是否支持部分 capture、增量授权和多次 capture。
系统应保存授权到期时间,并在到期前进行处理:
if (Date.now() >= authorizationExpiresAt - safetyWindowMs) {
await reauthorizeOrRequestNewPaymentMethod(orderId);
}
重新授权可能触发客户验证,例如 3-D Secure,不能假定后台操作一定会成功。
最终选择服务商时,应将“支持至少所需天数的 manual capture”设为硬性条件,再比较符合条件的服务商处理 $3、$4 和 $5 交易时的总成本。对这类小额交易来说,降低或取消每笔固定费用,通常比把百分比费率降低零点几个百分点更有用。
备注:内容仅供参考。
