PAYATHON 2026

Linkpoint payment gateway 能否在未来日期扣款?

支付小周

结论

可以为未来日期的 invoice 安排扣款,但仅创建一张日期在未来的 invoice,通常不会让 LinkPoint 自动延迟扣款。

具体能否实现,取决于 LinkPoint 商户账户是否具备以下至少一种能力:

  • 定期付款或计划付款;
  • 通过 token 或客户付款档案安全保存银行卡信息;
  • 由你的系统在指定日期调用支付接口扣款。

如果账户不支持这些功能,就需要先取得用户授权,再通过符合 PCI DSS 要求的支付服务保存付款凭证,并在 invoice 到期时通过定时任务发起交易。不要把完整卡号或 CVV 直接存入自己的数据库。

为什么不能现在授权、以后再扣款

信用卡 authorization 通常有有效期。如果现在预授权,等到较晚的 invoice 日期再 capture,授权可能已经过期,交易也会因此失败。因此,“现在 authorize、未来 capture”只适用于网关和收单行允许的短期结算窗口,不能用来处理任意未来日期的扣款。

未来扣款一般按以下流程完成:

  1. 用户现在提交银行卡信息,并明确授权商户在未来扣款。
  2. 网关或合规的支付凭证服务返回 token。
  3. 系统保存 token、invoice ID 和计划扣款时间。
  4. 到期后,系统使用 token 发起一笔新的支付交易。

invoice 日期只是业务数据,本身不会触发网关交易。

实现步骤

1. 确认 LinkPoint 账户能力

LinkPoint 是较早期的支付产品名称。不同商户账户、接口及后续迁移平台支持的功能可能不同,需要向支付服务商或收单机构确认:

  • 是否支持 card tokenization 或 Card Vault;
  • 是否支持 recurring billing 或 scheduled payment;
  • token 能否用于 merchant-initiated transaction;
  • 首次保存银行卡时需要执行验证交易还是实际交易;
  • 后续扣款需要提交哪些授权或交易标识;
  • 是否支持 webhook,以及如何查询最终交易状态。

如果没有对应的接口文档,不要自行猜测 LinkPoint 的参数名称。

2. 获取持卡人的明确授权

结账页面需要清楚说明:

  • 扣款金额;
  • 预计扣款日期;
  • 商户名称;
  • 取消或修改授权的方式;
  • 扣款失败后的重试规则。

如果金额可能变化,还需要提前说明金额的计算方式和允许范围。

3. 保存 token,而不是银行卡资料

银行卡信息应直接提交到网关提供的托管页面、SDK 或安全表单。你的系统只保存类似以下内容:

invoice_id
customer_id
payment_token
charge_at
amount
currency
status

不要保存 CVV。即使卡号已经加密,自行保存完整卡号仍会大幅扩大 PCI DSS 的合规范围。

4. 在到期日触发扣款

以下伪代码不依赖特定 SDK。createCharge()、字段名称和返回结构都需要按照实际 LinkPoint 或其后续平台的接口文档替换。

<?php

$invoice = findDueInvoice($invoiceId);

if ($invoice === null || $invoice->status !== 'scheduled') {
    return;
}

$idempotencyKey = 'invoice-' . $invoice->id . '-payment-1';

$result = $gateway->createCharge([
    'payment_token'  => $invoice->payment_token,
    'amount'         => $invoice->amount,
    'currency'       => $invoice->currency,
    'invoice_id'     => $invoice->id,
    'idempotency_key'=> $idempotencyKey,
]);

if ($result->approved) {
    markInvoicePaid(
        $invoice->id,
        $result->transaction_id
    );
} else {
    markPaymentFailed(
        $invoice->id,
        $result->error_code
    );
}

定时任务可以定期查询已经到达扣款时间的 invoice:

SELECT *
FROM invoices
WHERE status = 'scheduled'
  AND charge_at <= CURRENT_TIMESTAMP;

每笔 invoice 都要使用稳定的幂等键,以免任务重跑或网络超时导致重复扣款。

如果 LinkPoint 支持计划付款

如果商户后台或 API 明确提供 scheduled payment/recurring billing,可以在用户提交银行卡时创建付款计划,由网关在指定日期执行。系统仍需保存网关返回的计划 ID,并通过 webhook 或交易查询确认扣款结果。创建计划后,不能直接把 invoice 标记为已支付。

计划付款能否只执行一次、是否允许指定任意日期,以及是否支持动态金额,都要以当前账户对应的接口文档为准。

注意事项

  • 不要用长期预授权代替未来扣款,除非支付服务商明确确认授权有效期能够覆盖这段时间。
  • 不要记录 CVV、完整卡号、磁道数据,也不要在请求日志中留下敏感信息。
  • 定时任务需要处理超时、拒付、余额不足、银行卡过期和 token 失效等情况。
  • 如果扣款结果不明确,应先查询原交易,不要马上再次提交。
  • webhook 必须验证签名,并能正确处理重复投递。
  • 金额应使用最小货币单位或精确的十进制定点类型,避免浮点误差。
  • 保存用户授权记录、扣款时间、交易 ID 和失败原因,便于审计和客服处理。
  • 如果当前 LinkPoint 账户不支持 tokenization 或计划付款,可以在到期前向客户发送付款链接,或改用支持安全保存付款凭证及未来商户发起扣款的支付平台。

备注:内容仅供参考。