Stripe 让多个客户使用相同的电子邮件地址
Posted
技术标签:
【中文标题】Stripe 让多个客户使用相同的电子邮件地址【英文标题】:Stripe making multiple customers with same email address 【发布时间】:2014-12-11 03:16:25 【问题描述】:我使用 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();
?>
【问题讨论】:
你能发布一些你的代码吗? 当然,我刚刚添加了charge.php 假设您现在可以通过电子邮件进行搜索,但 Stripe 仍然愚蠢地允许多个客户使用同一电子邮件,因此我们需要处理结果中的重复项:***.com/a/40482496/470749 【参考方案1】:您需要将电子邮件地址和 Stripe 客户 ID 之间的关系存储在数据库中。我通过查看Stripe's API on Customers 确定了这一点。
首先,在创建新客户时,每个字段都是可选的。这让我相信,每次您 POST
到 /v1/customers
时,它都会“[创建]一个新的客户对象。”
此外,在检索客户时,唯一可用的字段是 id
。这让我相信您无法根据电子邮件地址或其他字段检索客户。
如果您不能将此信息存储在数据库中,您始终可以使用GET /v1/customers
列出所有客户。这将要求您分页并检查所有客户对象,直到找到具有匹配电子邮件地址的对象。您可以看到,如果每次尝试创建客户时都这样做会非常低效。
【讨论】:
您是否通过 webhook 存储客户信息并将其存储在您自己的数据库中? 你可能会使用 webhook;但是,我个人会在您创建客户对象后立即保存信息(在您的代码中,$customer = Stripe_Customer::create(array(...));
)。这将返回客户对象,您可以从中检索 Stripe ID 以在您的数据库中与提交的电子邮件地址相关联。
在提交过程中将令牌 ID 从条带保存到 mysql 或任何类型的数据库是否安全?或者只是将客户 ID 保存到 mysql?
卡令牌是安全的(这就是为什么它是由 Stripe 创建的,所以“你的”服务器不需要保存/处理任何实际的信用卡数据)但它不值得保存,因为它逻辑上应该依附于客户。保存客户和卡令牌毫无意义。
让我用data from Stripe 增强最后一条评论:"请注意,令牌不应该被存储或使用多次——为了存储这些详细信息以供以后使用,您应该创建 Customer或收件人对象”(不一定是“不安全的”,但不是“打算”存储的)。【参考方案2】:
您可以列出给定电子邮件地址的所有用户。 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);
);
【讨论】:
all
到 10
的列表有默认限制,100
有一个上限。这实际上是行不通的。以上是关于Stripe 让多个客户使用相同的电子邮件地址的主要内容,如果未能解决你的问题,请参考以下文章