条带3层付款订阅

时间:2017-04-24 06:35:07

标签: php paypal stripe-payments

我正在使用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语句中,并传递给我的$客户计划,但很确定我把它弄得很糟糕..: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

  ));

如果有人可以指导我,我会很感激。

1 个答案:

答案 0 :(得分:2)

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

这是设计原则:除非客户明确选择金额(例如,如果您接受捐赠),否则您不应该信任客户浏览器发送的金额,因为更改金额是微不足道的。< / p>

您应该做的是发送一个标识符,该标识符可以在您的服务器端代码中使用,以确定要收取的正确金额。由于您使用的是订阅,因此您可以直接使用订阅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>

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

然后,在您的服务器端代码中,您可以检索plan参数的值以及Checkout发送的stripeTokenstripeEmail参数,并将其用于{{ 3}}使用正确的订阅:

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