packs[ 'credits10' ]*1099 + $request->packs[ 'credits50' ]*5499 + $request->packs[ 'credits100' ]*10999 + $request->packs[ 'credits1000' ]*101000; $transaction = new Transaction; $transaction->credits = $request->packs['credits10']*10 + $request->packs['credits50']*50 + $request->packs['credits100']*100 + $request->packs['credits1000']*1000; $transaction->credits_extra = $request->packs['credits50']*5 + $request->packs['credits100']*10 + $request->packs['credits1000']*150; $transaction->user_id = Auth::user()->id; $transaction->charge = $amount; $transaction->status = 'processing'; $transaction->completed = false; $total_credits = $transaction->credits + $transaction->credits_extra; $intent = PaymentIntent::create([ 'amount' => $amount, 'currency' => 'usd', 'customer' => Auth::user()->customer_id, 'description' => "You have received $total_credits credits.", 'receipt_email' => Auth::user()->email, 'metadata' => ['transaction_id' => $transaction->id] ]); $transaction->intent_id = $intent->id; $transaction->save(); return $intent->client_secret; } public function getCards() { Stripe::setApiKey(env('STRIPE_SECRET')); return PaymentMethod::all([ 'customer' => Auth::user()->customer_id, 'type' => 'card' ]); } public function chargeEvent(Request $request) { Stripe::setApiKey(env('STRIPE_SECRET')); $event = \Stripe\Event::constructFrom($request->all()); $charge = $event->data->object; $transaction = Transaction::where('intent_id', $charge->payment_intent); $user = $transaction->user; if ($event->type == 'charge.succeeded') { Log::debug($charge->metadata['transaction_id']); $user->credits = $user->credits + $transaction->credits + $transaction->credits_extra; $transaction->status = 'completed'; $transaction->completed = true; $user->save(); $transaction->save(); } else { $transaction->status = $charge->status; $transaction->save(); } } }