我正致力于为网站启用付款。我正在使用Stripe作为提供者。如果有两个条件,我想知道如何为卡充电。当用户付费时,我想更改数据库中的值,并为卡充电。但是如果数据库查询失败,我不想收取卡。同样,我不想查询该卡是否无效。我需要两个,卡有效,查询成功。我该怎么做?
以下是为卡充电的代码
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
}
答案 0 :(得分:4)
您应考虑为客户收费,而不是为卡充电。 我的意思是:
<强> 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 REQUIRED 强> 向客户添加卡时,参数名称为source。该值可以是令牌,如我们的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
一切。
答案 1 :(得分:4)
好的,所以在阅读了API之后,我发现通过将capture参数设置为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();