条纹,验证卡并仅在操作后对其进行收费

Posted

技术标签:

【中文标题】条纹,验证卡并仅在操作后对其进行收费【英文标题】:Stripe, verify card and only charge it after an action 【发布时间】:2015-09-27 04:59:00 【问题描述】:

我正在为一个网站启用支付功能。我使用 Stripe 作为提供者。我想知道如果 2 个条件为真,我如何从卡中扣款。当用户付款时,我想更改数据库中的一个值,然后从卡中扣款。但是如果数据库查询失败,我不想扣卡。同样,我不想查询卡是否无效。我需要两者,卡有效并且查询成功。我该怎么做?

这是充值代码

try 
$charge = \Stripe\Charge::create(array(
  "amount" => $amount, // amount in cents, again
  "currency" => "cad",
  "source" => $token,
  "description" => $description)
);
 catch(\Stripe\Error\Card $e) 
  // The card has been declined

【问题讨论】:

这叫做授权;基本支付功能。授权卡,履行订单,获取资金。 【参考方案1】:

您应该考虑向客户收费,而不是从卡上收费。 我的意思是:

1. Create a customer

$customer = \Stripe\Customer::create(array(
  "description" => "Customer for test@example.com",
  "source" => "tok_15gDQhLIVeeEqCzasrmEKuv8" // obtained with Stripe.js
));

2. Create a card

$card = $customer->sources->create(array("source" => "tok_15gDQhLIVeeEqCzasrmEKuv8"));

来自 Stripe API 参考:

来源 | external_account 必填 向客户添加卡时,参数名称为来源。该值可以是一个令牌,例如我们的 Stripe.js 返回的令牌,也可以是一个包含用户信用卡详细信息的字典。 Stripe 会自动验证卡片。

通过创建卡片,Stripe 会自动对其进行验证。因此,拥有一个有效的信用卡对象,您就可以在您的数据库上执行您想要的任何查询,如果成功,则向客户收费。

3. Charge

\Stripe\Charge::create(array(
    "amount" => 400,
    "currency" => "usd",
    "source" => "tok_15gDQhLIVeeEqCzasrmEKuv8", // obtained with Stripe.js,
    // "customer" => $cusomer->id // the customer created above
    "metadata" => array("order_id" => "6735")
));

收费时,你可以传递来源(使用 Stripe.js 获得的令牌)或我们刚刚创建的客户 ID。

别忘了try...catch一切。

【讨论】:

【参考方案2】:

好的,所以在阅读API之后,我发现可以通过将捕获参数设置为false来实现

像这样:

$charge = \Stripe\Charge::create(array(
  "amount" => $amount, // amount in cents, again
  "currency" => "cad",
  "source" => $token,
  "description" => $description,
  "capture" => false)
);

这将授权付款和卡,但不会产生费用。完成查询并确保成功后,您可以使用此功能向客户收费(捕获费用)

$ch = \Stripe\Charge::retrieve($charge->id);
$ch->capture();

【讨论】:

这在技术上是正确的,但请注意,至少在北美,预授权经常作为费用出现在客户的信用卡对帐单上,即使在退款时也是如此。这可能会增加支持负担,因为当客户看到他们认为不正确的收费时,他们会主动联系。

以上是关于条纹,验证卡并仅在操作后对其进行收费的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:错误:从上下文中删除托管对象后对其进行变异

Django Rest Framework:如何将数据传递给嵌套的序列化器并仅在自定义验证后创建对象

使用条纹 + 格子创建 ACH 收费 - 没有这样的令牌;在实时模式中存在类似的对象

仅在 IE 中编辑后对 textarea 样式的 Javascript 进行更新

如何从主选择页面隐藏离子标签并仅在选择模式标题上显示

jquery,在通过 id 找到控件后对其进行处理