File: /var/www/vhost/disk-apps/demo.sports-crowd.com/app/Core/Payment/Methods/Nuvei/NuveiClient.php
<?php
declare(strict_types=1);
namespace App\Core\Payment\Methods\Nuvei;
use App\Core\Payment\Entities\Payment;
use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
class NuveiClient
{
private $parameters;
private $client;
public function __construct($parameters)
{
$this->parameters = $parameters;
$this->client = new Client([
'base_uri' => $this->parameters->is_productive ? $this->parameters->gw_url_prd : $this->parameters->gw_url_sandbox
]);
}
public function getReference(Payment $payment)
{
$response = $this->client->post(
'transaction/init_reference/',
[
'headers' => [
'Auth-Token' => $this->authToken()
],
RequestOptions::JSON => $this->getReferenceRequest($payment)
]
);
return json_decode($response->getBody()->getContents());
}
public function retrieve($reference)
{
$response = $this->client->get(
'transaction/' . $reference,
[
'headers' => [
'Auth-Token' => $this->authToken()
]
]
);
return json_decode($response->getBody()->getContents());
}
public function refund($transactionId)
{
$response = $this->client->post(
'transaction/refund',
[
'headers' => [
'Auth-Token' => $this->authToken()
],
RequestOptions::JSON => [
'transaction' => [
'id' => $transactionId
]
]
]
);
return json_decode($response->getBody()->getContents());
}
private function authToken()
{
$timestamp = time();
$signature = hash('sha256', $this->parameters->secret . $timestamp);
return base64_encode($this->parameters->public . ';' . $timestamp . ';' . $signature);
}
private function getReferenceRequest(Payment $payment):array
{
return [
"local" => "es",
"order" => [
"amount" => $payment->amount()->total(),
"description" => $payment->pin(),
"vat" => 0,
"tax_percentage" => 0,
"dev_reference" => $payment->reference(),
"installments_type" => -1,
"currency" => "USD",
],
"user" => [
"id" => $payment->customer()->id(),
"email" => $payment->customer()->email(),
"name" => $payment->customer()->name(),
"last_name" => $payment->customer()->surname()
],
"conf" => [
"style_version" => "2",
"theme" => [
"logo" => "https://cdn.paymentez.com/img/nv/nuvei_logo.png",
"primary_color" => "#C800A1",
"secondary_color" => "#C800A1"
]
]
];
}
}