Jestem naprawdę rozczarowany, że Stripe nie pozwala na odzyskanie klienta przez jej adres e-mail (i pozwala wielu klientom z tym samym adresem e-mail).
Oto hack/obejście, którego używam w PHP.
Jeśli możesz oszacować datę utworzenia klienta, prawdopodobnie możesz zawęzić listę klientów, a następnie sprawdzić, czy pasuje do adresu e-mail.
/**
* 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;
}
Prawdopodobnie wystarczy użyć pierwszego elementu w wynikowej tablicy (zwłaszcza, że tablica będzie prawdopodobnie zawierała tylko 1 element).
Maksymalny limit wynosi 100, więc jeśli masz więcej niż 100 klientów, wyszukiwanie przez e-mail nie gwarantuje znalezienia klienta przez e-mail. – Greeso
Podobno można wyszukiwać przez e-mail teraz, ale Stripe nadal głupio pozwala wielu klientom z tym samym e-mailem, więc musimy obsługiwać duplikaty w wynikach: https://stackoverflow.com/a/40482496/470749 – Ryan