条带:指定订阅的特定卡

时间:2016-01-11 19:01:10

标签: php subscription

我已经设置了基于订阅的网站,允许人们有多个订阅。我决定使用Stripe进行支付和卡处理。将它集成到我的Symfony2项目中花了很少的时间。我能够在几个小时内创建订阅,客户和添加卡。然后我遇到了一个问题。如果客户有多张卡,我希望能够允许他们在创建新订阅时选择他们想要使用的卡。听起来很简单。经过2天和大约30个小时的梳理他们的文档后,我不得不说我无法弄清楚如何让它工作。

我设置的方式是,当客户创建卡片时,我会将“卡片ID”与品牌一起存储在我的数据库中。这样可以在请求页面时轻松加载服务器端的详细信息。创建新订阅的客户会看到他们的卡片,并选择他们想要用于新订阅的卡片。这是通过AJAX传递给我的PHP脚本来创建新订阅。但是,当我尝试使用特定卡时,我收到400错误,表示“卡ID”不是令牌。我知道这不是一个令牌,因为令牌用于将卡添加到客户帐户,但我在世界上如何指定客户想要使用的确切卡?

注意:使用新令牌会创建另一个卡片实例。没有选项。

PHP:

         require_once('../stripe-php/init.php');

    //Set Secret API Key
            \Stripe\Stripe::setApiKey("sk_test_XXXXXXXXXXXXXXXXXXXXX");

//Retrieve Customer
            $cu = \Stripe\Customer::retrieve($_POST['customer_id']);

//Create Subscription using saved customer "card id"
            $createSubscription = $cu->subscriptions->create(array("plan" => $_POST['sub_option'], "source" => $card));

张贴到条纹:

plan: "500-2016"
source: "card_xxxxxxxxxxxxxxxxxxxxx"

STRIPE ERROR:TYPE 400

error:
type: "invalid_request_error"
message: "No such token: card_xxxxxxxxxxxxxxxxxxxxxxx"
param: "source"

3 个答案:

答案 0 :(得分:3)

我收到了Stripe支持的回复:一个Customer不可能拥有不同付款来源的订阅。所有订阅发票始终按客户的当前default_source结算。因此,如果您按照Giles Bennett的建议更改默认设置,则无论创建时默认值是什么,您都会为所有订阅更改默认设置。

如果您需要一个用户拥有多个源的订阅,则需要为该用户创建多个条带Customer对象,每个用户使用不同的default_source

答案 1 :(得分:1)

由于我没有收到来自SO或Stripe的任何输入,我有点得出结论,这是不可能做到的。我在一个不同的论坛上发现了一个类似的问题,结果是结果是 - 没有来自Stripe的响应 - 并且这是无法做到的。尽管Stripe文档没有涉及此主题,但看起来只能向默认卡收取订阅费用。没有"卡"订阅的对象,因为有#34; Charge"。

答案 2 :(得分:1)

我意识到这个帖子已经很老了,但是在尝试自己回答相同的问题时遇到过这个问题,这个解决方案可能对后来出现的人有用。

Stripe API表示创建新订阅的API调用的“source”参数是可选的 - 如果省略,则默认为客户的默认卡。如果包含,那么它只能是一个令牌(即一张新卡)或一个字典条目(再次,对于一张新卡,只是没有标记)。

解决方案可能是首先更新客户的默认来源。通过Laravel使用Cartalyst,就像我们一样:

$customer = Stripe::customers()->update( "customer_id", [
    'default_source' => "card_id"
]);

然后您可以继续正常添加订阅 - 新的默认卡将被分配给它。如果需要(取决于您的应用程序),那么您可能还希望先将先前的默认卡ID保存到变量,然后允许您在新订阅后将其设置回默认卡。

我希望有所帮助。