В чём заключается ошибка?

Использую для тестового приема платежей на сайте библиотеку Omnipay и драйвер для работы с Liqpay. Для этого использую test api keys от liqpay. При нажатии на кнопку "Send" выдается ошибка: Uncaught TypeError: Argument 1 passed to Symfony\Component\HttpFoundation\ParameterBag::get() must be of the type string, array given

Я понимаю что где-то код не может с массива в строку перейти, но что именно мне нужно изменить в коде, ведь в документации (а точнее комментариях) к драйверу описан именно такой способ обращения к методу purchase

Вот index.php код:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Test Page</title>
</head>
<body>

    <form id="card">
        <input id="num" type="text" placeholder="Number">
        <input id="cvv" type="text" placeholder="Cvv">
        <input id="date" type="date" placeholder="Experience date">
        <input id="btn" type="submit" value="Send data">
    </form>

    <div id="result"></div>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

    <script>
        $("#btn").click((e) => {
            e.preventDefault();
            $.ajax({
                type: 'POST',
                url: 'process.php',
                data: {
                    number: $("#num").val(),
                    cvv: $("#cvv").val(),
                    date: $("#date").val()
                },
                success: function(response) {
                    $('#result').html(response);
                }
            });
        });
    </script>

</body>
</html>

А это process.php код (проблемная строчка: $response = $this->gateway->purchase(...)->send()):

<?php

require 'vendor/autoload.php';
use Omnipay\Omnipay;
use Omnipay\Common\CreditCard;

class OmnipayClass extends Omnipay {
    private string $cardNumber = "";
    private string $cvv = "";
    private string $expDate = "";

    private $card = null;
    protected $gateway = null;

    public function __construct($params = array()) {
        if($this->checkCorrect($params)) {
            $this->cardNumber = htmlspecialchars($params["number"]);
            $this->cvv = htmlspecialchars($params["cvv"]);
            $this->expDate = htmlspecialchars($params["date"]);
        } else { exit("Something bad with params"); }
    }

    public function initialize($set_gateway = 'LiqPay', $arr = array()) {
        if(isset($arr)) {
            try {
                // Create a gateway for the LiqPay
                $this->gateway = Omnipay::create($set_gateway);
                // Initialise the gateway
                $this->gateway->initialize(array(
                    'publicKey' => $arr["public"],
                    'privateKey' => $arr["private"],
                    'testMode' => true
                ));
            } catch (Exception $exception) {
                exit($exception->getMessage());
            }

            // Create card class
            if(isset($this->gateway)) {
                if (($timestamp = strtotime($this->expDate)) !== false) {
                    $year = date("Y", $timestamp) . " ";
                    $month = date("m", $timestamp) . " ";
                } else { exit('Invalid timestamp!'); }

                $this->card = new CreditCard(array(
                    'number' => $this->cardNumber,
                    'expiryMonth' => $month,
                    'expiryYear' => $year,
                    'cvv' => $this->cvv
                ));

                try { $this->card->validate(); }
                catch (Exception $exception) { exit($exception->getMessage()); }

            } else {
                exit("Something wrong with gateway");
            }
        }
    }
    public function sendPurchase():string {
        if(isset($this->card) && isset($this->gateway)) {
            // Test
            $response = $this->gateway->purchase(array(
                'amount' => '10.00',
                'currency' => 'USD', // USD | EUR | RUB | UAH'
                'transactionId' => '1',
                'description' => 'Payment description',
                'clientIp' => '127.0.0.1',
                'returnUrl' => 'success.php',
                'notifyUrl' => 'index.php',
                'card' => $this->card
            ))->send();

//            echo "<pre>";
//            var_dump($response);
//            echo "</pre>";

            if ($response->isSuccessful()) {
                return "Purchase transaction was successful!\n";
                //return $response->getData();
            } else if ($response->isRedirect()) {
                return "Redirect";
                //return $response->getRedirectData();
            } else {
                return "Error";
                //return $response->getMessage();
            }
        }
        return "";
    }

    private function checkCorrect($arr = array()):bool {
        if(isset($arr) && isset($arr["number"]) && isset($arr["cvv"]) && isset($arr["date"])) {
            if(strlen($arr["number"]) > 0 && strlen($arr["cvv"]) > 0 && strlen($arr["date"]) > 0) {
                return true;
            }
        }
        return false;
    }
}

$testOmnipayClass = new OmnipayClass($_POST);

$testOmnipayClass->initialize("LiqPay", array(
    "public" => "sandbox_XXXXXXX",
    "private" => "sandbox_YYYYYY"
));

var_dump($testOmnipayClass->sendPurchase());

Ответы (0 шт):