条纹,是否可以通过电子邮件搜索客户?
我想知道在使用Stripe API时是否可以仅通过电子邮件地址搜索客户。条纹,是否可以通过电子邮件搜索客户?
的documentation仅表示通过搜索:
created,
ending_before,
limit,
starting_after
但不email
。
我想避免必须列出所有客户,以找出哪些客户具有相同的电子邮件地址。
Stripe现在允许您通过电子邮件过滤客户。
https://stripe.com/docs/api#list_customers
Map<String, Object> options = new HashMap<>();
options.put("email", email);
List<Customer> customers = Customer.list(options).getData();
if (customers.size() > 0) {
Customer customer = customers.get(0);
...
这一点很重要,以帮助确保您不会创建重复的客户。由于您无法在Stripe中创建客户以及在单个事务中将Stripe客户ID存储在系统中,因此您需要构建一些故障保险箱,以便在创建新客户之前检查特定客户是否存在。通过电子邮件搜索客户在这方面很重要。
您需要检索和存储条纹客户ID以及数据库中的其他客户详细信息。然后,您可以使用Stripe客户ID在数据库中搜索电子邮件地址并搜索retrieve the customer record from Stripe。
条纹API不支持任何通过电子邮件搜索的功能。他们在他们的仪表板中有这个搜索,但没有发布到API;从架构概念看来,似乎没有可能或计划从条带中将此包含在API中;其API中的每个对象都只能由创建时由stripe指定的特定对象id进行检索。也许,他们已经把它作为第三方应用程序开发者参与的范围!
所以,显而易见的解决方案是将要被搜索的未来在自己的数据库中的客户 - 为Simeon Visser说above
顺便说一句,对于一个解决办法,如果你已经使用了条纹API很多并且您现在需要搜索许多客户数据 - 唯一的方法是通过为您自己的目的构建数据库的'List all customers' functionality of API ;当然,你必须use pagination shortcut迭代通过整个列表这样做。
$customers = \Stripe\Customer::all(array("limit" => 3));
foreach ($customers->autoPagingIterator() as $customer) {
// Do something with $customer
}
既然你指定
文档仅表示通过创建,ending_before,限制和starting_after进行搜索,但没有 “电子邮件”。
你是对的,你不能使用电子邮件搜索。
如果你仍然希望这样做,你可以做的是获得所有客户的名单并筛选你使用email
得到的回复。
例如,在ruby
你可以按照如下做到这一点:
customers = Stripe::Customer.all
customer_i_need = customers.select do |c|
c.email == "[email protected]"
end
PS:条纹可以有一个电子邮件地址相关联的多个客户。
我真的很失望,Stripe不允许通过她的电子邮件地址检索客户(并允许多个客户使用相同的电子邮件地址)。
这是我在PHP中使用的一种黑客/解决方法。
如果您可以估算客户的创建日期,则可以缩小客户名单,然后检查每个客户名单以查看其是否与电子邮件地址匹配。你可能只需要在结果数组中使用第一项(特别是因为数组可能只包含1项)。
如果您知道这个日期你可能会存储和使用customerID – 2016-08-05 13:49:56
@MartijnScheffer我正在使用ClickFunnels,并且我正在给新买家发送电子邮件以管理她的订阅的详细信息。 ClickFunnels不公开客户ID。另外,我不想为1或2列信息创建和管理数据库。所以,尽管我希望Stripe能够处理这个问题,但我发现在这里我没有别的办法。 – Ryan 2016-08-06 21:00:58
我通过使用下面的API请求来做到这一点。这在条纹文档中不可用。通过使用浏览器开发工具在仪表板区域中追踪它们的搜索,我得到了这一点。
url :https://api.stripe.com/v1/search?query="+email+"&prefix=false",
method: GET
headers: {
"authorization": "Bearer Your_seceret Key",
"content-type": "application/x-www-form-urlencoded",
}
警告它使用一个未公开的API特定于仪表板。虽然它今天可能有效,但不能保证它将来会继续工作。
我认为这是值得看这个答案https://stackoverflow.com/questions/26767150/stripe-is-it-possible-to-search-a-customer-by-their-email#41743023因为它不使用一个黑客 – Greeso 2017-08-04 23:01:43
从Python lib'Requests'工作,没有'Content-Type'。 – 2017-11-01 16:21:35
您无法通过电子邮件直接搜索。
但是,您可以使用一点点来列出所有用户,并照看您的电子邮件。
这里是我的代码(PHP):
$last_customer = NULL;
$email = "[email protected]";
while (true) {
$customers = \Stripe\Customer::all(array("limit" => 100, "starting_after" => $last_customer));
foreach ($customers->autoPagingIterator() as $customer) {
if ($customer->email == $email) {
$customerIamLookingFor = $customer;
break 2;
}
}
if (!$customers->has_more) {
break;
}
$last_customer = end($customers->data);
}
这里是Async-等待路这种方法可用于所有第三方提供的NodeJS特别
const configuration = {
headers: {
"authorization": `Bearer ${Your stripe test key}`,
"content-type": "application/x-www-form-urlencoded",
}
};
const requestUrl = `https://api.stripe.com/v1/search?
query=${'email you are to use'} &prefix=false`
const emailPayment = await axios.get(requestUrl,
configuration)
公理是NPM点击用于创建http请求...非常酷并且简单易用
此外,最高限额为100,因此,如果您有超过100个客户,那么通过电子邮件搜索并不保证会导致通过电子邮件找到客户。 – Greeso 2017-04-11 15:30:29
假设您现在可以通过电子邮件进行搜索,但Stripe仍愚蠢地允许多个客户使用相同的电子邮件,因此我们需要处理结果中的重复项:https://stackoverflow.com/a/40482496/470749 – Ryan 2017-05-25 20:14:24