diff --git a/resources/js/views/Admin/PaymentSettings/PaymentSettingsTab/Payments.vue b/resources/js/views/Admin/PaymentSettings/PaymentSettingsTab/Payments.vue index 552c371e..eac5bdb8 100644 --- a/resources/js/views/Admin/PaymentSettings/PaymentSettingsTab/Payments.vue +++ b/resources/js/views/Admin/PaymentSettings/PaymentSettingsTab/Payments.vue @@ -623,10 +623,17 @@ export default { }) }) .catch((error) => { - if (error.response.status === 500) { - this.isError = true - this.errorMessage = error.response.data.message - } + if ([401, 500].includes(error.response.status)) { + events.$emit('alert:open', { + title: error.response.data.title, + message: error.response.data.message, + }) + } else { + events.$emit('toaster', { + type: 'danger', + message: this.$t('popup_error.title'), + }) + } }) .finally(() => (this.isLoading = false)) }, diff --git a/src/Domain/Settings/Actions/TestPaystackConnectionAction.php b/src/Domain/Settings/Actions/TestPaystackConnectionAction.php new file mode 100644 index 00000000..f36df9a5 --- /dev/null +++ b/src/Domain/Settings/Actions/TestPaystackConnectionAction.php @@ -0,0 +1,60 @@ + [ + 'secret' => $credentials['secret'], + 'public_key' => $credentials['key'], + ], + ]); + + // Define test plan + $data = CreateFixedPlanData::fromArray([ + 'type' => 'fixed', + 'name' => 'Test Plan', + 'description' => null, + 'features' => [ + 'max_storage_amount' => 200, + 'max_team_members' => 20, + ], + 'currency' => 'ZAR', + 'amount' => 99999, + 'interval' => 'month', + ]); + + // Create test plan + $plan = $this->subscription + ->driver('paystack') + ->createFixedPlan($data); + + // Delete plan + $this->subscription + ->driver('paystack') + ->deletePlan($plan['id']); + + } catch (ErrorException $error) { + abort( + response()->json([ + 'type' => 'service-connection-error', + 'title' => 'Service Connection Error', + 'message' => $error->getMessage(), + ], 401) + ); + } + } +} \ No newline at end of file diff --git a/src/Domain/Settings/Controllers/StorePaymentServiceCredentialsController.php b/src/Domain/Settings/Controllers/StorePaymentServiceCredentialsController.php index 35d6ef90..bc91b4d5 100644 --- a/src/Domain/Settings/Controllers/StorePaymentServiceCredentialsController.php +++ b/src/Domain/Settings/Controllers/StorePaymentServiceCredentialsController.php @@ -4,10 +4,15 @@ namespace Domain\Settings\Controllers; use Artisan; use Illuminate\Http\Response; use Domain\Settings\Models\Setting; +use Domain\Settings\Actions\TestPaystackConnectionAction; use Domain\Settings\Requests\StorePaymentServiceCredentialsRequest; class StorePaymentServiceCredentialsController { + public function __construct( + public TestPaystackConnectionAction $testPaystackConnection, + ) {} + /** * Configure stripe additionally */ @@ -43,6 +48,15 @@ class StorePaymentServiceCredentialsController // Get and store credentials if (! app()->runningUnitTests()) { + // Test payment gateway connection + match ($request->input('service')) { + 'paystack' => ($this->testPaystackConnection)([ + 'key' => $request->input('key'), + 'secret' => $request->input('secret'), + ]), + default => null + }; + $credentials = [ 'stripe' => [ 'STRIPE_PUBLIC_KEY' => $request->input('key'),