Paystack connection test

This commit is contained in:
Čarodej
2022-05-09 17:32:44 +02:00
parent 911f15d493
commit 4eb901dae0
3 changed files with 85 additions and 4 deletions

View File

@@ -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))
},

View File

@@ -0,0 +1,60 @@
<?php
namespace Domain\Settings\Actions;
use ErrorException;
use VueFileManager\Subscription\Domain\Plans\DTO\CreateFixedPlanData;
use VueFileManager\Subscription\Support\EngineManager;
class TestPaystackConnectionAction
{
public function __construct(
public EngineManager $subscription
){}
public function __invoke($credentials)
{
try {
// Set temporary paystack connection
config([
'subscription.credentials.paystack' => [
'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)
);
}
}
}

View File

@@ -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'),