I have a simple form that registers users. The form also uses Stripe to process payments. Stripe’s API is super clean but for some reason I can’t seem to figure this out. Please tell me if i’m doing something wrong here.
Right now I’m in a test account with Stripe, but every time I register a user in stripe it keeps creating a new plan. I know in my code below I have “StripePlan::create” that’s because I don’t know how to add a new customer to an existing plan. Is this normal the way I’m doing this currently?
In the screenshot below you will see that it will create a new plan for that customer and assign them to it. Is it possible to just keep adding new customers to an existing plan?
// Include configuration file require_once 'stripe/config.php'; // Include Stripe PHP library require_once 'vendor/autoload.php'; $payment_id = $statusMsg = $api_error = ''; $ordStatus = 'error'; // Check whether stripe token is not empty if(!empty($_POST['stripeToken'])){ // Retrieve stripe token, card and user info from the submitted form data $token = $_POST['stripeToken']; $users_email = $_POST['email']; $first_name = $_POST['first_name']; $last_name = $_POST['last_name']; $full_name = $first_name.' '.$last_name; // Set API key StripeStripe::setApiKey(STRIPE_API_KEY); // Add customer to stripe $customer = StripeCustomer::create(array( 'email' => $users_email, 'name' => $full_name, 'source' => $token )); // Create a plan try { $plan = StripePlan::create([ 'amount' => 3000, 'currency' => 'usd', 'interval' => 'month', // 'product' => ['name' => 'Standard Plan'], 'product' => 'prod_ktItFVvqgr4edf', ]); }catch(Exception $e) { $api_error = $e->getMessage(); } if(empty($api_error) && $plan){ // Creates a new subscription try { $subscription = StripeSubscription::create(array( "customer" => $customer->id, "items" => array( array( "plan" => $plan->id, ), ), )); }catch(Exception $e) { $api_error = $e->getMessage(); } if(empty($api_error) && $subscription){ // Retrieve subscription data $subsData = $subscription->jsonSerialize(); // Check whether the subscription activation is successful if($subsData['status'] == 'active'){ // Subscription info $subscrID = $subsData['id']; $custID = $subsData['customer']; $planID = $subsData['plan']['id']; $created = date("Y-m-d H:i:s", $subsData['created']); $status = $subsData['status']; // Insert into database // Insert into database }else{ $statusMsg = "Subscription activation failed!"; } }else{ $statusMsg = "Subscription creation failed! ".$api_error; } }else{ $statusMsg = "Plan creation failed! ".$api_error; } }else{ $statusMsg = "Error on form submission, please try again."; }
Advertisement
Answer
To create a subscription with an existing plan, simply pass in that older plan’s ID when creating the subscription instead of creating a new plan for each customer. In your // Create a plan
block, either retrieve an existing plan and use that to create the subscription or create a new plan if needed. Or better yet, store the plan ID’s in your own database for easier retrieval.