я использую Ларавел Кассир вместе с 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);
Любой совет?
Если для пользователя есть идентификатор полосы, вам не нужно указывать токен
$user->newSubscription('main', 'monthly')->create();
Посмотрите на SubscriptionBuilder учебный класс.
Вы можете попробовать это.
$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);