Stripe Checkout - 已识别条带用户的订阅问题

时间:2017-09-10 03:43:24

标签: php stripe-payments checkout stripe.js

我的Stripe非常棒。在客户捐赠后,会创建一个新的订阅,并且效果很好 - 除非Stripe识别出该电子邮件并说“输入验证码”。

如果客户这样做,由于某种原因,不会创建新订阅并且不向客户收费。

这是我的charge-monthly.php

<?php

require_once('init.php');
// Set your secret key: remember to change this to your live secret key in production
// See your keys here https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey("sk_test_**************");

// Get the credit card details submitted by the form
$token = $_POST['stripeToken'];
$email = $_POST['stripeEmail'];
$amount = $_POST['amount'];
$finalamount = $amount * 100;
$dollars = ".00";
$plan = "/month"; 
$dash = " - "; 
$monthlyplan = $amount .$dollars .$plan .$dash .$email; 


//Create monthly plan
$plan = \Stripe\Plan::create(array(
  "name" => $monthlyplan,
  "id" => $monthlyplan,
  "interval" => "month",
  "currency" => "usd",
  "amount" => $finalamount,
));


// Create a Customer
$customer = \Stripe\Customer::create(array(
  "source" => $token,
  "description" => "MONTHLY DONATION",
    "plan" => $monthlyplan, 
  "email" => $email, )
);


?>

为什么当Stripe识别用户并且他“登录”时,为什么不允许我创建订阅?

在Stripe日志中,我收到400错误:

{
   "error": {
   "type": "invalid_request_error",
   "message": "Plan already exists."
   }
 }
但是肯定没有创建计划......啊!

1 个答案:

答案 0 :(得分:1)

您的请求失败的原因是,如果用户使用相同的电子邮件地址返回并想要注册同一个计划,那么您已经拥有了具有该名称的现有计划,

$monthlyplan = $amount .$dollars .$plan .$dash .$email;

因此,您对\Stripe\Plan::create的调用将返回错误,导致其余调用失败。

您可以为计划ID添加类似唯一ID或时间的内容。

http://php.net/manual/en/function.time.php http://php.net/manual/en/function.uniqid.php

人们通常会处理这个问题的其他一些方法是:

  • 为$ 1创建单个计划,然后在创建订阅时调整数量。因此,每月计划1美元,数量为100,将收取100美元的月费。

  • 存储客户在您的应用程序中支付的金额。订阅您的客户每月0美元的计划。使用webhooks监听invoice.created个事件。让您的webhook处理程序每​​月为余额添加一个发票项目。