条带错误 400 - 不能多次使用条带令牌

Posted

技术标签:

【中文标题】条带错误 400 - 不能多次使用条带令牌【英文标题】:Stripe Error 400 - Cannot use stripe token more than once 【发布时间】:2015-08-25 02:42:54 【问题描述】:

我的条带仪表板上不断收到错误代码 400。似乎我不止一次使用相同的条带标记,这会产生错误。下面是我的代码。

Js:

    <script src="https://checkout.stripe.com/checkout.js"></script>
    <script>

    var handler = StripeCheckout.configure(
        key: 'pk_test_******************',
        image: '/img/documentation/checkout/marketplace.png',
        token: function(token) 
          /*$.post("php/charge.php",stripeToken:token.id,function(data,status)
              console.log("Data: "+ data+"\nStatus: "+status);
          );*/
          alert(token.used);//alerts false
          $.post("php/charge.php",stripeToken:token.id);
          alert(token.used);// still alerts false
        
      );

      $('#myButton').on('click', function(e) 
        // Open Checkout with further options
        handler.open(
          name: 'Demo Site',
          description: '2 widgets',
          currency: "cad",
          amount: 2000
        );
        e.preventDefault();
      );

      // Close Checkout on page navigation
      $(window).on('popstate', function() 
        handler.close();
      );
    </script>

PHP:

<?php
  require_once('config.php');

  $token  = $_POST['stripeToken'];

  $customer = \Stripe\Customer::create(array(
      'email' => 'test@test.com',
      'card'  => $token
  ));

  //try 
    $charge = \Stripe\Charge::create(array(
      "amount" => 1000, // amount in cents, again
      "currency" => "cad",
      "source" => $token,
      "description" => "Example charge")
    );
    //catch(\Stripe\Error\Card $e) 
      // The card has been declined
    //
?>

谁能告诉我为什么我不能向客户收费?我如何多次使用一个密钥?

【问题讨论】:

【参考方案1】:

您确实使用了两次令牌。

首先,在创建客户时。 其次,在尝试为卡充电时。

相反,您可以创建一个客户,然后在创建费用时将 $customer-&gt;id 传递给 Stripe:

$charge = \Stripe\Charge::create(array(
  "amount" => 1000, // amount in cents, again
  "currency" => "cad",
  "customer" => $customer->id,
  "description" => "Example charge")
);

【讨论】:

也许从那时起 stripe 改变了 API,但现在如果你想使用客户 ID,你必须提供“客户”而不是“来源”。所以数组是:array('amout' => 1000, 'currency' => 'cad', 'customer' => $customer->id, 'description' => 'example charge') 如果我们想多次使用同一张卡,是否必须创建客户?【参考方案2】:

您必须创建客户才能多次向他收费。

1) 将信用卡令牌添加到客户并创建客户

2) 使用客户 ID 向用户收费

if (isset($_POST['stripeToken']))

        $token = $_POST['stripeToken'];

// Create a Customer
$customer = \Stripe\Customer::create(array(
  "source" => $token,
  "description" => "Example customer")
);

// Charge the Customer instead of the card
\Stripe\Charge::create(array(
  "amount" => 1000, # amount in cents, again
  "currency" => "usd",
  "customer" => $customer->id)
);
    

如需更多帮助,请访问:https://stripe.com/docs/tutorials/charges

【讨论】:

如果使用一次性付费,然后立即订阅一天锚,则需要客户 ID。

以上是关于条带错误 400 - 不能多次使用条带令牌的主要内容,如果未能解决你的问题,请参考以下文章

详细的堆栈跟踪:错误:找不到模块“条带”

条带令牌未转移到控制器导轨 4

条带错误“资源 ID 不能为空或空格”

如何在条带支付网关中生成令牌

条带订单 API 和产品 API

Firebase 功能条带错误