I have stripe check out with php. It creates customers and charges them. I want to create a donation form where if same customer comes back and gives with same email address that Stripe doesn’t create another customer but charges the existing customer with additional payments. Is this possible? Or does the checkout always create new customer with new customer id?
Here is my 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(); } } ?>
Advertisement
Answer
You will need to store the relationship between email address and Stripe customer ID in a database. I’ve determined this by looking at Stripe’s API on Customers.
First, when creating a new customer every field is optional. This leads me to believe that every single time you POST
to /v1/customers
, it will “[create] a new customer object.”
Also, when retrieving a customer the only field available is the id
. This leads me to believe that you cannot retrieve a customer based on an email address or other field.
If you can’t store this information in a database, you can always list all the customers with GET /v1/customers
. This will require you to paginate through and check all customer objects until you find one with a matching email address. You can see how this would be quite inefficient if done every time you tried to create a customer.