HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/ai.naniguide.com/app/Http/Controllers/Admin/PaymentGatewayController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Model\PaymentGateway;
use App\Library\Facades\Billing;

class PaymentGatewayController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        return view('admin.payment_gateways.index');
    }

    public function selectType(Request $request)
    {
        $paymentGatewayServices = Billing::getGateways();

        return view('admin.payment_gateways.selectType', [
            'paymentGatewayServices' => $paymentGatewayServices,
        ]);
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function list(Request $request)
    {
        $paymentGateways = PaymentGateway::global()
            ->search($request->keyword)
            ->orderBy($request->sort_order, $request->sort_direction ? $request->sort_direction : 'asc')
            ->paginate($request->per_page);

        return view('admin.payment_gateways._list', [
            'paymentGateways' => $paymentGateways,
        ]);
    }

    public function create(Request $request)
    {
        // init
        $paymentGateway = PaymentGateway::newDefault($request->type);

        //
        return view('admin.payment_gateways.create', [
            'paymentGateway' => $paymentGateway,
            'paymentGatewayService' => Billing::getGateways()[$paymentGateway->type],
        ]);
    }

    public function store(Request $request)
    {
        // init
        $paymentGateway = PaymentGateway::newDefault($request->type);

        // Try to save
        $validator = $paymentGateway->savePaymentGateway(
            $request->name,
            $request->description,
            $request->gateway_data
        );

        // if error
        if ($validator->fails()) {
            return response()->view('admin.payment_gateways.create', [
                'paymentGateway' => $paymentGateway,
                'paymentGatewayService' => Billing::getGateways()[$paymentGateway->type],
                'errors' => $validator->errors(),
            ], 400);
        }

        // Send messenge
        $request->session()->flash('alert-success', trans('messages.payment_gateway.created'));

        // redirect
        return redirect()->action('Admin\PaymentGatewayController@index');
    }

    public function edit(Request $request, $uid)
    {
        // init
        $paymentGateway = PaymentGateway::global()->where('uid', $uid)->first();

        //
        return view('admin.payment_gateways.edit', [
            'paymentGateway' => $paymentGateway,
            'paymentGatewayService' => Billing::getGateways()[$paymentGateway->type],
        ]);
    }

    public function update(Request $request, $uid)
    {
        // init
        $paymentGateway = PaymentGateway::global()->where('uid', $uid)->first();

        // Try to save
        $validator = $paymentGateway->savePaymentGateway(
            $request->name,
            $request->description,
            $request->gateway_data
        );

        // if error
        if ($validator->fails()) {
            return response()->view('admin.payment_gateways.edit', [
                'paymentGateway' => $paymentGateway,
                'paymentGatewayService' => Billing::getGateways()[$paymentGateway->type],
                'errors' => $validator->errors(),
            ], 400);
        }

        // Send messenge
        $request->session()->flash('alert-success', trans('messages.payment_gateway.updated'));

        // redirect
        return redirect()->action('Admin\PaymentGatewayController@index');
    }

    public function delete(Request $request, $uid)
    {
        // init
        $paymentGateway = PaymentGateway::global()->where('uid', $uid)->first();

        // delete record
        $paymentGateway->delete();

        // retur alert
        return response()->json([
            'status' => 'success',
            'message' => trans('messages.payment_gateway.deleted'),
        ]);
    }

    public function disable(Request $request, $uid)
    {
        // init
        $paymentGateway = PaymentGateway::global()->where('uid', $uid)->first();

        // delete record
        $paymentGateway->disable();

        // retur alert
        return response()->json([
            'status' => 'success',
            'message' => trans('messages.payment_gateway.disabled'),
        ]);
    }

    public function enable(Request $request, $uid)
    {
        // init
        $paymentGateway = PaymentGateway::global()->where('uid', $uid)->first();

        // delete record
        $paymentGateway->enable();

        // retur alert
        return response()->json([
            'status' => 'success',
            'message' => trans('messages.payment_gateway.enabled'),
        ]);
    }

    public function settings(Request $request)
    {
        // return view
        return view('admin.payment_gateways.settings');
    }

    public function testConnection(Request $request, $uid)
    {
        $paymentGateway = PaymentGateway::global()->where('uid', $uid)->first();

        try {
            $service = Billing::resolveService($paymentGateway);

            if ($service instanceof \App\Cashier\Contracts\RemoteSubscriptionGatewayInterface) {
                // Try fetching remote plans as a connection test
                $plans = app(\App\Services\Subscription\SubscriptionManagementService::class)
                    ->fetchRemotePlans($paymentGateway);
                return response()->json([
                    'success' => true,
                    'message' => 'Connected! Found ' . count($plans) . ' remote plan(s).',
                ]);
            }

            // For non-remote gateways, just check if the service is active
            if (method_exists($service, 'isActive') && $service->isActive()) {
                return response()->json([
                    'success' => true,
                    'message' => 'Gateway is configured and active.',
                ]);
            }

            return response()->json([
                'success' => false,
                'message' => 'Gateway is not active. Please check your API credentials.',
            ]);
        } catch (\Throwable $e) {
            return response()->json([
                'success' => false,
                'message' => 'Connection failed: ' . $e->getMessage(),
            ]);
        }
    }
}