使用Php进行Stripe API定期付款

时间:2016-07-25 18:09:08

标签: php stripe-payments

我使用Stripe API进行一次性付款,使用以下内容完美无缺:

  $stripe = array("secret_key" => "MY_SECRET_KEY", "publishable_key" => "MY_PUBLISHABLE_KEY");
  Stripe::setApiKey($stripe['secret_key']); 

  try {
      $charge = Stripe_Charge::create(array(
          "amount" => round($_POST['amount'] * 100, 0),
          "currency" => "USD",
          "card" => array(
              "number" => 111111111111111111,
              "exp_month" => 10,
              "exp_year" => 2017,
              "cvc" => 321,
              ),
          "description" => $_POST['item_name']));
      $json = json_decode($charge);
      $amount_charged = round(($json->{'amount'} / 100), 2);
      //process payment here......

  }
  catch (Stripe_CardError $e) {
      $body = $e->getJsonBody();
      print json_encode($json);
  }

现在,我希望能够通过捕获用户信用卡信息以及每月运行一次cron作业来定期付款。以上工作会好吗,还是我需要别的东西。我知道Stripe已经内置了定期付款功能,但就我而言,每个月的付款金额会有所不同。

2 个答案:

答案 0 :(得分:1)

您的示例中缺少的是客户记录。你知道,Stripe不允许你重复使用令牌。他们一次性使用。为了构建您正在寻找的功能,您需要在某处安全地存储付款详细信息。如果您符合PCI标准,那当然可以在您自己的本地数据存储上;但是,如果您想让自己变得轻松,您可以为每个用户及其相关的付款方式构建客户记录。

当您正常构建费用时,您将使用Create a Charge API请求。

您现在正在执行此操作并将令牌I​​D作为source - 参数传递。您要做的是首先制作Customer,然后通过creating a Card附加该付款来源。 (我建议将它们作为两个单独的步骤来执行,这样您就可以更好地管理具有多个付款来源的客户。)

然后,要再次收取该记录,您将再次发出Create a Charge API请求,但您可以在customer - 参数中传递客户ID并(可选)传递来源id(card_xxx)进入source - 参数。如果您没有传递source - 参数,但是传递了customer - 参数,则会使用默认付款来源。

希望有所帮助!

答案 1 :(得分:-1)

你不能每个月使用卡片令牌收费吗?而不是使用他们的卡令牌传递卡将更安全。但是否则你的代码看起来很好。你应该每个月都能收取这样的费用。

修改

忘记提及您需要创建一个Stripe Customer并将CC令牌分配给该Stripe Customer,因为CC令牌仅限一次性使用。创建Stripe客户后,您每个月都可以向该客户收费。