Я действительно разочарован тем, что Stripe не позволяет получить клиента по ее адресу электронной почты (и позволяет нескольким клиентам с тем же адресом электронной почты).
Вот хак/обходной путь, который я использую в PHP.
Если вы можете оценить дату создания клиента, вы можете, возможно, сократить список клиентов вниз, а затем проверить каждый, чтобы узнать, соответствует ли он адресу электронной почты.
/**
* Because email address is not uniquely indexed in Stripe and Stripe does not allow retrieving a customer by email address, here is a function that allows searching for customers based on email address with creation date between two provided dates.
* @return array
*/
function getCustomerByEmailAddressAndDates($emailAddress, $dateGreaterThanOrEqual, $dateLessThanOrEqual) {
$customersResults = \Stripe\Customer::all(['created' => ['gte' => $dateGreaterThanOrEqual, 'lte' => $dateLessThanOrEqual]]);
$customers = $customersResults->data;
$filteredResults = [];
foreach ($customers as $customer) {
if ($emailAddress === $customer->email) {
$filteredResults[] = $customer;
}
}
return $filteredResults;
}
Вы могли бы затем просто использовать первый элемент в результирующем массиве (особенно, так как массив, вероятно, содержат только один пункт).
Кроме того, предел max равен 100, поэтому, если у вас более 100 клиентов, то поиск по электронной почте не гарантирует результат поиска клиента по электронной почте. – Greeso
Предположительно вы можете искать по электронной почте сейчас, но Stripe все еще тупо позволяет нескольким клиентам с тем же адресом электронной почты, поэтому нам нужно обрабатывать дубликаты в результатах: https://stackoverflow.com/a/40482496/470749 – Ryan