Stripe, можно ли искать клиента по электронной почте?
Обновление: Начиная с января 2018 года, теперь можно выполнять поиск с помощью параметра email
в Stripe. Смотрите принятый ответ.
Мне было интересно, можно ли искать клиента только по его адресу электронной почты при использовании Stripe API.
документация указывает на поиск только по:
created,
ending_before,
limit,
starting_after
но не email
.
Я хотел бы избежать перечисления всех моих клиентов, чтобы найти, какие из них имеют одинаковые адреса электронной почты.
Ответы
Ответ 1
Теперь 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 в своей системе в рамках одной транзакции, вам необходимо встроить некоторые отказоустойчивые сейфы, которые проверяют, существует ли конкретный клиент, прежде чем создавать нового. Поиск клиентов по электронной почте важен в этом отношении.
Ответ 2
Я сделал это, используя следующий запрос API. Это не было доступно в stripe docs.I получил это путем отслеживания их поиска в области панели управления с помощью инструментов разработчика браузера.
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, специфичный для панели управления. Хотя он может работать сегодня, нет гарантии, что он будет продолжать работать в будущем.
Ответ 3
Вам необходимо получить и сохранить идентификатор клиента Stripe вместе с другими данными о клиенте в вашей базе данных. Затем вы можете найти адрес электронной почты в своей базе данных и получить запись клиента из Stripe с помощью идентификатора клиента Stripe.
Ответ 4
ОБНОВЛЕНИЕ: Stripe теперь позволяет искать по электронной почте
https://stripe.com/docs/api/php#list_customers
/**
* Remember that Stripe unfortunately allows multiple customers to have the same email address.
* If we ever have more customers with a matching email address than can be returned by a single 'page' of the API request, we'll need a more complicated approach.
* @see https://stackoverflow.com/a/38492724/470749
* @param string $emailAddress
* @return array
*/
public function getCustomersByEmailAddress($emailAddress) {
try {
$response = \Stripe\Customer::all(["limit" => 100, "email" => $emailAddress]);
return $response->data;
} catch (\Exception $e) {
Log::error($e);
return [];
}
}
Ответ 5
Вы не можете напрямую искать по электронной почте.
Однако вы можете немного взломать список всех пользователей и следить за своей электронной почтой.
Здесь мой код (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);
}
Ответ 6
Поскольку вы указали, что
Документация указывает только на поиск по созданному, завершающемуся, лимиту и началу_после, но без "электронной почты".
Вы правы, вы не можете выполнять поиск по электронной почте.
Если вы все еще хотите это сделать, то вместо этого вы можете получить список всех клиентов и фильтровать ответ, который вы используете с помощью email
.
Например, в ruby
вы можете сделать это следующим образом:
customers = Stripe::Customer.all
customer_i_need = customers.select do |c|
c.email == "[email protected]"
end
PS: Stripe может иметь несколько клиентов, связанных с одним адресом электронной почты.
Ответ 7
Вам нужно только написать эту строку
\Stripe\Customer::all(["email" => "YourDesiredEmail"]);
Ответ 8
Stripe API не поддерживает функцию поиска по электронной почте. У них есть этот поиск в панели инструментов, но он не был выпущен для API; из архитектурной концепции кажется, что нет возможности или плана из полосы, чтобы включить это в API; каждый объект в их API извлекается только этим конкретным идентификатором объектов, заданным полосой при его создании. Возможно, они сохранили его как возможность участия сторонних разработчиков приложений.
Итак, очевидное решение заключается в том, чтобы хранить клиентов в вашей собственной базе данных, которые вы хотите найти в будущем, - поскольку Simeon Visser сказал выше
btw, для обходного пути, если вы уже много раз использовали API-интерфейс полосы, и есть много данных клиента, которые вам теперь нужно искать - единственный способ - пройти через 'Перечислить функциональность API всех клиентов и создать базу данных для вашей собственной цели; конечно, вы должны использовать ярлык с разбивкой по страницам, чтобы перебирать весь список для этого.
$customers = \Stripe\Customer::all(array("limit" => 3));
foreach ($customers->autoPagingIterator() as $customer) {
// Do something with $customer
}
Ответ 9
Вот способ ожидания 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-запросов... очень крутая и очень простая