web-dev-qa-db-fra.com

Stripe, est-il possible de rechercher un client par son email?

Mise à jour: Depuis janvier 2018 environ, il est désormais possible de rechercher en utilisant le paramètre email sur Stripe. Voir réponse acceptée .


Je me demandais s'il était possible de rechercher un client uniquement par son adresse e-mail lors de l'utilisation de l'API Stripe.

Le documentation indique uniquement la recherche par:

created,
ending_before,
limit,
starting_after 

mais pas email.

Je voudrais éviter d'avoir à répertorier tous mes clients pour trouver ceux qui ont les mêmes adresses e-mail.

42
Cyril N.

Stripe vous permet désormais de filtrer les clients par e-mail.

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);
    ...

Ceci est important pour vous assurer de ne pas créer de clients en double. Parce que vous ne pouvez pas mettre la création d'un client dans Stripe et le stockage de l'ID client Stripe dans votre système dans une seule transaction, vous devez créer des coffres-forts qui vérifient si un client particulier existe avant d'en créer un nouveau. La recherche de clients par e-mail est importante à cet égard.

17
Russ Jackson

Je l'ai fait en utilisant la demande d'API suivante. Ce n'était pas disponible dans les documents Stripe.J'ai obtenu cela en suivant leur recherche dans la zone du tableau de bord à l'aide des outils de développement du navigateur.

    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",
    }

Warning Ceci utilise une API non documentée spécifique au tableau de bord. Bien que cela puisse fonctionner aujourd'hui, rien ne garantit qu'il continuera de fonctionner à l'avenir.

25
Sufyan Ahmad

Vous devez récupérer et stocker l'ID client Stripe ainsi que les autres détails client dans votre base de données. Vous pouvez ensuite rechercher l'adresse e-mail dans votre base de données et récupérer l'enregistrement client de Stripe en utilisant l'ID client Stripe.

20
Simeon Visser

Vous ne pouvez pas rechercher directement par e-mail.

Cependant, vous pouvez pirater un peu pour répertorier tous les utilisateurs et prendre soin de votre courrier électronique.

Voici mon code (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);
}
8
Julien

MISE À JOUR: Stripe permet désormais la recherche par e-mail

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 [];
    }
}
7
Ryan

Puisque vous avez spécifié que

La documentation indique uniquement de rechercher par créé, end_before, limit et starting_after, mais sans "e-mail".

Vous avez raison, vous ne pouvez pas effectuer de recherche par e-mail.

Si vous souhaitez toujours le faire, vous pouvez plutôt obtenir une liste de tous les clients et filtrer la réponse que vous obtenez en utilisant email.

Par exemple, dans Ruby, vous pouvez le faire comme suit:

customers = Stripe::Customer.all

customer_i_need = customers.select do |c|
  c.email == "[email protected]"
end

PS: Stripe peut avoir plusieurs clients associés à une seule adresse e-mail.

2
Sagar Ranglani

Il vous suffit d'écrire cette ligne

\Stripe\Customer::all(["email" => "YourDesiredEmail"]);

1

L'API Stripe ne prend en charge aucune fonction de recherche par e-mail. Ils ont cette recherche dans leur tableau de bord mais n'en ont pas publié à l'API; d'après le concept architectural, il semble qu'il n'y ait aucune possibilité ni aucun plan de stripe pour l'inclure dans l'API; chaque objet de leur API n'est récupérable que par cet identifiant d'objets spécifique donné par stripe lors de sa création. Peut-être, ils l'ont gardé comme un champ d'application pour les développeurs d'applications tierces !!

Donc, la solution évidente est de stocker les clients dans votre propre base de données que vous souhaitez pouvoir rechercher à l'avenir - comme Simeon Visser l'a dit ci-dessus

btw, pour une solution de contournement, si vous avez déjà beaucoup utilisé l'API stripe et qu'il existe de nombreuses données client dont vous avez maintenant besoin d'être consultable - le seul moyen est de passer par 'Liste de tous les clients' fonctionnalité de l'API & construire la base de données pour votre propre but; bien sûr, vous devez tiliser le raccourci de pagination pour parcourir toute la liste pour ce faire.

$customers = \Stripe\Customer::all(array("limit" => 3));
foreach ($customers->autoPagingIterator() as $customer) {
  // Do something with $customer
}
1
Arif

Voici la méthode Async- Await Way Cette méthode peut être utilisée pour tous les hits tiers avec Nodejs en particulier

    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)

Axiom est Npm pour créer des requêtes http ... très cool et très simple

0
Chandan Sharma