Your IP : 216.73.217.77


Current Path : /home/users/unlimited/www/api.xalonx.com/app/Http/Controllers/v1/
Upload File :
Current File : /home/users/unlimited/www/api.xalonx.com/app/Http/Controllers/v1/PaymentsController.php

<?php

namespace App\Http\Controllers\v1;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Payments;
use App\Models\Appointments;
use App\Models\ProductOrders;
use Validator;
use Stripe;
use DB;

class PaymentsController extends Controller
{
    public function save(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required',
            'env' => 'required',
            'creds' => 'required',
            'status' => 'required',
            'cover' => 'required',
        ]);
        if ($validator->fails()) {
            $response = [
                'success' => false,
                'message' => 'Validation Error.',
                $validator->errors(),
                'status' => 500
            ];
            return response()->json($response, 404);
        }

        $data = Payments::create($request->all());
        if (is_null($data)) {
            $response = [
                'data' => $data,
                'message' => 'error',
                'status' => 500,
            ];
            return response()->json($response, 200);
        }
        $response = [
            'data' => $data,
            'success' => true,
            'status' => 200,
        ];
        return response()->json($response, 200);
    }

    public function getPaymentInfo(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'id' => 'required',
        ]);
        if ($validator->fails()) {
            $response = [
                'success' => false,
                'message' => 'Validation Error.',
                $validator->errors(),
                'status' => 500
            ];
            return response()->json($response, 404);
        }
        $data = DB::table('payments')
            ->select('*')->where('id', $request->id)->first();
        if (is_null($data)) {
            $response = [
                'success' => false,
                'message' => 'Data not found.',
                'status' => 404
            ];
            return response()->json($response, 404);
        }

        $response = [
            'data' => $data,
            'success' => true,
            'status' => 200,
        ];
        return response()->json($response, 200);
    }

    public function getById(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'id' => 'required',
        ]);
        if ($validator->fails()) {
            $response = [
                'success' => false,
                'message' => 'Validation Error.',
                $validator->errors(),
                'status' => 500
            ];
            return response()->json($response, 404);
        }

        $data = Payments::find($request->id);

        if (is_null($data)) {
            $response = [
                'success' => false,
                'message' => 'Data not found.',
                'status' => 404
            ];
            return response()->json($response, 404);
        }

        $response = [
            'data' => $data,
            'success' => true,
            'status' => 200,
        ];
        return response()->json($response, 200);
    }

    public function update(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'id' => 'required',
        ]);
        if ($validator->fails()) {
            $response = [
                'success' => false,
                'message' => 'Validation Error.',
                $validator->errors(),
                'status' => 500
            ];
            return response()->json($response, 404);
        }
        $data = Payments::find($request->id)->update($request->all());

        if (is_null($data)) {
            $response = [
                'success' => false,
                'message' => 'Data not found.',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $response = [
            'data' => $data,
            'success' => true,
            'status' => 200,
        ];
        return response()->json($response, 200);
    }

    public function delete(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'id' => 'required',
        ]);
        if ($validator->fails()) {
            $response = [
                'success' => false,
                'message' => 'Validation Error.',
                $validator->errors(),
                'status' => 500
            ];
            return response()->json($response, 404);
        }
        $data = Payments::find($request->id);
        if ($data) {
            $data->delete();
            $response = [
                'data' => $data,
                'success' => true,
                'status' => 200,
            ];
            return response()->json($response, 200);
        }
        $response = [
            'success' => false,
            'message' => 'Data not found.',
            'status' => 404
        ];
        return response()->json($response, 404);
    }

    public function getAll()
    {
        $data = Payments::all();
        if (is_null($data)) {
            $response = [
                'success' => false,
                'message' => 'Data not found.',
                'status' => 404
            ];
            return response()->json($response, 404);
        }

        $response = [
            'data' => $data,
            'success' => true,
            'status' => 200,
        ];
        return response()->json($response, 200);
    }

    public function getPayments()
    {
        $data = Payments::where('status', 1)->get();
        if ($data) {
            $response = [
                'data' => $data,
                'success' => true,
                'status' => 200,
            ];
            return response()->json($response, 200);
        }
        $response = [
            'success' => false,
            'message' => 'Data not found.',
            'status' => 404
        ];
        return response()->json($response, 404);
    }

    public function getPayPalKey()
    {
        $payCreds = DB::table('payments')
            ->select('*')->where('id', 3)->first();
        if (is_null($payCreds) || is_null($payCreds->creds)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $credsData = json_decode($payCreds->creds);
        if (is_null($credsData) || is_null($credsData->client_id)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $clientId = $credsData->client_id;
        // $secret = $credsData->client_secret;
        $response = [
            'data' => $clientId,
            'success' => true,
            'status' => 200,
        ];
        return response()->json($response, 200);
    }

    public function getFlutterwaveKey()
    {
        $payCreds = DB::table('payments')
            ->select('*')->where('id', 8)->first();
        if (is_null($payCreds) || is_null($payCreds->creds)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $credsData = json_decode($payCreds->creds);
        if (is_null($credsData) || is_null($credsData->key)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $clientId = $credsData->key;
        // $secret = $credsData->secret;
        $response = [
            'data' => $clientId,
            'success' => true,
            'status' => 200,
        ];
        return response()->json($response, 200);
    }

    public function getPaystackKey()
    {
        $payCreds = DB::table('payments')
            ->select('*')->where('id', 7)->first();
        if (is_null($payCreds) || is_null($payCreds->creds)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $credsData = json_decode($payCreds->creds);
        if (is_null($credsData) || is_null($credsData->sk)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $pk = $credsData->pk;
        $sk = $credsData->sk;
        $response = [
            'data' => $pk,
            'success' => true,
            'status' => 200,
        ];
        return response()->json($response, 200);
    }

    public function getRazorPayKey()
    {
        $payCreds = DB::table('payments')
            ->select('*')->where('id', 5)->first();
        if (is_null($payCreds) || is_null($payCreds->creds)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $credsData = json_decode($payCreds->creds);
        if (is_null($credsData) || is_null($credsData->key)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $razorKey = $credsData->key;
        $razorSecret = $credsData->secret;
        $response = [
            'data' => $razorKey,
            'success' => true,
            'status' => 200,
        ];
        return response()->json($response, 200);
    }

    public function createStripeToken(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'email' => 'required',
                'number' => 'required',
                'exp_month' => 'required',
                'exp_year' => 'required',
                'cvc' => 'required',
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 2)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->secret)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $stripe = new \Stripe\StripeClient(
                $credsData->secret
            );
            $data = $stripe->tokens->create([
                'card' => [
                    'number' => $request->number,
                    'exp_month' => $request->exp_month,
                    'exp_year' => $request->exp_year,
                    'cvc' => $request->cvc,
                ],
            ]);
            $response = [
                'success' => $data,
                'message' => 'success',
                'status' => 200
            ];
            return response()->json($response, 200);
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }

    }

    public function createCustomer(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'email' => 'required',
                'source' => 'required',
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 2)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->secret)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $stripe = new \Stripe\StripeClient(
                $credsData->secret
            );
            $data = $stripe->customers->create([
                'description' => 'Foodies-Dining Customer',
                'email' => $request->email,
                'source' => $request->source
            ]);
            $response = [
                'success' => $data,
                'message' => 'success',
                'status' => 200
            ];
            return response()->json($response, 200);
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }
    }

    public function getStripeCards(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'id' => 'required',
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 2)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->secret)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $stripe = new \Stripe\StripeClient(
                $credsData->secret
            );
            $data = $stripe->customers->allSources(
                $request->id,
                ['object' => 'card', 'limit' => 100]
            );
            $response = [
                'success' => $data,
                'message' => 'success',
                'status' => 200
            ];
            return response()->json($response, 200);
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }
    }

    public function addStripeCards(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'id' => 'required',
                'token' => 'required'
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 2)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->secret)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $stripe = new \Stripe\StripeClient(
                $credsData->secret
            );
            $data = $stripe->customers->createSource(
                $request->id,
                ['source' => $request->token]
            );
            $response = [
                'success' => $data,
                'message' => 'success',
                'status' => 200
            ];
            return response()->json($response, 200);
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }
    }

    public function createStripePayments(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'amount' => 'required',
                'currency' => 'required',
                'customer' => 'required',
                'card' => 'required',
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 2)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->secret)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $stripe = new \Stripe\StripeClient(
                $credsData->secret
            );
            $data = $stripe->charges->create([
                'amount' => $request->amount,
                'currency' => $request->currency,
                'source' => $request->card,
                'customer' => $request->customer,
                'description' => 'Foodie Order',
            ]);
            $response = [
                'success' => $data,
                'message' => 'success',
                'status' => 200
            ];
            return response()->json($response, 200);
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }
    }

    public function refundStripePayments(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'charge_id' => 'required',
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 2)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->secret)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $stripe = new \Stripe\StripeClient(
                $credsData->secret
            );
            $data = $stripe->refunds->create([
                'charge' => $request->charge_id,
            ]);
            $response = [
                'success' => $data,
                'message' => 'success',
                'status' => 200
            ];
            return response()->json($response, 200);
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }
    }

    public function success_payments()
    {
        return view('payments/success');
        ;
    }

    public function instaMOJOWebSuccess(Request $request)
    {
        $data = ProductOrders::find($request->id)->update(['status' => 0, 'pay_key' => json_encode($request->all())]);
        if (is_null($data)) {
            return redirect(url('/api/v1/failed_payments?id=' . $request['payment_id']));
        }
        return view('payments/instamojoWeb');
    }

    public function instaMOJOWebSuccessAppointments(Request $request)
    {
        $data = Appointments::find($request->id)->update(['status' => 0, 'paid' => json_encode($request->all())]);
        if (is_null($data)) {
            return redirect(url('/api/v1/failed_payments?id=' . $request['payment_id']));
        }
        return view('payments/instamojoWeb');
    }

    public function failed_payments()
    {
        return view('payments/failed');
    }

    public function payPalPay(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'amount' => 'required',
        ]);
        if ($validator->fails()) {
            $response = [
                'success' => false,
                'message' => 'Validation Error.',
                $validator->errors(),
                'status' => 500
            ];
            return response()->json($response, 404);
        }
        $payCreds = DB::table('payments')
            ->select('*')->where('id', 3)->first();
        if (is_null($payCreds) || is_null($payCreds->creds)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $credsData = json_decode($payCreds->creds);
        if (is_null($credsData) || is_null($credsData->client_id)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $clientId = $credsData->client_id;
        $url = url('/api/v1/success_payments');
        return view('payments/paypal', ['amount' => $request->amount, 'url' => $url, 'client_id' => $clientId]);
    }

    public function razorPay(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'amount' => 'required',
            'name' => 'required',
            'logo' => 'required',
            'email' => 'required',
            'app_color' => 'required'
        ]);
        if ($validator->fails()) {
            $response = [
                'success' => false,
                'message' => 'Validation Error.',
                $validator->errors(),
                'status' => 500
            ];
            return response()->json($response, 404);
        }
        $payCreds = DB::table('payments')
            ->select('*')->where('id', 5)->first();
        if (is_null($payCreds) || is_null($payCreds->creds)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $credsData = json_decode($payCreds->creds);
        if (is_null($credsData) || is_null($credsData->key)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $razorKey = $credsData->key;
        $razorSecret = $credsData->secret;
        $url = url('/api/v1/success_payments');
        return view('payments/razorpay', ['key' => $razorKey, 'amount' => $request->amount, 'url' => $url, 'name' => $request->name, 'logo' => $request->logo, 'email' => $request->email, 'app_color' => $request->app_color]);
    }

    public function flutterwavePay(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'amount' => 'required',
            'name' => 'required',
            'logo' => 'required',
            'email' => 'required',
            'app_name' => 'required',
            'code' => 'required',
            'phone' => 'required'
        ]);
        if ($validator->fails()) {
            $response = [
                'success' => false,
                'message' => 'Validation Error.',
                $validator->errors(),
                'status' => 500
            ];
            return response()->json($response, 404);
        }
        $payCreds = DB::table('payments')
            ->select('*')->where('id', 8)->first();
        if (is_null($payCreds) || is_null($payCreds->creds)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $credsData = json_decode($payCreds->creds);
        if (is_null($credsData) || is_null($credsData->key)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $clientId = $credsData->key;
        $successURL = url('/api/v1/success_payments');
        $errorCallBack = url('/api/v1/failed_payments');
        return view(
            'payments/flutterwave',
            ['key' => $clientId, 'amount' => $request->amount, 'code' => $request->code, 'callback' => $successURL, 'errorCallBack' => $errorCallBack, 'name' => $request->name, 'logo' => $request->logo, 'phone' => $request->phone, 'email' => $request->email, 'app_name' => $request->app_name]
        );
    }

    public function paystackPay(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'amount' => 'required',
            'first_name' => 'required',
            'last_name' => 'required',
            'email' => 'required',
            'ref' => 'required'
        ]);
        if ($validator->fails()) {
            $response = [
                'success' => false,
                'message' => 'Validation Error.',
                $validator->errors(),
                'status' => 500
            ];
            return response()->json($response, 404);
        }
        $payCreds = DB::table('payments')
            ->select('*')->where('id', 7)->first();
        if (is_null($payCreds) || is_null($payCreds->creds)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $credsData = json_decode($payCreds->creds);
        if (is_null($credsData) || is_null($credsData->sk)) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
        $pk = $credsData->pk;
        $sk = $credsData->sk;
        $successURL = url('/api/v1/success_payments');
        $errorCallBack = url('/api/v1/failed_payments');
        return view(
            'payments/paystack',
            ['key' => $pk, 'ref' => $request->ref, 'amount' => $request->amount, 'sucessCallBack' => $successURL, 'errorCallBack' => $errorCallBack, 'first_name' => $request->first_name, 'last_name' => $request->last_name, 'email' => $request->email]
        );
    }

    public function payKunPay()
    {
        return view('payments/paykun');
    }

    public function VerifyRazorPurchase(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'id' => 'required',
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 5)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->key)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $razorKey = $credsData->key;
            $razorSecret = $credsData->secret;
            $client = new \GuzzleHttp\Client();
            $res = $client->get('https://api.razorpay.com/v1/payments/' . $request->id, ['auth' => [$razorKey, $razorSecret]]);
            $data = json_decode($res->getBody()->getContents());
            $bodyArray = [
                'amount' => $data->amount,
                'currency' => $data->currency
            ];

            $response = $client->request(
                'POST',
                'https://api.razorpay.com/v1/payments/' . $request->id . '/capture',
                [
                    'headers' =>
                        [
                            'Accept' => 'application/json',
                            // 'Accept-Language' => 'en_US',
                            'Content-Type' => 'application/json',
                        ],
                    'body' => json_encode($bodyArray),
                    'auth' => [$razorKey, $razorSecret, 'basic']
                ]
            );
            $captureResponse = json_decode($response->getBody()->getContents());
            $response = [
                'success' => $captureResponse,
                'message' => 'success',
                'status' => 200
            ];
            return $response;
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }

    }

    public function capureRazorPay(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'id' => 'required',
                'currency' => 'required',
                'amount' => 'required'
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 5)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->key)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $razorKey = $credsData->key;
            $razorSecret = $credsData->secret;
            $client = new \GuzzleHttp\Client();

            $bodyArray = [
                'amount' => $request->amount,
                'currency' => $request->currency
            ];

            $response = $client->request(
                'POST',
                'https://api.razorpay.com/v1/payments/' . $request->id . '/capture',
                [
                    'headers' =>
                        [
                            'Accept' => 'application/json',
                            // 'Accept-Language' => 'en_US',
                            'Content-Type' => 'application/json',
                        ],
                    'body' => json_encode($bodyArray),
                    'auth' => [$razorKey, $razorSecret, 'basic']
                ]
            );
            $data = json_decode($response->getBody(), true);
            $response = [
                'success' => $data,
                'message' => 'success',
                'status' => 200
            ];
            return $response;
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }
    }

    public function instamojoPay(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'amount' => 'required',
                'buyer_name' => 'required',
                'purpose' => 'required',
                'redirect_url' => 'required',
                'phone' => 'required',
                'webhook' => 'required',
                'email' => 'required',
                'allow_repeated_payments' => 'required',
                'send_email' => 'required',
                'send_sms' => 'required',
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 6)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->key)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $instaMode = $credsData->env;
            $instaKey = $credsData->key;
            $instaToken = $credsData->token;
            $url = '';
            if ($instaMode === 'TEST') {
                $url = 'https://test.instamojo.com/api/1.1/payment-requests/';
            } else {
                $url = 'https://www.instamojo.com/api/1.1/payment-requests/';
            }
            $paramList = [
                'amount' => $request->amount,
                'buyer_name' => $request->buyer_name,
                'purpose' => $request->purpose,
                'redirect_url' => $request->redirect_url,
                'phone' => $request->phone,
                'webhook' => $request->webhook,
                'email' => $request->email,
                'allow_repeated_payments' => $request->allow_repeated_payments,
                'send_email' => $request->send_email,
                'send_sms' => $request->send_sms,
            ];
            $client = new \GuzzleHttp\Client();

            $res = $client->request('POST', $url, [
                'headers' => ['X-Api-Key' => $instaKey, 'X-Auth-Token' => $instaToken],
                'form_params' => $paramList
            ]);
            $data = json_decode($res->getBody()->getContents());
            $response = [
                'success' => $data,
                'message' => 'success',
                'status' => 200
            ];
            return $response;
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }
    }

    public function instaMOJORefund(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'id' => 'required',
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 6)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->key)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $instaMode = $credsData->env;
            $instaKey = $credsData->key;
            $instaToken = $credsData->token;
            $url = '';
            if ($instaMode === 'TEST') {
                $url = 'https://test.instamojo.com/api/1.1/refunds/';
            } else {
                $url = 'https://www.instamojo.com/api/1.1/refunds/';
            }

            $paramList = [
                'payment_id' => $request->id,
                'type' => 'QFL',
                'body' => 'Refund & Reject Foodies order'
            ];
            $client = new \GuzzleHttp\Client();

            $res = $client->request('POST', $url, [
                'headers' => ['X-Api-Key' => $instaKey, 'X-Auth-Token' => $instaToken],
                'form_params' => $paramList,
            ]);
            $data = json_decode($res->getBody()->getContents());
            $response = [
                'success' => $data,
                'message' => 'success',
                'status' => 200
            ];
            return $response;
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }
    }

    public function refundFlutterwave(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'ref' => 'required',
                'amount' => 'required'
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 8)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->key)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $clientId = $credsData->key;
            $secret = $credsData->secret;
            $client = new \GuzzleHttp\Client();
            $headers = [
                'Authorization' => 'Bearer ' . $secret,
                'Accept' => 'application/json',
            ];
            $res = $client->post('https://api.flutterwave.com/v3/transactions/' . $request->ref . 'refund', [
                'headers' => $headers
            ]);
            $data = json_decode($res->getBody()->getContents());

            $response = [
                'success' => $data,
                'message' => 'success',
                'status' => 200
            ];
            return $response;
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }
    }

    public function payPalRefund(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'ref' => 'required',
                'amount' => 'required'
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $uri = 'https://api.sandbox.paypal.com/v1/oauth2/token';
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 3)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->client_id)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $clientId = $credsData->client_id;
            $secret = $credsData->client_secret;

            $client = new \GuzzleHttp\Client();
            $response = $client->request(
                'POST',
                $uri,
                [
                    'headers' =>
                        [
                            'Accept' => 'application/json',
                            'Accept-Language' => 'en_US',
                            'Content-Type' => 'application/x-www-form-urlencoded',
                        ],
                    'body' => 'grant_type=client_credentials',

                    'auth' => [$clientId, $secret, 'basic']
                ]
            );

            $data = json_decode($response->getBody(), true);

            $access_token = $data['access_token'];
            $paymentResponse = $client->request('POST', 'https://api-m.sandbox.paypal.com/v1/payments/sale/' . $request->ref . '/refund', [
                'headers' => array(
                    'Content-Type' => 'application/json',
                    'Authorization' => "Bearer $access_token",
                ),
                // 'body' => $jsonBody
            ]);


            $paymentExecutionBody = json_decode($paymentResponse->getBody()->getContents());
            // return $paymentExecutionBody;
            $response = [
                'success' => $paymentExecutionBody,
                'message' => 'success',
                'status' => 200
            ];
            return $response;
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }
    }

    public function refundPayStack(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'id' => 'required'
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 7)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->sk)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $pk = $credsData->pk;
            $sk = $credsData->sk;
            $client = new \GuzzleHttp\Client();
            $bodyRAW = array();
            $bodyRAW["transaction"] = $request->id;
            $response = $client->request(
                'POST',
                'https://api.paystack.co/refund',
                [
                    'headers' => array(
                        'Content-Type' => 'application/json',
                        'Authorization' => "Bearer " . $sk,
                    ),
                    'body' => json_encode($bodyRAW),
                ]
            );

            $data = json_decode($response->getBody(), true);
            $response = [
                'success' => $data,
                'message' => 'success',
                'status' => 200
            ];
            return $response;
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }

    }

    public function razorPayRefund(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'id' => 'required'
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 5)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->key)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $razorKey = $credsData->key;
            $razorSecret = $credsData->secret;

            $client = new \GuzzleHttp\Client();
            $response = $client->request(
                'POST',
                'https://api.razorpay.com/v1/payments/' . $request->id . '/refund',
                [
                    'headers' =>
                        [
                            'Accept' => 'application/json',
                            'Accept-Language' => 'en_US',
                            'Content-Type' => 'application/x-www-form-urlencoded',
                        ],
                    'auth' => [$razorKey, $razorSecret, 'basic']
                ]
            );

            $data = json_decode($response->getBody(), true);
            $response = [
                'success' => $data,
                'message' => 'success',
                'status' => 200
            ];
            return $response;
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }

    }

    public function stripeAppCheckout(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'amount' => 'required',
            ]);
            if ($validator->fails()) {
                return redirect(url('/api/v1/failed_payments'));
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 2)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                return redirect(url('/api/v1/failed_payments'));
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->secret)) {
                return redirect(url('/api/v1/failed_payments'));
            }
            $currencyCode = $payCreds->currency_code;
            $stripe = new \Stripe\StripeClient(
                $credsData->secret
            );
            $priceData = $stripe->prices->create([
                'currency' => $currencyCode,
                'unit_amount' => $request->amount,
                'product_data' => ['name' => 'Order Payment'],
            ]);
            if (is_null($priceData) || is_null($priceData->id)) {
                return redirect(url('/api/v1/failed_payments'));
            }
            $successURL = url('/api/v1/stripe_processing_payment?session_id={CHECKOUT_SESSION_ID}');
            $errorCallBack = url('/api/v1/failed_payments');
            $stripePayLink = $stripe->checkout->sessions->create([
                'success_url' => $successURL,
                'cancel_url' => $errorCallBack,
                'line_items' => [
                    [
                        'price' => $priceData->id,
                        'quantity' => 1,
                    ],
                ],
                'mode' => 'payment',
                'billing_address_collection' => 'required',
                'metadata' => [
                    'customer_name' => 'stripe payout',
                    'customer_address' => 'stripe payout'
                ],
            ]);
            if (is_null($stripePayLink) || is_null($stripePayLink->url)) {
                return redirect(url('/api/v1/failed_payments'));
            }
            return redirect()->away($stripePayLink->url);

        } catch (\Throwable $e) {
            return redirect(url('/api/v1/failed_payments'));
        }
    }

    public function stripeProcessPayment(Request $request)
    {
        try {
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 2)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                return redirect(url('/api/v1/failed_payments'));
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->secret)) {
                return redirect(url('/api/v1/failed_payments'));
            }
            $stripe = new \Stripe\StripeClient(
                $credsData->secret
            );
            $sessionData = $stripe->checkout->sessions->retrieve($request->session_id);
            if (is_null($sessionData) || is_null($sessionData->id) || is_null($sessionData->payment_intent)) {
                return redirect(url('/api/v1/failed_payments'));
            }
            return redirect(url('/api/v1/success_payments?session_id=' . $sessionData->payment_intent));
        } catch (\Throwable $th) {
            return redirect(url('/api/v1/failed_payments'));
        }

    }

    public function stripeRefundPaymentIntent(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'charge_id' => 'required',
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Validation Error.',
                    $validator->errors(),
                    'status' => 500
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 2)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->secret)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $stripe = new \Stripe\StripeClient(
                $credsData->secret
            );
            $data = $stripe->refunds->create(['payment_intent' => $request->charge_id]);
            $response = [
                'success' => $data,
                'message' => 'success',
                'status' => 200
            ];
            return response()->json($response, 200);
        } catch (\Throwable $e) {
            return response()->json($e->getMessage(), 200);
        }
    }

    public function stripeWebCheckout(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'amount' => 'required',
                'order_id' => 'required',
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 2)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->secret)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $currencyCode = $payCreds->currency_code;
            $stripe = new \Stripe\StripeClient(
                $credsData->secret
            );
            $priceData = $stripe->prices->create([
                'currency' => $currencyCode,
                'unit_amount' => $request->amount,
                'product_data' => ['name' => 'Order Payment'],
            ]);
            if (is_null($priceData) || is_null($priceData->id)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $successURL = url('/api/v1/stripe_web_processing_payment?session_id={CHECKOUT_SESSION_ID}&order_id=' . $request->order_id);
            $stripePayLink = $stripe->checkout->sessions->create([
                'success_url' => $successURL,
                'line_items' => [
                    [
                        'price' => $priceData->id,
                        'quantity' => 1,
                    ],
                ],
                'mode' => 'payment',
                'billing_address_collection' => 'required',
                'metadata' => [
                    'customer_name' => 'stripe payout',
                    'customer_address' => 'stripe payout'
                ],
            ]);
            if (is_null($stripePayLink) || is_null($stripePayLink->url)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $response = [
                'success' => $stripePayLink,
                'message' => 'success',
                'status' => 200
            ];
            return $response;
        } catch (\Throwable $th) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
    }

    public function stripeWebProcessPayment(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'session_id' => 'required',
                'order_id' => 'required',
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 2)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->secret)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $stripe = new \Stripe\StripeClient(
                $credsData->secret
            );
            $sessionData = $stripe->checkout->sessions->retrieve($request->session_id);
            if (is_null($sessionData) || is_null($sessionData->id) || is_null($sessionData->payment_intent)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $saveKey = ['key' => $sessionData->payment_intent];
            $data = Appointments::find($request->order_id)->update(['status' => 0, 'paid' => json_encode($saveKey)]);
            if (is_null($data)) {
                return redirect(url('/api/v1/failed_payments?id=' . $request['order_id']));
            }
            return view('payments/instamojoWeb');

        } catch (\Throwable $th) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
    }

    public function stripeWebCheckoutProducts(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'amount' => 'required',
                'order_id' => 'required',
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 2)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->secret)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $currencyCode = $payCreds->currency_code;
            $stripe = new \Stripe\StripeClient(
                $credsData->secret
            );
            $priceData = $stripe->prices->create([
                'currency' => $currencyCode,
                'unit_amount' => $request->amount,
                'product_data' => ['name' => 'Order Payment'],
            ]);
            if (is_null($priceData) || is_null($priceData->id)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $successURL = url('/api/v1/stripe_web_processing_payment_product?session_id={CHECKOUT_SESSION_ID}&order_id=' . $request->order_id);
            $stripePayLink = $stripe->checkout->sessions->create([
                'success_url' => $successURL,
                'line_items' => [
                    [
                        'price' => $priceData->id,
                        'quantity' => 1,
                    ],
                ],
                'mode' => 'payment',
                'billing_address_collection' => 'required',
                'metadata' => [
                    'customer_name' => 'stripe payout',
                    'customer_address' => 'stripe payout'
                ],
            ]);
            if (is_null($stripePayLink) || is_null($stripePayLink->url)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $response = [
                'success' => $stripePayLink,
                'message' => 'success',
                'status' => 200
            ];
            return $response;
        } catch (\Throwable $th) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
    }

    public function stripeWebProcessPaymentProduct(Request $request)
    {
        try {
            $validator = Validator::make($request->all(), [
                'session_id' => 'required',
                'order_id' => 'required',
            ]);
            if ($validator->fails()) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $payCreds = DB::table('payments')
                ->select('*')->where('id', 2)->first();
            if (is_null($payCreds) || is_null($payCreds->creds)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $credsData = json_decode($payCreds->creds);
            if (is_null($credsData) || is_null($credsData->secret)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $stripe = new \Stripe\StripeClient(
                $credsData->secret
            );
            $sessionData = $stripe->checkout->sessions->retrieve($request->session_id);
            if (is_null($sessionData) || is_null($sessionData->id) || is_null($sessionData->payment_intent)) {
                $response = [
                    'success' => false,
                    'message' => 'Payment issue please contact administrator',
                    'status' => 404
                ];
                return response()->json($response, 404);
            }
            $saveKey = ['key' => $sessionData->payment_intent];
            $data = ProductOrders::find($request->order_id)->update(['status' => 0, 'pay_key' => json_encode($saveKey)]);
            if (is_null($data)) {
                return redirect(url('/api/v1/failed_payments?id=' . $request['order_id']));
            }
            return view('payments/instamojoWeb');

        } catch (\Throwable $th) {
            $response = [
                'success' => false,
                'message' => 'Payment issue please contact administrator',
                'status' => 404
            ];
            return response()->json($response, 404);
        }
    }
}