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(),
]);
}
}
}