Подтвердить что ты не робот

Stripe, можно ли искать клиента по электронной почте?

Обновление: Начиная с января 2018 года, теперь можно выполнять поиск с помощью параметра email в Stripe. Смотрите принятый ответ.


Мне было интересно, можно ли искать клиента только по его адресу электронной почты при использовании Stripe API.

документация указывает на поиск только по:

created,
ending_before,
limit,
starting_after 

но не email.

Я хотел бы избежать перечисления всех моих клиентов, чтобы найти, какие из них имеют одинаковые адреса электронной почты.

4b9b3361

Ответ 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-запросов... очень крутая и очень простая