603 lines
31 KiB
PHP
603 lines
31 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Settings;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\PaymentSetting;
|
|
use Illuminate\Http\Request;
|
|
use Inertia\Inertia;
|
|
|
|
class PaymentSettingController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
$paymentSettings = getPaymentSettings();
|
|
|
|
return Inertia::render('settings/index', [
|
|
'paymentSettings' => $paymentSettings,
|
|
]);
|
|
}
|
|
|
|
public function getPaymentMethods()
|
|
{
|
|
$superAdminId = \App\Models\User::where('type', 'superadmin')->first()?->id;
|
|
|
|
if (!$superAdminId) {
|
|
return response()->json([]);
|
|
}
|
|
|
|
$paymentSettings = getPaymentSettings($superAdminId);
|
|
|
|
// Filter out sensitive credentials and only return safe configuration
|
|
$safeSettings = $this->filterSensitiveData($paymentSettings);
|
|
|
|
// Add default currency to payment settings
|
|
$settings = settings($superAdminId);
|
|
$safeSettings['defaultCurrency'] = $settings['defaultCurrency'] ?? 'usd';
|
|
|
|
return response()->json($safeSettings);
|
|
}
|
|
public function store(Request $request)
|
|
{
|
|
try {
|
|
$validatedData = $request->validate([
|
|
'stripe_key' => 'nullable|string',
|
|
'stripe_secret' => 'nullable|string',
|
|
'paypal_client_id' => 'nullable|string',
|
|
'paypal_secret_key' => 'nullable|string',
|
|
'paypal_mode' => 'in:sandbox,live',
|
|
'bank_detail' => 'nullable|string',
|
|
'razorpay_key' => 'nullable|string',
|
|
'razorpay_secret' => 'nullable|string',
|
|
'mercadopago_mode' => 'in:sandbox,live',
|
|
'mercadopago_access_token' => 'nullable|string',
|
|
'paystack_public_key' => 'nullable|string',
|
|
'paystack_secret_key' => 'nullable|string',
|
|
'flutterwave_public_key' => 'nullable|string',
|
|
'flutterwave_secret_key' => 'nullable|string',
|
|
'paytabs_profile_id' => 'nullable|string',
|
|
'paytabs_server_key' => 'nullable|string',
|
|
'paytabs_region' => 'nullable|string',
|
|
'paytabs_mode' => 'in:sandbox,live',
|
|
'skrill_merchant_id' => 'nullable|string',
|
|
'skrill_secret_word' => 'nullable|string',
|
|
'coingate_api_token' => 'nullable|string',
|
|
'coingate_mode' => 'in:sandbox,live',
|
|
'payfast_merchant_id' => 'nullable|string',
|
|
'payfast_merchant_key' => 'nullable|string',
|
|
'payfast_passphrase' => 'nullable|string',
|
|
'payfast_mode' => 'in:sandbox,live',
|
|
'tap_secret_key' => 'nullable|string',
|
|
'xendit_api_key' => 'nullable|string',
|
|
'paytr_merchant_id' => 'nullable|string',
|
|
'paytr_merchant_key' => 'nullable|string',
|
|
'paytr_merchant_salt' => 'nullable|string',
|
|
'mollie_api_key' => 'nullable|string',
|
|
'toyyibpay_category_code' => 'nullable|string',
|
|
'toyyibpay_secret_key' => 'nullable|string',
|
|
'paymentwall_public_key' => 'nullable|string',
|
|
'paymentwall_private_key' => 'nullable|string',
|
|
'sspay_secret_key' => 'nullable|string',
|
|
'sspay_category_code' => 'nullable|string',
|
|
'benefit_mode' => 'in:sandbox,live',
|
|
'benefit_secret_key' => 'nullable|string',
|
|
'benefit_public_key' => 'nullable|string',
|
|
'iyzipay_mode' => 'in:sandbox,live',
|
|
'iyzipay_secret_key' => 'nullable|string',
|
|
'iyzipay_public_key' => 'nullable|string',
|
|
'aamarpay_store_id' => 'nullable|string',
|
|
'aamarpay_signature' => 'nullable|string',
|
|
'midtrans_mode' => 'in:sandbox,live',
|
|
'midtrans_secret_key' => 'nullable|string',
|
|
'yookassa_shop_id' => 'nullable|string',
|
|
'yookassa_secret_key' => 'nullable|string',
|
|
'nepalste_mode' => 'in:sandbox,live',
|
|
'nepalste_secret_key' => 'nullable|string',
|
|
'nepalste_public_key' => 'nullable|string',
|
|
'paiement_merchant_id' => 'nullable|string',
|
|
'cinetpay_site_id' => 'nullable|string',
|
|
'cinetpay_api_key' => 'nullable|string',
|
|
'cinetpay_secret_key' => 'nullable|string',
|
|
'payhere_mode' => 'in:sandbox,live',
|
|
'payhere_merchant_id' => 'nullable|string',
|
|
'payhere_merchant_secret' => 'nullable|string',
|
|
'payhere_app_id' => 'nullable|string',
|
|
'payhere_app_secret' => 'nullable|string',
|
|
'fedapay_mode' => 'in:sandbox,live',
|
|
'fedapay_secret_key' => 'nullable|string',
|
|
'fedapay_public_key' => 'nullable|string',
|
|
'authorizenet_mode' => 'in:sandbox,live',
|
|
'authorizenet_merchant_id' => 'nullable|string',
|
|
'authorizenet_transaction_key' => 'nullable|string',
|
|
'khalti_secret_key' => 'nullable|string',
|
|
'khalti_public_key' => 'nullable|string',
|
|
'easebuzz_merchant_key' => 'nullable|string',
|
|
'easebuzz_salt_key' => 'nullable|string',
|
|
'easebuzz_environment' => 'nullable|string',
|
|
'ozow_mode' => 'in:sandbox,live',
|
|
'ozow_site_key' => 'nullable|string',
|
|
'ozow_private_key' => 'nullable|string',
|
|
'ozow_api_key' => 'nullable|string',
|
|
'cashfree_mode' => 'in:sandbox,live',
|
|
'cashfree_secret_key' => 'nullable|string',
|
|
'cashfree_public_key' => 'nullable|string',
|
|
]);
|
|
|
|
$settings = $this->preparePaymentSettings($request, $validatedData);
|
|
$this->validateEnabledPaymentMethods($request, $validatedData);
|
|
$this->savePaymentSettings($settings);
|
|
|
|
return back()->with('success', __('Payment settings saved successfully.'));
|
|
} catch (\Illuminate\Validation\ValidationException $e) {
|
|
return back()->withErrors($e->errors());
|
|
} catch (\Exception $e) {
|
|
return back()->withErrors(['error' => __('Failed to save payment settings: :message', ['message' => $e->getMessage()])]);
|
|
}
|
|
}
|
|
|
|
private function preparePaymentSettings(Request $request, array $validatedData): array
|
|
{
|
|
return [
|
|
'is_manually_enabled' => $request->boolean('is_manually_enabled'),
|
|
'is_bank_enabled' => $request->boolean('is_bank_enabled'),
|
|
'is_stripe_enabled' => $request->boolean('is_stripe_enabled'),
|
|
'is_paypal_enabled' => $request->boolean('is_paypal_enabled'),
|
|
'is_razorpay_enabled' => $request->boolean('is_razorpay_enabled'),
|
|
'is_mercadopago_enabled' => $request->boolean('is_mercadopago_enabled'),
|
|
'is_paystack_enabled' => $request->boolean('is_paystack_enabled'),
|
|
'is_flutterwave_enabled' => $request->boolean('is_flutterwave_enabled'),
|
|
'is_paytabs_enabled' => $request->boolean('is_paytabs_enabled'),
|
|
'is_skrill_enabled' => $request->boolean('is_skrill_enabled'),
|
|
'is_coingate_enabled' => $request->boolean('is_coingate_enabled'),
|
|
'is_payfast_enabled' => $request->boolean('is_payfast_enabled'),
|
|
'is_tap_enabled' => $request->boolean('is_tap_enabled'),
|
|
'is_xendit_enabled' => $request->boolean('is_xendit_enabled'),
|
|
'is_paytr_enabled' => $request->boolean('is_paytr_enabled'),
|
|
'is_mollie_enabled' => $request->boolean('is_mollie_enabled'),
|
|
'is_toyyibpay_enabled' => $request->boolean('is_toyyibpay_enabled'),
|
|
'is_paymentwall_enabled' => $request->boolean('is_paymentwall_enabled'),
|
|
'is_sspay_enabled' => $request->boolean('is_sspay_enabled'),
|
|
'is_benefit_enabled' => $request->boolean('is_benefit_enabled'),
|
|
'is_iyzipay_enabled' => $request->boolean('is_iyzipay_enabled'),
|
|
'is_aamarpay_enabled' => $request->boolean('is_aamarpay_enabled'),
|
|
'is_midtrans_enabled' => $request->boolean('is_midtrans_enabled'),
|
|
'is_yookassa_enabled' => $request->boolean('is_yookassa_enabled'),
|
|
'is_nepalste_enabled' => $request->boolean('is_nepalste_enabled'),
|
|
'is_paiement_enabled' => $request->boolean('is_paiement_enabled'),
|
|
'is_cinetpay_enabled' => $request->boolean('is_cinetpay_enabled'),
|
|
'is_payhere_enabled' => $request->boolean('is_payhere_enabled'),
|
|
'is_fedapay_enabled' => $request->boolean('is_fedapay_enabled'),
|
|
'is_authorizenet_enabled' => $request->boolean('is_authorizenet_enabled'),
|
|
'is_khalti_enabled' => $request->boolean('is_khalti_enabled'),
|
|
'is_easebuzz_enabled' => $request->boolean('is_easebuzz_enabled'),
|
|
'is_ozow_enabled' => $request->boolean('is_ozow_enabled'),
|
|
'is_cashfree_enabled' => $request->boolean('is_cashfree_enabled'),
|
|
'paypal_mode' => $validatedData['paypal_mode'] ?? 'sandbox',
|
|
'mercadopago_mode' => $validatedData['mercadopago_mode'] ?? 'sandbox',
|
|
'bank_detail' => $validatedData['bank_detail'],
|
|
'stripe_key' => $validatedData['stripe_key'],
|
|
'stripe_secret' => $validatedData['stripe_secret'],
|
|
'paypal_client_id' => $validatedData['paypal_client_id'],
|
|
'paypal_secret_key' => $validatedData['paypal_secret_key'],
|
|
'razorpay_key' => $validatedData['razorpay_key'],
|
|
'razorpay_secret' => $validatedData['razorpay_secret'],
|
|
'mercadopago_access_token' => $validatedData['mercadopago_access_token'],
|
|
'paystack_public_key' => $validatedData['paystack_public_key'],
|
|
'paystack_secret_key' => $validatedData['paystack_secret_key'],
|
|
'flutterwave_public_key' => $validatedData['flutterwave_public_key'],
|
|
'flutterwave_secret_key' => $validatedData['flutterwave_secret_key'],
|
|
'paytabs_profile_id' => $validatedData['paytabs_profile_id'],
|
|
'paytabs_server_key' => $validatedData['paytabs_server_key'],
|
|
'paytabs_region' => $validatedData['paytabs_region'],
|
|
'paytabs_mode' => $validatedData['paytabs_mode'] ?? 'sandbox',
|
|
'skrill_merchant_id' => $validatedData['skrill_merchant_id'],
|
|
'skrill_secret_word' => $validatedData['skrill_secret_word'],
|
|
'coingate_api_token' => $validatedData['coingate_api_token'],
|
|
'coingate_mode' => $validatedData['coingate_mode'] ?? 'sandbox',
|
|
'payfast_merchant_id' => $validatedData['payfast_merchant_id'],
|
|
'payfast_merchant_key' => $validatedData['payfast_merchant_key'],
|
|
'payfast_passphrase' => $validatedData['payfast_passphrase'],
|
|
'payfast_mode' => $validatedData['payfast_mode'] ?? 'sandbox',
|
|
'tap_secret_key' => $validatedData['tap_secret_key'],
|
|
'xendit_api_key' => $validatedData['xendit_api_key'],
|
|
'paytr_merchant_id' => $validatedData['paytr_merchant_id'],
|
|
'paytr_merchant_key' => $validatedData['paytr_merchant_key'],
|
|
'paytr_merchant_salt' => $validatedData['paytr_merchant_salt'],
|
|
'mollie_api_key' => $validatedData['mollie_api_key'],
|
|
'toyyibpay_category_code' => $validatedData['toyyibpay_category_code'],
|
|
'toyyibpay_secret_key' => $validatedData['toyyibpay_secret_key'],
|
|
'paymentwall_public_key' => $validatedData['paymentwall_public_key'],
|
|
'paymentwall_private_key' => $validatedData['paymentwall_private_key'],
|
|
'sspay_secret_key' => $validatedData['sspay_secret_key'],
|
|
'sspay_category_code' => $validatedData['sspay_category_code'],
|
|
'benefit_mode' => $validatedData['benefit_mode'] ?? 'sandbox',
|
|
'benefit_secret_key' => $validatedData['benefit_secret_key'],
|
|
'benefit_public_key' => $validatedData['benefit_public_key'],
|
|
'iyzipay_mode' => $validatedData['iyzipay_mode'] ?? 'sandbox',
|
|
'iyzipay_secret_key' => $validatedData['iyzipay_secret_key'],
|
|
'iyzipay_public_key' => $validatedData['iyzipay_public_key'],
|
|
'aamarpay_store_id' => $validatedData['aamarpay_store_id'],
|
|
'aamarpay_signature' => $validatedData['aamarpay_signature'],
|
|
'midtrans_mode' => $validatedData['midtrans_mode'] ?? 'sandbox',
|
|
'midtrans_secret_key' => $validatedData['midtrans_secret_key'],
|
|
'yookassa_shop_id' => $validatedData['yookassa_shop_id'],
|
|
'yookassa_secret_key' => $validatedData['yookassa_secret_key'],
|
|
'nepalste_mode' => $validatedData['nepalste_mode'] ?? 'sandbox',
|
|
'nepalste_secret_key' => $validatedData['nepalste_secret_key'],
|
|
'nepalste_public_key' => $validatedData['nepalste_public_key'],
|
|
'paiement_merchant_id' => $validatedData['paiement_merchant_id'],
|
|
'cinetpay_site_id' => $validatedData['cinetpay_site_id'],
|
|
'cinetpay_api_key' => $validatedData['cinetpay_api_key'],
|
|
'cinetpay_secret_key' => $validatedData['cinetpay_secret_key'],
|
|
'payhere_mode' => $validatedData['payhere_mode'] ?? 'sandbox',
|
|
'payhere_merchant_id' => $validatedData['payhere_merchant_id'],
|
|
'payhere_merchant_secret' => $validatedData['payhere_merchant_secret'],
|
|
'payhere_app_id' => $validatedData['payhere_app_id'],
|
|
'payhere_app_secret' => $validatedData['payhere_app_secret'],
|
|
'fedapay_mode' => $validatedData['fedapay_mode'] ?? 'sandbox',
|
|
'fedapay_secret_key' => $validatedData['fedapay_secret_key'],
|
|
'fedapay_public_key' => $validatedData['fedapay_public_key'],
|
|
'authorizenet_mode' => $validatedData['authorizenet_mode'] ?? 'sandbox',
|
|
'authorizenet_merchant_id' => $validatedData['authorizenet_merchant_id'],
|
|
'authorizenet_transaction_key' => $validatedData['authorizenet_transaction_key'],
|
|
'khalti_secret_key' => $validatedData['khalti_secret_key'],
|
|
'khalti_public_key' => $validatedData['khalti_public_key'],
|
|
'easebuzz_merchant_key' => $validatedData['easebuzz_merchant_key'],
|
|
'easebuzz_salt_key' => $validatedData['easebuzz_salt_key'],
|
|
'easebuzz_environment' => $validatedData['easebuzz_environment'],
|
|
'ozow_mode' => $validatedData['ozow_mode'] ?? 'sandbox',
|
|
'ozow_site_key' => $validatedData['ozow_site_key'],
|
|
'ozow_private_key' => $validatedData['ozow_private_key'],
|
|
'ozow_api_key' => $validatedData['ozow_api_key'],
|
|
'cashfree_mode' => $validatedData['cashfree_mode'] ?? 'sandbox',
|
|
'cashfree_secret_key' => $validatedData['cashfree_secret_key'],
|
|
'cashfree_public_key' => $validatedData['cashfree_public_key'],
|
|
];
|
|
}
|
|
|
|
private function validateEnabledPaymentMethods(Request $request, array $validatedData): void
|
|
{
|
|
$errors = [];
|
|
|
|
if ($request->boolean('is_stripe_enabled')) {
|
|
$config = ['key' => $validatedData['stripe_key'], 'secret' => $validatedData['stripe_secret']];
|
|
$validation = validatePaymentMethodConfig('stripe', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_paypal_enabled')) {
|
|
$config = ['client_id' => $validatedData['paypal_client_id'], 'secret' => $validatedData['paypal_secret_key']];
|
|
$validation = validatePaymentMethodConfig('paypal', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_razorpay_enabled')) {
|
|
$config = ['key' => $validatedData['razorpay_key'], 'secret' => $validatedData['razorpay_secret']];
|
|
$validation = validatePaymentMethodConfig('razorpay', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_mercadopago_enabled')) {
|
|
$config = ['access_token' => $validatedData['mercadopago_access_token']];
|
|
$validation = validatePaymentMethodConfig('mercadopago', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_paystack_enabled')) {
|
|
$config = ['public_key' => $validatedData['paystack_public_key'], 'secret_key' => $validatedData['paystack_secret_key']];
|
|
$validation = validatePaymentMethodConfig('paystack', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_flutterwave_enabled')) {
|
|
$config = ['public_key' => $validatedData['flutterwave_public_key'], 'secret_key' => $validatedData['flutterwave_secret_key']];
|
|
$validation = validatePaymentMethodConfig('flutterwave', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_bank_enabled')) {
|
|
$config = ['details' => $validatedData['bank_detail']];
|
|
$validation = validatePaymentMethodConfig('bank', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_paytabs_enabled')) {
|
|
$config = ['server_key' => $validatedData['paytabs_server_key'], 'profile_id' => $validatedData['paytabs_profile_id'], 'region' => $validatedData['paytabs_region']];
|
|
$validation = validatePaymentMethodConfig('paytabs', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_skrill_enabled')) {
|
|
$config = ['merchant_id' => $validatedData['skrill_merchant_id'], 'secret_word' => $validatedData['skrill_secret_word']];
|
|
$validation = validatePaymentMethodConfig('skrill', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_coingate_enabled')) {
|
|
$config = ['api_token' => $validatedData['coingate_api_token']];
|
|
$validation = validatePaymentMethodConfig('coingate', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_payfast_enabled')) {
|
|
$config = ['merchant_id' => $validatedData['payfast_merchant_id'], 'merchant_key' => $validatedData['payfast_merchant_key']];
|
|
$validation = validatePaymentMethodConfig('payfast', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_tap_enabled')) {
|
|
$config = ['secret_key' => $validatedData['tap_secret_key']];
|
|
$validation = validatePaymentMethodConfig('tap', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_xendit_enabled')) {
|
|
$config = ['api_key' => $validatedData['xendit_api_key']];
|
|
$validation = validatePaymentMethodConfig('xendit', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_paytr_enabled')) {
|
|
$config = ['merchant_id' => $validatedData['paytr_merchant_id'], 'merchant_key' => $validatedData['paytr_merchant_key'], 'merchant_salt' => $validatedData['paytr_merchant_salt']];
|
|
$validation = validatePaymentMethodConfig('paytr', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_mollie_enabled')) {
|
|
$config = ['api_key' => $validatedData['mollie_api_key']];
|
|
$validation = validatePaymentMethodConfig('mollie', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_toyyibpay_enabled')) {
|
|
$config = ['category_code' => $validatedData['toyyibpay_category_code'], 'secret_key' => $validatedData['toyyibpay_secret_key']];
|
|
$validation = validatePaymentMethodConfig('toyyibpay', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_cashfree_enabled')) {
|
|
$config = ['public_key' => $validatedData['cashfree_public_key'], 'secret_key' => $validatedData['cashfree_secret_key']];
|
|
$validation = validatePaymentMethodConfig('cashfree', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_ozow_enabled')) {
|
|
$config = ['site_key' => $validatedData['ozow_site_key'], 'private_key' => $validatedData['ozow_private_key']];
|
|
$validation = validatePaymentMethodConfig('ozow', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_easebuzz_enabled')) {
|
|
$config = ['merchant_key' => $validatedData['easebuzz_merchant_key'], 'salt_key' => $validatedData['easebuzz_salt_key']];
|
|
$validation = validatePaymentMethodConfig('easebuzz', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_khalti_enabled')) {
|
|
$config = ['public_key' => $validatedData['khalti_public_key'], 'secret_key' => $validatedData['khalti_secret_key']];
|
|
$validation = validatePaymentMethodConfig('khalti', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_authorizenet_enabled')) {
|
|
$config = ['merchant_id' => $validatedData['authorizenet_merchant_id'], 'transaction_key' => $validatedData['authorizenet_transaction_key']];
|
|
$validation = validatePaymentMethodConfig('authorizenet', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_fedapay_enabled')) {
|
|
$config = ['public_key' => $validatedData['fedapay_public_key'], 'secret_key' => $validatedData['fedapay_secret_key']];
|
|
$validation = validatePaymentMethodConfig('fedapay', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_payhere_enabled')) {
|
|
$config = ['merchant_id' => $validatedData['payhere_merchant_id'], 'merchant_secret' => $validatedData['payhere_merchant_secret']];
|
|
$validation = validatePaymentMethodConfig('payhere', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_cinetpay_enabled')) {
|
|
$config = ['site_id' => $validatedData['cinetpay_site_id'], 'api_key' => $validatedData['cinetpay_api_key']];
|
|
$validation = validatePaymentMethodConfig('cinetpay', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_paiement_enabled')) {
|
|
$config = ['merchant_id' => $validatedData['paiement_merchant_id']];
|
|
$validation = validatePaymentMethodConfig('paiement', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_nepalste_enabled')) {
|
|
$config = ['public_key' => $validatedData['nepalste_public_key'], 'secret_key' => $validatedData['nepalste_secret_key']];
|
|
$validation = validatePaymentMethodConfig('nepalste', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_yookassa_enabled')) {
|
|
$config = ['shop_id' => $validatedData['yookassa_shop_id'], 'secret_key' => $validatedData['yookassa_secret_key']];
|
|
$validation = validatePaymentMethodConfig('yookassa', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_midtrans_enabled')) {
|
|
$config = ['secret_key' => $validatedData['midtrans_secret_key']];
|
|
$validation = validatePaymentMethodConfig('midtrans', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_aamarpay_enabled')) {
|
|
$config = ['store_id' => $validatedData['aamarpay_store_id'], 'signature' => $validatedData['aamarpay_signature']];
|
|
$validation = validatePaymentMethodConfig('aamarpay', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_iyzipay_enabled')) {
|
|
$config = ['public_key' => $validatedData['iyzipay_public_key'], 'secret_key' => $validatedData['iyzipay_secret_key']];
|
|
$validation = validatePaymentMethodConfig('iyzipay', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_paymentwall_enabled')) {
|
|
$config = ['public_key' => $validatedData['paymentwall_public_key'], 'private_key' => $validatedData['paymentwall_private_key']];
|
|
$validation = validatePaymentMethodConfig('paymentwall', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_sspay_enabled')) {
|
|
$config = ['secret_key' => $validatedData['sspay_secret_key']];
|
|
$validation = validatePaymentMethodConfig('sspay', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if ($request->boolean('is_benefit_enabled')) {
|
|
$config = ['public_key' => $validatedData['benefit_public_key'], 'secret_key' => $validatedData['benefit_secret_key']];
|
|
$validation = validatePaymentMethodConfig('benefit', $config);
|
|
if (!$validation['valid']) {
|
|
$errors = array_merge($errors, $validation['errors']);
|
|
}
|
|
}
|
|
|
|
if (!empty($errors)) {
|
|
throw \Illuminate\Validation\ValidationException::withMessages([
|
|
'payment_methods' => $errors
|
|
]);
|
|
}
|
|
}
|
|
|
|
private function savePaymentSettings(array $settings): void
|
|
{
|
|
foreach ($settings as $key => $value) {
|
|
updatePaymentSetting($key, $value);
|
|
}
|
|
}
|
|
|
|
public function getEnabledMethods()
|
|
{
|
|
$enabledMethods = getEnabledPaymentMethods();
|
|
|
|
return response()->json($enabledMethods);
|
|
}
|
|
|
|
/**
|
|
* Filter out sensitive payment gateway credentials
|
|
*
|
|
* @param array $settings
|
|
* @return array
|
|
*/
|
|
private function filterSensitiveData(array $settings): array
|
|
{
|
|
$safeSettings = [];
|
|
|
|
// Only include enabled status and safe configuration
|
|
$enabledKeys = [
|
|
'is_manually_enabled', 'is_bank_enabled', 'is_stripe_enabled', 'is_paypal_enabled',
|
|
'is_razorpay_enabled', 'is_mercadopago_enabled', 'is_paystack_enabled', 'is_flutterwave_enabled',
|
|
'is_paytabs_enabled', 'is_skrill_enabled', 'is_coingate_enabled', 'is_payfast_enabled',
|
|
'is_tap_enabled', 'is_xendit_enabled', 'is_paytr_enabled', 'is_mollie_enabled',
|
|
'is_toyyibpay_enabled', 'is_paymentwall_enabled', 'is_sspay_enabled', 'is_benefit_enabled',
|
|
'is_iyzipay_enabled', 'is_aamarpay_enabled', 'is_midtrans_enabled', 'is_yookassa_enabled',
|
|
'is_nepalste_enabled', 'is_paiement_enabled', 'is_cinetpay_enabled', 'is_payhere_enabled',
|
|
'is_fedapay_enabled', 'is_authorizenet_enabled', 'is_khalti_enabled', 'is_easebuzz_enabled',
|
|
'is_ozow_enabled', 'is_cashfree_enabled'
|
|
];
|
|
|
|
$modeKeys = [
|
|
'paypal_mode', 'mercadopago_mode', 'paytabs_mode', 'coingate_mode', 'payfast_mode',
|
|
'benefit_mode', 'iyzipay_mode', 'midtrans_mode', 'nepalste_mode', 'payhere_mode',
|
|
'fedapay_mode', 'authorizenet_mode', 'ozow_mode', 'cashfree_mode'
|
|
];
|
|
|
|
// Keys needed by frontend payment components (safe to expose)
|
|
$frontendKeys = [
|
|
// Public keys for SDK initialization
|
|
'stripe_key', 'razorpay_key', 'paystack_public_key', 'flutterwave_public_key',
|
|
'khalti_public_key', 'cashfree_public_key', 'iyzipay_public_key', 'benefit_public_key',
|
|
'fedapay_public_key', 'nepalste_public_key', 'paymentwall_public_key',
|
|
|
|
// Client/Merchant IDs and category codes (non-sensitive identifiers)
|
|
'paypal_client_id', 'toyyibpay_category_code', 'aamarpay_store_id',
|
|
'authorizenet_merchant_id', 'cinetpay_site_id', 'easebuzz_merchant_key',
|
|
'ozow_site_key', 'paiement_merchant_id', 'payfastMerchantId',
|
|
'payhere_merchant_id', 'paytr_merchant_id', 'skrill_merchant_id',
|
|
'yookassa_shop_id',
|
|
|
|
// Bank details (non-sensitive display info)
|
|
'bank_detail'
|
|
];
|
|
|
|
// Include enabled status, modes, and frontend keys only
|
|
foreach (array_merge($enabledKeys, $modeKeys, $frontendKeys) as $key) {
|
|
if (isset($settings[$key])) {
|
|
$safeSettings[$key] = $settings[$key];
|
|
}
|
|
}
|
|
|
|
return $safeSettings;
|
|
}
|
|
} |