我已经设置了基于订阅的网站,允许人们有多个订阅。我决定使用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"
答案 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保存到变量,然后允许您在新订阅后将其设置回默认卡。
我希望有所帮助。