HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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"
                ]
            ]
        ];
    }
}