D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
forge
/
ghanempharmacy.com
/
app
/
Http
/
Controllers
/
Payment_Methods
/
Filename :
StripePaymentController.php
back
Copy
<?php namespace App\Http\Controllers\Payment_Methods; use App\Models\PaymentRequest; use App\Traits\Processor; use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\Validator; use Stripe\Checkout\Session; use Stripe\Stripe; class StripePaymentController extends Controller { use Processor; private $config_values; private PaymentRequest $payment; public function __construct(PaymentRequest $payment) { $config = $this->payment_config('stripe', 'payment_config'); if (!is_null($config) && $config->mode == 'live') { $this->config_values = json_decode($config->live_values); } elseif (!is_null($config) && $config->mode == 'test') { $this->config_values = json_decode($config->test_values); } $this->payment = $payment; } public function index(Request $request): View|Factory|JsonResponse|Application { $validator = Validator::make($request->all(), [ 'payment_id' => 'required|uuid' ]); if ($validator->fails()) { return response()->json($this->response_formatter(GATEWAYS_DEFAULT_400, null, $this->error_processor($validator)), 400); } $data = $this->payment::where(['id' => $request['payment_id']])->where(['is_paid' => 0])->first(); if (!isset($data)) { return response()->json($this->response_formatter(GATEWAYS_DEFAULT_204), 200); } $config = $this->config_values; return view('payment.stripe', compact('data', 'config')); } public function payment_process_3d(Request $request): JsonResponse { $data = $this->payment::where(['id' => $request['payment_id']])->where(['is_paid' => 0])->first(); if (!isset($data)) { return response()->json($this->response_formatter(GATEWAYS_DEFAULT_204), 200); } $payment_amount = $data['payment_amount']; Stripe::setApiKey($this->config_values->api_key); header('Content-Type: application/json'); $currency_code = $data->currency_code; if ($data['additional_data'] != null) { $business = json_decode($data['additional_data']); $business_name = $business->business_name ?? "my_business"; $business_logo = $business->business_logo ?? url('/'); } else { $business_name = "my_business"; $business_logo = url('/'); } $checkout_session = Session::create([ 'payment_method_types' => ['card'], 'line_items' => [[ 'price_data' => [ 'currency' => $currency_code ?? 'usd', 'unit_amount' => round($payment_amount, 2) * 100, 'product_data' => [ 'name' => $business_name, 'images' => [$business_logo], ], ], 'quantity' => 1, ]], 'mode' => 'payment', 'success_url' => url('/') . '/payment/stripe/success?session_id={CHECKOUT_SESSION_ID}&payment_id=' . $data->id, 'cancel_url' => url()->previous(), ]); return response()->json(['id' => $checkout_session->id]); } public function success(Request $request) { Stripe::setApiKey($this->config_values->api_key); $session = Session::retrieve($request->get('session_id')); if ($session->payment_status == 'paid' && $session->status == 'complete') { $this->payment::where(['id' => $request['payment_id']])->update([ 'payment_method' => 'stripe', 'is_paid' => 1, 'transaction_id' => $session->payment_intent, ]); $data = $this->payment::where(['id' => $request['payment_id']])->first(); if (isset($data) && function_exists($data->success_hook)) { call_user_func($data->success_hook, $data); } return $this->payment_response($data,'success'); } $payment_data = $this->payment::where(['id' => $request['payment_id']])->first(); if (isset($payment_data) && function_exists($payment_data->failure_hook)) { call_user_func($payment_data->failure_hook, $payment_data); } return $this->payment_response($payment_data,'fail'); } }