【问题标题】:Stripe : Specify Specific Card for SubscriptionStripe:指定订阅的特定卡
【发布时间】:2016-04-16 04:56:03
【问题描述】:

我已经建立了基于订阅的网站,允许人们进行多个订阅。我决定使用 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"

条纹错误:400 型

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

【问题讨论】:

    标签: php subscription


    【解决方案1】:

    我收到了 Stripe 支持部门的回复:Customer 不可能拥有不同付款来源的订阅。订阅的所有发票始终按客户当前的default_source 计费。因此,如果您按照 Giles Bennett 的建议更改默认设置,那么您将为 所有 订阅更改它,而不管创建时的默认设置是什么。

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

    【讨论】:

      【解决方案2】:

      由于我没有收到来自 SO 或 Stripe 的任何意见,因此我得出了一些无法做到的结论。我在另一个论坛上发现了一个类似的问题,结果是 - 没有来自 Stripe 的回应 - 这是无法完成的。尽管 Stripe 文档并未涉及此主题,但似乎只能从默认卡中收取订阅费用。订阅没有“卡”对象,就像“费用”一样。

      【讨论】:

        【解决方案3】:

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

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

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

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

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

        希望对你有帮助。

        【讨论】:

        • 订阅是使用创建订阅时的默认卡,还是开票时的默认卡?换句话说,如果我按照您的建议执行并切换回默认设置,我的新订阅是否会恢复为未来发票的旧默认设置?
        • 回答我的问题:Stripe 支持人员表示,在开具发票时,订阅始终会向default_source 开具发票。
        猜你喜欢
        • 2018-09-01
        • 2021-12-25
        • 2019-02-28
        • 2015-10-15
        • 2017-09-27
        • 1970-01-01
        • 2020-08-29
        • 1970-01-01
        • 2021-04-16
        相关资源
        最近更新 更多