Laravel Cashier - 使用现有客户对象创建新订阅

时间:2016-03-30 17:04:05

标签: php stripe-payments laravel-5.2 laravel-cashier

我正在使用Laravel Cashier和Stripe来管理订阅。用户将在注册时提供其信用卡信息,但此时不会在特定计划中订阅。因此,我可以成功使用Stripe Checkout创建Stripe客户对象,并将Stripe客户ID保存在我的数据库中。但是,当用户注册计划时,我看不到使用Stripe客户ID将他们注册到他们想要的计划中的方法。

当然,我可以再次询问他们的信用卡信息,并获得一个Stripe令牌与Laravel Cashier一起使用,但我想避免这种情况,因为该应用已经在他们注册时创建了一个Stripe客户对象并且我'我想简单地使用现有的客户对象来收取信用卡,而不是再次询问他们的卡号。

为了说明我正在尝试做什么,这里有一些来自Laravel文档的示例代码:

$user->newSubscription('main', 'monthly')->create($creditCardToken);

但我希望能做的是这样的事情(请注意对创建方法的更改:

$user->newSubscription('main', 'monthly')->create($user->stripe_id);

有什么建议吗?

2 个答案:

答案 0 :(得分:7)

如果用户有条带ID,则不必提供令牌

$user->newSubscription('main', 'monthly')->create();

查看SubscriptionBuilder课程。

答案 1 :(得分:0)

你可以试试这个。

$user->setStripeKey(env("STRIPE_KEY"));

# card details
$card = [
'card_number' => 'xxxxxxxx',
'card_cvc' => 'xxx',
'exp_month' => 'xx',
'exp_year' => 'xxxx',
'name' => 'xxx',
];
# generate token
$token = $this->generateAccessToken($card);

private function generateAccessToken($card)
{

    $client = new \GuzzleHttp\Client();
    $url = 'https://api.stripe.com/v1/tokens';
    $pubKey = env("STRIPE_SECRET");
    $postBody = [
        'key' => $pubKey,
        'payment_user_agent' => 'stripe.js/Fbebcbe6',
        'card' => [
            'number' => $card['card_number'],
            'cvc' => $card['card_cvc'],
            'exp_month' => $card['exp_month'],
            'exp_year' => $card['exp_year'],
            'name' => $card['name']
        ]
    ];

    $response = $client->post($url, [
        'form_params' => $postBody
    ]);

    $response_obj = json_decode($response->getbody()->getContents());

    return $response_obj->id;
}
# main or primary
$subscription_obj = $user->newSubscription('subscription_name', 'stripe_plan_id')->create($token);