Stripe - 向现有计划添加新客户?
Stripe - adding new customers to an existing plan?
我有一个用于注册用户的简单表单。该表单还使用 Stripe 来处理付款。 Stripe's API 非常干净,但出于某种原因我似乎无法弄清楚这一点。如果我在这里做错了什么,请告诉我。
现在我在 Stripe 的测试帐户中,但每次我在 Stripe 中注册用户时,它都会不断创建新计划。我知道在下面的代码中我有“Stripe\Plan::create”,那是因为我不知道如何将新客户添加到现有计划中。我现在这样做正常吗?
在下面的屏幕截图中,您会看到它将为该客户创建一个新计划并将其分配给该计划。是否可以继续向现有计划中添加新客户?
// 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
\Stripe\Stripe::setApiKey(STRIPE_API_KEY);
// Add customer to stripe
$customer = \Stripe\Customer::create(array(
'email' => $users_email,
'name' => $full_name,
'source' => $token
));
// Create a plan
try {
$plan = \Stripe\Plan::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 = \Stripe\Subscription::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.";
}
要使用现有计划创建订阅,只需在创建订阅时传入旧计划的 ID,而不是为每个客户创建新计划。在您的 // Create a plan
块中,选择 retrieve an existing plan 并使用它来创建订阅或根据需要创建新计划。或者更好的是,将计划 ID 存储在您自己的数据库中以便于检索。
我有一个用于注册用户的简单表单。该表单还使用 Stripe 来处理付款。 Stripe's API 非常干净,但出于某种原因我似乎无法弄清楚这一点。如果我在这里做错了什么,请告诉我。
现在我在 Stripe 的测试帐户中,但每次我在 Stripe 中注册用户时,它都会不断创建新计划。我知道在下面的代码中我有“Stripe\Plan::create”,那是因为我不知道如何将新客户添加到现有计划中。我现在这样做正常吗?
在下面的屏幕截图中,您会看到它将为该客户创建一个新计划并将其分配给该计划。是否可以继续向现有计划中添加新客户?
// 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
\Stripe\Stripe::setApiKey(STRIPE_API_KEY);
// Add customer to stripe
$customer = \Stripe\Customer::create(array(
'email' => $users_email,
'name' => $full_name,
'source' => $token
));
// Create a plan
try {
$plan = \Stripe\Plan::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 = \Stripe\Subscription::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.";
}
要使用现有计划创建订阅,只需在创建订阅时传入旧计划的 ID,而不是为每个客户创建新计划。在您的 // Create a plan
块中,选择 retrieve an existing plan 并使用它来创建订阅或根据需要创建新计划。或者更好的是,将计划 ID 存储在您自己的数据库中以便于检索。