条纹,是否可以通过电子邮件搜索客户?

问题描述:

我想知道在使用Stripe API时是否可以仅通过电子邮件地址搜索客户。条纹,是否可以通过电子邮件搜索客户?

documentation仅表示通过搜索:

created, 
ending_before, 
limit, 
starting_after 

但不email

我想避免必须列出所有客户,以找出哪些客户具有相同的电子邮件地址。

+0

此外,最高限额为100,因此,如果您有超过100个客户,那么通过电子邮件搜索并不保证会导致通过电子邮件找到客户。 – Greeso 2017-04-11 15:30:29

+1

假设您现在可以通过电子邮件进行搜索,但Stripe仍愚蠢地允许多个客户使用相同的电子邮件,因此我们需要处理结果中的重复项:https://stackoverflow.com/a/40482496/470749 – Ryan 2017-05-25 20:14:24

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 Visserabove

顺便说一句,对于一个解决办法,如果你已经使用了条纹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项)。

+0

如果您知道这个日期你可能会存储和使用customerID – 2016-08-05 13:49:56

+1

@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特定于仪表板。虽然它今天可能有效,但不能保证它将来会继续工作。

+0

我认为这是值得看这个答案https://stackoverflow.com/questions/26767150/stripe-is-it-possible-to-search-a-customer-by-their-email#41743023因为它不使用一个黑客 – Greeso 2017-08-04 23:01:43

+1

从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); 
} 
+1

完美,并感谢很多:)。看起来这是你唯一的答案,我认为这是这个问题的最佳答案。 – Greeso 2017-08-04 22:57:38

+0

我真的很讨厌用break语句的无限循环......但它工作。 – 2017-10-27 11:01:44

+0

谢谢@Greeso! – Julien 2018-03-06 17:10:54

这里是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请求...非常酷并且简单易用