I have a mobile app (Flutter) which uses Lumen as backend. For payments I use Stripe SDK for PHP.
I need to send an invoice to user after successful charge. I understood it works this way:
- Create customer in Stripe
- Charge customer using
customer_id
- Create invoice item using
customer_id
- Stripe will automatically send an invoice via email using customer's email
I have two functions:
public function addCard(Request $request) {
$user = User::find($user->id);
if (is_null($user->stripe_id) || empty($user->stripe_id)) {
$customer = \Stripe\Customer::create([
"name" => $user->name,
"email" => $user->email,
"description" => "Test",
]);
$user->stripe_id = $customer->id;
$user->save();
}
}
public function charge(Request $request) {
$charge = \Stripe\Charge::create([
'amount' => 2000,
'currency' => 'eur',
'customer' => $user->stripe_id,
'description' => 'Some description',
]);
\Stripe\InvoiceItem::create([
'customer' => $user->stripe_id,
'amount' => 2500,
'currency' => 'usd',
'description' => 'One-time setup fee',
'auto_advance' => true,
]);
}
It adds user but without credit card details. Which arguments should I pass so that Stripe can create card token for specified user? Since it's a mobile app I cannot use Stripe.js for this purpose.
At the moment when the charge function is called I get the error message:
Cannot charge a customer that has no active card
This is my first project with payment gateway... So any help is really appreciated.
stripe.js
or Stripe Checkout to get a card token when the user enters their credit card details. – Barmar