我用php检查了条纹。它创造了客户并为他们收费。我想创建一个捐赠表单,如果同一个客户回来并给出相同的电子邮件地址,Stripe不会创建另一个客户,但会向现有客户收取额外费用。这可能吗?或者结帐总是创建具有新客户ID的新客户?
这是我的charge.php
<?php
require_once('config.php');
$token = $_POST['stripeToken'];
if($_POST) {
$error = NULL;
try{
if(!isset($_POST['stripeToken']))
throw new Exception("The Stripe Token was not generated correctly");
$customer = Stripe_Customer::create(array(
'card' => $token,
'email' => $_POST['stripeEmail'],
'description' => 'Thrive General Donor'
));
$charge = Stripe_Charge::create(array(
'customer' => $customer->id,
'amount' => $_POST['donationAmount'] * 100,
'currency' => 'usd'
));
}
catch(Exception $e) {
$eror = $e->getMessage();
}
}
?>
答案 0 :(得分:9)
您需要在电子邮件地址和条带客户ID之间存储数据库中的关系。我通过查看Stripe's API on Customers确定了这一点。
首先,在创建新客户时,每个字段都是可选的。这使我相信,只要您POST
到/v1/customers
,它就会[创建]一个新的客户对象。&#34;
此外,在检索客户时,唯一可用的字段是id
。这使我相信您无法根据电子邮件地址或其他字段检索客户。
如果无法将此信息存储在数据库中,您始终可以使用GET /v1/customers
列出所有客户。这将要求您分页并检查所有客户对象,直到找到具有匹配电子邮件地址的客户对象。如果每次尝试创建客户时都可以看到这样做效率很低。
答案 1 :(得分:1)
您可以列出给定电子邮件地址的所有用户。 https://stripe.com/docs/api#list_customers
在 JavaScript 中,您可以执行以下操作:
const customerAlreadyExists = (email)=>{
return doGet(email)
.then(response => response.data.length > 0);
}
const doGet = (url: string)=>{
return fetch('https://api.stripe.com/v1/customers' + '?email=' + email, {
method: 'GET',
headers: {
Accept: 'application/json',
Authorization: 'Bearer ' + STRIPE_API_KEY
}
}).then(function (response) {
return response.json();
}).catch(function (error) {
console.error('Error:', error);
});
}