【问题标题】:Stripe 3 tier payment subscriptionStripe 3 层支付订阅
【发布时间】:2017-09-20 17:36:47
【问题描述】:

我正在使用 Stripe 创建一个订阅网站,并希望使用 3 个计费选项对其进行设置:

  • 1 个月 = 12.99 美元
  • 6 个月 = 70.00 美元
  • 12 个月 = 200 美元

想要在 3 个并排的 div 中显示这些

我的问题是...如何设置表单以使用 1 个动作脚本?

我假设使用 if / else 语句,但我的编码有点生疏。

如果金额等于 3 个计划中 1 个的金额,我希望确定发送给 Stripe 的计划。

这是我的 3 个表单:

<form action="/premium/premium_charge.php" method="POST">
  <script
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="<?php echo $stripe['publishable']; ?>"
    data-email="<?php echo escape($data->email); ?>"
    data-image="/images/logo-stripe.png"
    data-name="My Site"
    data-description = "1 Month Membership"
    data-amount="1299"
    data-currency= "usd"
    data-label="1 MONTH">
  </script>
</div>
</form>

<div align="center">
<form action="/premium/premium_charge.php" method="POST">
  <script
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="<?php echo $stripe['publishable']; ?>"
    data-email="<?php echo escape($data->email); ?>"
    data-image="/images/logo-stripe.png"
    data-name="My Site"
    data-description = "6 Month Membership"
    data-amount="7000"
    data-currency= "usd"
    data-label="6 MONTHS">
  </script>
</div>
</form>

<div align="right">
<form action="/premium/premium_charge.php" method="POST">
  <script
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="<?php echo $stripe['publishable']; ?>"
    data-email="<?php echo escape($data->email); ?>"
    data-image="/images/logo-stripe.png"
    data-name="My Site"
    data-description = "Annual Membership"
    data-amount="12000"
    data-currency= "usd"
    data-label="YEAR">
  </script>
</div>
</form>

这是我的带有 if 语句的动作脚本: 如您所见,我正在尝试从上述表单中提取数据量以在我的 IF 语句中使用,然后传递给我的 $customer 计划,但我很确定我把它搞砸了...... :0{

$x = ("data-amount")==1299;
$y = ("data-amount")==7000;
$z = ("data-amount")==12000;

if($x == true){
     echo ('001');
} 
elseif($y == true){
     echo ('002');
} 
elseif($z == true){
     echo ('003');
} 


require_once '../core/init.php';


if(isset($_POST['stripeToken'])) {
    $token = $_POST['stripeToken'];


try{


$customer = \Stripe\Customer::create(array(
    'email' => $data->email,
    "source" => $token, // obtained with Stripe.js
    'plan' => $x->$y->$z

  ));

如果有人可以指导我,我将不胜感激。

【问题讨论】:

    标签: php paypal stripe-payments


    【解决方案1】:

    传递给Checkout 表单(通过data-amountdata-currency 参数)的金额和货币仅用于显示目的。它们不会发送到您的后端 PHP 代码。

    这是设计使然:除非客户明确选择金额(例如,如果您接受捐赠),否则您不应相信客户浏览器发送的金额,因为更改它很简单。

    您应该做的是发送一个标识符,该标识符可在您的服务器端代码中使用,以确定要收取的正确金额。由于您使用的是订阅,您可以直接使用订阅plan的ID。

    假设您的三个计划的 ID 分别为 1month6months12months。您可以为每个优惠包含一个具有不同值的隐藏参数:

    <form action="/premium/premium_charge.php" method="POST">
      <input type="hidden" name="plan" value="1month" />
      <script
        src="https://checkout.stripe.com/checkout.js" class="stripe-button"
        data-key="<?php echo $stripe['publishable']; ?>"
        data-email="<?php echo escape($data->email); ?>"
        data-image="/images/logo-stripe.png"
        data-name="My Site"
        data-description = "1 Month Membership"
        data-amount="1299"
        data-currency= "usd"
        data-label="1 MONTH">
      </script>
    </div>
    </form>
    

    您可以对其他 2 个表单重复此操作,将 plan 参数的值分别更改为 6months12months

    然后,在您的服务器端代码中,您可以检索 plan 参数的值以及 Checkout 发送的 stripeTokenstripeEmail 参数,并通过正确的订阅将它们用于 create the customer

    $customer = \Stripe\Customer::create(array(
      'source' => $_POST['stripeToken'],
      'email' => $_POST['stripeEmail'],
      'plan' => $_POST['plan']
    ));
    

    【讨论】:

    • 感谢您的帮助。我忽略了这样一个简单的解决方案。现在一切正常。感谢您的时间。
    • @echo 很高兴我能帮上忙 :)
    猜你喜欢
    • 2020-07-18
    • 2015-09-15
    • 2017-10-16
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 2018-08-20
    相关资源
    最近更新 更多