条纹使多个客户使用相同的电子邮件地址

时间:2014-10-15 21:57:13

标签: php stripe-payments

我用php检查了条纹。它创造了客户并为他们收费。我想创建一个捐赠表单,如果同一个客户回来并给出相同的电子邮件地址,Stripe不会创建另一个客户,但会向现有客户收取额外费用。这可能吗?或者结帐总是创建具有新客户ID的新客户?

这是我的charge.php

<?php
    require_once('config.php');

    $token  = $_POST['stripeToken'];

    if($_POST) {
      $error = NULL;

      try{
        if(!isset($_POST['stripeToken']))
          throw new Exception("The Stripe Token was not generated correctly");
            $customer = Stripe_Customer::create(array(
              'card'  => $token,
              'email' =>  $_POST['stripeEmail'],
              'description' => 'Thrive General Donor'
            ));

            $charge = Stripe_Charge::create(array(
              'customer' => $customer->id,
              'amount'   => $_POST['donationAmount'] * 100,
              'currency' => 'usd'
            ));
      }
      catch(Exception $e) {
        $eror = $e->getMessage();
      }


    }

?>

2 个答案:

答案 0 :(得分:9)

您需要在电子邮件地址和条带客户ID之间存储数据库中的关系。我通过查看Stripe's API on Customers确定了这一点。

首先,在创建新客户时,每个字段都是可选的。这使我相信,只要您POST/v1/customers,它就会[创建]一个新的客户对象。&#34;

此外,在检索客户时,唯一可用的字段是id。这使我相信您无法根据电子邮件地址或其他字段检索客户。


如果无法将此信息存储在数据库中,您始终可以使用GET /v1/customers列出所有客户。这将要求您分页并检查所有客户对象,直到找到具有匹配电子邮件地址的客户对象。如果每次尝试创建客户时都可以看到这样做效率很低。

答案 1 :(得分:1)

您可以列出给定电子邮件地址的所有用户。 https://stripe.com/docs/api#list_customers

JavaScript 中,您可以执行以下操作:

const customerAlreadyExists = (email)=>{
    return  doGet(email)
                .then(response => response.data.length > 0);
}

const doGet = (url: string)=>{
    return fetch('https://api.stripe.com/v1/customers' + '?email=' + email, {
        method: 'GET',
        headers: {
            Accept: 'application/json',
            Authorization: 'Bearer ' + STRIPE_API_KEY
        }
    }).then(function (response) {
        return response.json();
    }).catch(function (error) {
        console.error('Error:', error);
    });
}