Stripe :指定要订阅的特定卡
Stripe : Specify Specific Card for Subscription
我已经建立了基于订阅的网站,允许人们有多个订阅。我决定使用 Stripe 进行支付和卡处理。只需很短的时间就可以将它集成到我的 Symfony2 项目中。我能够在几个小时内创建订阅、客户和添加卡片。然后我运行陷入了一个问题。如果客户有多张卡,我希望能够让他们在创建新订阅时选择要使用的卡。听起来很简单。经过 2 天大约 30 小时的梳理他们的文档后,我不得不说我无法弄清楚如何让它工作。
我的设置方式是,当客户创建卡片时,我将 "card id" 与 b运行d 一起存储在我的数据库中。这只是让在请求页面时在服务器端加载详细信息变得容易。创建新订阅的客户会看到他们的卡片并选择他们想要用于新订阅的卡片。这通过 AJAX 传递到我的 php 脚本以创建新订阅。但是,当我尝试使用特定卡时,出现 400 错误,指示 "card id" 不是令牌。我知道它不是令牌,因为令牌用于将卡添加到客户帐户,但我究竟该如何指定客户想要使用的确切卡?
注意:使用新令牌会创建 card.Not 选项的另一个实例。
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"
条纹错误:类型 400
error:
type: "invalid_request_error"
message: "No such token: card_xxxxxxxxxxxxxxxxxxxxxxx"
param: "source"
由于我还没有收到来自 SO 或 Stripe 的任何意见,我多少得出了这样的结论:这是不可能的。我在另一个论坛上发现了一个类似的问题,结果是 - 没有来自 Stripe 的回应 - 并且无法完成。尽管 Stripe 文档并未涉及此主题,但订阅似乎只能通过默认卡支付。没有 "Card" 订阅对象,因为有 "Charge".
我知道这个帖子很老了,但是在我自己尝试回答同样的问题时遇到它,这个解决方案可能对后来出现的人有用。
Stripe API 表示用于创建新订阅的 API 调用的 "source" 参数是可选的 - 如果省略,则它将默认为客户的默认卡。如果包含,那么它只能是一个令牌(即一张新卡)或一个字典条目(同样,对于一张新卡,只是没有被标记化)。
解决方案可能是先更新客户的默认来源。通过 Laravel 使用 Cartalyst,我们现在是:
$customer = Stripe::customers()->update( "customer_id", [
'default_source' => "card_id"
]);
然后您可以继续正常添加您的订阅 - 新默认的卡将分配给它。如果需要(取决于您的应用程序),您可能还希望先将以前的默认卡 ID 保存到一个变量中,然后允许您在新订阅后将其设置回默认卡。
希望对您有所帮助。
我收到了 Stripe 支持人员的回复:一个 Customer
不可能有不同支付来源的订阅。订阅的所有发票始终按客户当前的 default_source
计费。因此,如果您按照 Giles Bennett 的建议更改默认值,您将针对 所有 订阅更改它,而不管创建时的默认值是什么。
如果您需要一个用户订阅多个来源,您需要为该用户创建多个条带 Customer
对象,每个对象具有不同的 default_source
。
我已经建立了基于订阅的网站,允许人们有多个订阅。我决定使用 Stripe 进行支付和卡处理。只需很短的时间就可以将它集成到我的 Symfony2 项目中。我能够在几个小时内创建订阅、客户和添加卡片。然后我运行陷入了一个问题。如果客户有多张卡,我希望能够让他们在创建新订阅时选择要使用的卡。听起来很简单。经过 2 天大约 30 小时的梳理他们的文档后,我不得不说我无法弄清楚如何让它工作。
我的设置方式是,当客户创建卡片时,我将 "card id" 与 b运行d 一起存储在我的数据库中。这只是让在请求页面时在服务器端加载详细信息变得容易。创建新订阅的客户会看到他们的卡片并选择他们想要用于新订阅的卡片。这通过 AJAX 传递到我的 php 脚本以创建新订阅。但是,当我尝试使用特定卡时,出现 400 错误,指示 "card id" 不是令牌。我知道它不是令牌,因为令牌用于将卡添加到客户帐户,但我究竟该如何指定客户想要使用的确切卡?
注意:使用新令牌会创建 card.Not 选项的另一个实例。
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"
条纹错误:类型 400
error:
type: "invalid_request_error"
message: "No such token: card_xxxxxxxxxxxxxxxxxxxxxxx"
param: "source"
由于我还没有收到来自 SO 或 Stripe 的任何意见,我多少得出了这样的结论:这是不可能的。我在另一个论坛上发现了一个类似的问题,结果是 - 没有来自 Stripe 的回应 - 并且无法完成。尽管 Stripe 文档并未涉及此主题,但订阅似乎只能通过默认卡支付。没有 "Card" 订阅对象,因为有 "Charge".
我知道这个帖子很老了,但是在我自己尝试回答同样的问题时遇到它,这个解决方案可能对后来出现的人有用。
Stripe API 表示用于创建新订阅的 API 调用的 "source" 参数是可选的 - 如果省略,则它将默认为客户的默认卡。如果包含,那么它只能是一个令牌(即一张新卡)或一个字典条目(同样,对于一张新卡,只是没有被标记化)。
解决方案可能是先更新客户的默认来源。通过 Laravel 使用 Cartalyst,我们现在是:
$customer = Stripe::customers()->update( "customer_id", [
'default_source' => "card_id"
]);
然后您可以继续正常添加您的订阅 - 新默认的卡将分配给它。如果需要(取决于您的应用程序),您可能还希望先将以前的默认卡 ID 保存到一个变量中,然后允许您在新订阅后将其设置回默认卡。
希望对您有所帮助。
我收到了 Stripe 支持人员的回复:一个 Customer
不可能有不同支付来源的订阅。订阅的所有发票始终按客户当前的 default_source
计费。因此,如果您按照 Giles Bennett 的建议更改默认值,您将针对 所有 订阅更改它,而不管创建时的默认值是什么。
如果您需要一个用户订阅多个来源,您需要为该用户创建多个条带 Customer
对象,每个对象具有不同的 default_source
。