where(['id' => $request->order_id, 'user_id'=>$request->customer_id])->first(); $user_data = $order->customer; // Enter the details of the payment $data = [ 'payment_options' => 'card,banktransfer', 'amount' => $order->order_amount, 'email' => $user_data['email'], 'tx_ref' => $reference, 'currency' => Helpers::currency_code(), 'redirect_url' => route('flutterwave_callback',['order_id'=>$order->id]), 'customer' => [ 'email' => $user_data['email'], "phone_number" => $user_data['phone'], "name" => $user_data['f_name'].''.$user_data['l_name'] ], "customizations" => [ "title" => BusinessSetting::where(['key'=>'business_name'])->first()->value??'Stack Food', "description" => $order->id, ] ]; $payment = Flutterwave::initializePayment($data); if ($payment['status'] !== 'success') { $order->order_status = 'failed'; $order->failed = now(); $order->save(); if ($order->callback != null) { return redirect($order->callback . '&status=fail'); }else{ return \redirect()->route('payment-fail'); } } return redirect($payment['data']['link']); } /** * Obtain Rave callback information * @return void */ public function callback(Request $request, $order_id) { $order = Order::with(['details'])->where(['id' => $order_id])->first(); //Payment successful response // array ( // 'status' => 'completed', // 'tx_ref' => 'flw_166339765163256f133120d', // 'transaction_id' => '716320049', // ) if (in_array($request->status, ['successful','completed'])) { $transactionID = Flutterwave::getTransactionIDFromCallback(); $data = Flutterwave::verifyTransaction($transactionID); try { $order->transaction_reference = $transactionID; $order->payment_method = 'flutterwave'; $order->payment_status = 'paid'; $order->order_status = 'confirmed'; $order->confirmed = now(); $order->save(); Helpers::send_order_notification($order); } catch (\Exception $e) { info($e->getMessage()); } if ($order->callback != null) { return redirect($order->callback . '&status=success'); }else{ return \redirect()->route('payment-success'); } } // elseif ($status == 'cancelled'){ // //Put desired action/code after transaction has been cancelled here // } else{ $order->order_status = 'failed'; $order->failed = now(); $order->save(); if ($order->callback != null) { return redirect($order->callback . '&status=fail'); }else{ return \redirect()->route('payment-fail'); } } // Get the transaction from your DB using the transaction reference (txref) // Check if you have previously given value for the transaction. If you have, redirect to your successpage else, continue // Confirm that the currency on your db transaction is equal to the returned currency // Confirm that the db transaction amount is equal to the returned amount // Update the db transaction record (including parameters that didn't exist before the transaction is completed. for audit purpose) // Give value for the transaction // Update the transaction to note that you have given value for the transaction // You can also redirect to your success page from here } }