Stripe, is het mogelijk om een ​​klant te zoeken op zijn e-mailadres?

Update:sinds ongeveer januari 2018 is het nu mogelijk om te zoeken met de parameter emailop Stripe. Zie het geaccepteerde antwoord.


Ik vroeg me af of het mogelijk was om een ​​klant alleen op zijn e-mailadres te zoeken bij gebruik van de Stripe API.

De documentatiegeeft alleen aan dat er wordt gezocht op:

created,
ending_before,
limit,
starting_after 

maar niet email.

Ik wil voorkomen dat ik al mijn klanten moet opsommen om te zien welke klanten hetzelfde e-mailadres hebben.


Antwoord 1, autoriteit 100%

Met Stripe kun je nu klanten filteren op 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);
    ...

Dit is belangrijk om ervoor te zorgen dat u geen dubbele klanten maakt. Omdat je het aanmaken van een klant in Stripe en de opslag van de Stripe-klant-ID in je systeem niet in één enkele transactie kunt stoppen, moet je een aantal failsafes inbouwen die controleren of een bepaalde klant bestaat voordat je een nieuwe aanmaakt. Klanten zoeken via e-mail is daarbij belangrijk.


Antwoord 2, autoriteit 58%

Ik deed dit door het volgende API-verzoek te gebruiken. Dit was niet beschikbaar in stripe-documenten. Ik heb dit gekregen door hun zoekopdracht in het dashboardgebied op te sporen met behulp van Browser Developer Tools.

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

WaarschuwingDit gebruikt een ongedocumenteerde API die specifiek is voor het dashboard. Hoewel het vandaag misschien werkt, is er geen garantie dat het ook in de toekomst zal blijven werken.


Antwoord 3, autoriteit 44%

U moet de Stripe-klant-ID samen met de andere klantgegevens in uw database ophalen en opslaan. U kunt vervolgens het e-mailadres in uw database zoeken en het klantrecord van Stripe ophalenmet behulp van de Stripe-klant-ID.


Antwoord 4, autoriteit 33%

UPDATE: Stripe staat nu zoeken via e-mail toe

https://stripe.com/docs/api/php#list_customers

/**
 * Remember that Stripe unfortunately allows multiple customers to have the same email address.
 * @see https://stackoverflow.com/a/38492724/470749
 * 
 * @param string $emailAddress
 * @return array
 */
public function getCustomersByEmailAddress($emailAddress) {
    try {
        $matchingCustomers = [];
        $lastResult = null;
        $hasMoreResults = true;
        while ($hasMoreResults) {
            $searchResults = \Stripe\Customer::all([
                        "email" => $emailAddress,
                        "limit" => 100,
                        "starting_after" => $lastResult
            ]);
            $hasMoreResults = $searchResults->has_more;
            foreach ($searchResults->autoPagingIterator() as $customer) {
                $matchingCustomers[] = $customer;
            }
            $lastResult = end($searchResults->data);
        }
        return $matchingCustomers;
    } catch (\Exception $e) {
        Log::error($e);
        return [];
    }
}

Antwoord 5, autoriteit 22%

U kunt niet rechtstreeks zoeken via e-mail.

U kunt echter een klein beetje hacken om alle gebruikers te vermelden en uw e-mail te beheren.

Hier is mijn 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);
}

Antwoord 6, autoriteit 18%

Je hoeft alleen deze regel te schrijven

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


Antwoord 7, autoriteit 4%

Sinds je hebt opgegeven dat

De documentatie geeft alleen aan om te zoeken op created, ending_before, limit en begins_after, maar geen “e-mail”.

Je hebt gelijk, je kunt niet zoeken met e-mails.

Als je dat nog steeds wilt doen, kun je in plaats daarvan een lijst van alle klanten krijgen en filteren op de reactie die je krijgt via email.

Bijvoorbeeld, in rubykun je het als volgt doen:

customers = Stripe::Customer.all
customer_i_need = customers.select do |c|
  c.email == "[email protected]"
end

PS: Stripe kan meerdere klanten hebben die aan één e-mailadres zijn gekoppeld.


Antwoord 8, autoriteit 4%

Houd er rekening mee bij het gebruik van Stripe API dat het hoofdlettergevoelige e-mail is (wat een beetje dom is). Hopelijk veranderen ze dit.


Antwoord 9, autoriteit 4%

In NodeJs kunnen we als volgt zoeken naar onze gewenste klant met hun e-mailadres:

const stripeSecretKey = process.env.STRIPE_SECRET_KEY;
const stripe = require('stripe')(stripeSecretKey);
const findCustomerByEmail = async (email) => {
  try {
    const customer = await stripe.customers.list( {
      email: email,
      limit: 1
  });
   if(customer.data.length !== 0){
    return customer.data[0].id;
   }
  } catch (e) {
   return (e);
 }
};

De daadwerkelijke aanroep van stripemaakt gebruik van de stripe.customers.list. Als de e-mail in ons stripe-account bestaat, bevat het geretourneerde object een element met de naam data.


Antwoord 10, autoriteit 2%

Stripe API ondersteunt geen enkele functie voor zoeken op e-mail. Ze hebben deze zoekopdracht in hun dashboard, maar hebben deze niet vrijgegeven aan API; vanuit het architectonisch concept blijkt er geen mogelijkheid of plan van stripe te zijn om dit in API op te nemen; elk object in hun API kan alleen worden opgehaald door dat specifieke object-ID dat door stripe is gegeven terwijl het is gemaakt. Misschien hebben ze het bewaard als een mogelijkheid voor de betrokkenheid van externe applicatieontwikkelaars!!

De voor de hand liggende oplossing is dus om de klanten die u in de toekomst doorzoekbaar wilt maken in uw eigen database op te slaan – als Simeon Visserheeft hierboven

gezegd

btw, voor een tijdelijke oplossing, als je de stripe API al veel hebt gebruikt en er zijn veel klantgegevens die je nu doorzoekbaar moet hebben – de enige manier is om door de ‘Laat de API-functionaliteit van alle klanten zien& bouw de database voor uw eigen doel; natuurlijk moet je de sneltoets voor pagineringgebruiken om de hele lijst hiervoor te doorlopen.

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

Antwoord 11

Hier is de Async-Await-manier. Deze methode kan worden gebruikt voor alle hits van derden met in het bijzonder 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)

Axiom is Npm voor het maken van http-verzoeken… erg cool en doodeenvoudig


Antwoord 12

Stripe biedt de mogelijkheid om meer dan één klant met hetzelfde e-mailadres te hebben. Dat gezegd hebbende, als je dat wilt, kun je een filter-hashparameter doorgeven aan de list-methode om een enkele klant of een reeks klanten te retourneren.

Stripe::Customer.list(email: user.email).data

Het bovenstaande retourneert een array van Stripe::Customerinstanties met het e-mailadres


Antwoord 13

Je kunt dit proberen. Het werkte voor mij. Onderstaande code retourneert een lege lijst als er geen gegevens worden gevonden die overeenkomen met e-mail.

    $stripe = new \Stripe\StripeClient("YOUR_STRIPE_SECRET");
     $customers = $stripe->customers->all(['email'=>'[email protected]',
        'limit' => 15,
      ]);

Antwoord 14

Stripe Search API Beta is nu beschikbaar

youtube-link

Other episodes