Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Payment\Utils;
- use App\Models\Payment\PaymentGateway;
- use Stripe\Exception\ApiErrorException;
- use Stripe\StripeClient;
- class StripeWebhook
- {
- /**
- * @var StripeClient
- */
- private $stripe;
- /**
- * @var string
- */
- private $gatewayName = "stripe";
- /**
- *
- */
- public function __construct()
- {
- $sk = env('STRIPE_SK');
- $this->stripe = new StripeClient($sk);
- }
- /**
- * Permet de créer le webhook de stripe
- *
- * @throws ApiErrorException
- */
- public function make()
- {
- $gateway = PaymentGateway::where('name', $this->gatewayName)->first();
- if ($this->endpointIsAlreadyCreate() && isset($gateway))
- return;
- $this->deleteEndPointIfAlreadyExist();
- $response = $this->stripe->webhookEndpoints->create([
- 'url' => $this->getRouteEndPoint(),
- 'enabled_events' => [
- 'checkout.session.completed',
- 'checkout.session.async_payment_succeeded',
- 'checkout.session.async_payment_failed',
- 'charge.dispute.created',
- 'charge.refunded',
- ],
- 'description' => 'Webhook for groupez.xyz'
- ]);
- if (isset($gateway))
- $gateway->update(['data' => $response->secret]);
- else {
- PaymentGateway::create([
- 'name' => $this->gatewayName,
- 'data' => $response->secret,
- ]);
- }
- }
- /**
- * Permet de vérifier si le endpoint existe ou pas
- *
- * @return bool
- * @throws ApiErrorException
- */
- private function endpointIsAlreadyCreate(): bool
- {
- foreach ($this->stripe->webhookEndpoints->all() as $endpoint) {
- if ($endpoint->url === $this->getRouteEndPoint())
- return true;
- }
- return false;
- }
- /**
- * Permet de supprimer les routes en trop
- */
- private function deleteEndPointIfAlreadyExist()
- {
- try {
- foreach ($this->stripe->webhookEndpoints->all() as $endpoint) {
- if ($endpoint->url === $this->getRouteEndPoint())
- $this->stripe->webhookEndpoints->delete($endpoint->id);
- }
- } catch (ApiErrorException $e) {
- }
- }
- /**
- * Permet de retourner la route
- * @return string
- */
- private function getRouteEndPoint(): string
- {
- return route('api.v1.notification', ['gateway' => $this->gatewayName]);
- }
- }
Add Comment
Please, Sign In to add comment