条纹,验证卡,仅在操作后充电

use*_*334 5 php payment paypal stripe-payments

我正在为网站启用付款。我使用 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
}
Run Code Online (Sandbox Code Playgroud)

via*_*nes 5

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

1. 创建客户

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

2.创建卡片

$card = $customer->sources->create(array("source" => "tok_15gDQhLIVeeEqCzasrmEKuv8"));
Run Code Online (Sandbox Code Playgroud)

来自 Stripe API 参考:

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

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

3. 充电

\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")
));
Run Code Online (Sandbox Code Playgroud)

计费时,可以传入source(通过Stripe.js获取的token),也可以传入我们刚刚创建的customer id。

也不要忘记try...catch一切。


use*_*334 5

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

像这样:

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

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

$ch = \Stripe\Charge::retrieve({$charge->id});
$ch->capture();
Run Code Online (Sandbox Code Playgroud)