File: /var/www/vhost/disk-apps/teamdemo.sports-crowd.com/app/Core/Payment/Methods/Nuvei/NuveiStrategy.php
<?php
declare(strict_types=1);
namespace App\Core\Payment\Methods\Nuvei;
use App\Core\Payment\Entities\Payment;
use App\Core\Payment\Entities\PaymentIntentResponse;
use App\Core\Payment\Entities\PaymentRetrieveResponse;
use App\Core\Payment\PaymentMethodInterface;
use App\Core\Payment\PaymentStatusEnum;
class NuveiStrategy implements PaymentMethodInterface
{
const PAYMENT_STATUS = [
"success" => PaymentStatusEnum::CONFIRMED,
"failure" => PaymentStatusEnum::DECLINED
];
private $parameters;
private $nuveiClient;
public function __construct(
$parameters
) {
$this->parameters = $parameters;
$this->nuveiClient = new NuveiClient($this->parameters);
}
public function pay(Payment $payment): PaymentIntentResponse
{
$payment->amount()->setCurrency($this->parameters->currency);
$nuveiReference = $this->nuveiClient->getReference($payment);
$paymentIntentResponse = new PaymentIntentResponse(
PaymentIntentResponse::ACTION_SHOW,
$nuveiReference->reference
);
$data = [
'envMode' => $this->parameters->is_productive ? 'prod' : 'stg',
'nuveiReference' => $nuveiReference->reference,
'confirm_url' => config('app.url') .
'/store/payment?paymentGatewayId=' .
$payment->paymentGatewayId() .
'&reference=' .$payment->reference()
];
$paymentIntentResponse->setView('nuvei.webcheckout');
$paymentIntentResponse->setData($data);
return $paymentIntentResponse;
}
public function retrieve(Payment $payment): PaymentRetrieveResponse
{
if (request()->has('transaction_id')) {
$response = $this->nuveiClient->retrieve(request()->get('transaction_id'));
if ($response->transaction->status === 'success') {
return new PaymentRetrieveResponse(
$response->transaction->id,
self::PAYMENT_STATUS[$response->transaction->status],
$response->transaction->current_status
);
}
}
return PaymentRetrieveResponse::createPending();
}
}