Laravel Cashier — Создать новую подписку с существующим объектом клиента

я использую Ларавел Кассир вместе с Stripe для управления подписками. Пользователь предоставит информацию о своей кредитной карте при регистрации, но на данный момент он не будет подписан на определенный план. Таким образом, я могу успешно использовать Stripe Checkout для создания объекта клиента Stripe и сохранить идентификатор клиента Stripe в моей базе данных. Но когда приходит время для регистрации пользователя в плане, я не вижу способа использовать идентификатор клиента Stripe, чтобы зарегистрировать его в желаемом плане.

Конечно, я мог бы снова запросить информацию об их кредитной карте и получить токен Stripe для использования с Laravel Cashier, но я бы хотел этого избежать, так как приложение уже создало объект клиента Stripe, когда они зарегистрировались, и я бы хотел просто используйте существующий объект customer для снятия средств с кредитной карты, а не запрашивайте номер карты снова.

Чтобы попытаться проиллюстрировать то, что я пытаюсь сделать, вот пример кода из документации Laravel:

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

Но то, что я хотел бы сделать, это что-то вроде этого (обратите внимание на изменение метода create:

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

Любой совет?

4

Решение

Если для пользователя есть идентификатор полосы, вам не нужно указывать токен

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

Посмотрите на SubscriptionBuilder учебный класс.

7

Другие решения

Вы можете попробовать это.

$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);
0

По вопросам рекламы [email protected]