Как отправить правильный вид объекта или массива в функцию curl - PullRequest
0 голосов
/ 28 ноября 2018

Я знаю НОЛЬ о cURL, для меня это все по-гречески, и мои навыки PHP ограничены.Я полагаюсь на умение других сделать мою жизнь проще, и это невероятно расстраивает, когда вещи не работают так, как они должны.

Давайте начнем с моего ввода:

 $j_source = '{"accountIndex":' . $wallet_idx . ',"walletId": "'. $wallet_id . '"}'; 
    $j_destination = '{"address":"' . $banker . '","amount":' . $lovelace . '}';

    $source         = json_decode($j_source, true); 
    $destination    = json_decode($j_destination, true); 

У меня есть 2 переменные, которые являются массивами JSON.Функция хочет ввод в виде массивов, вот что я пытаюсь дать ему.

Рассматриваемая функция ( отсюда изначально ):

// Generates a new transaction from the source to one or multiple target addresses.
    public function createNewTransaction(array $source, array $destination, string $spendingPassword): array
    {
        $groupPolicy = 'OptimizeForHighThroughput';
        return self::jsonDecode($this->post('/api/v1/transactions?source='.$source.'?destination='.$destination.'?groupingPolicy='.$groupPolicy.'?spendingPassword='.$spendingPassword), true);
    } 

Когда я запускаю этоФункция приводит к ошибке:

Массив ([status] => error [диагностика] => Массив ([validationError] => Ошибка в $: при синтаксическом анализе конструктора Payment типа Cardano.Wallet.API.V1.Types.Payment ожидаемый объект, но получил массив.) [Message] => JSONValidationFailed)

Итак, очевидно, я попытался отправить ему массив в виде объекта с ошибкой,говорит мне, что хочет объект, а не массив.Так что теперь я иду по кругу, и я не знаю, что делать дальше.

Это функция cURL POST, которую я использую:

// CURL Post
    private function post(string $endPoint, $postFields = []): string
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->host.$endPoint);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_PORT, $this->port);
        curl_setopt($ch, CURLOPT_ENCODING, "");
        curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postFields));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSLCERT, Cardano::CERT_PATH);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

        $headers = [
            "Cache-Control: no-cache",
            "Content-Type: application/json;charset=utf-8",
            "Postman-Token: b71b609e-e028-d78b-ce51-3d0ec0b5c9fb",
            "accept: application/json;charset=utf-8"        
        ];
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

        if($this->disableSSLVerification)
        {
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        }
        $data = curl_exec ($ch);
        $this->httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if(curl_exec($ch) === false)
        {
            throw new Exception('Curl error: ' . curl_error($ch));
        }
        curl_close ($ch);
        return $data;
    }

Насколько я могу судить, этот код CURL был автоматически сгенерирован с использованием чего-то под названием «Почтальон» (я скачал его, но яне понимаю, как его использовать, поэтому не помогает вообще).

Проблема в том, что я не знаю, что не так.Я не знаю, если это проблема с тем, как построен CURL, я не знаю, если это проблема в классе, который содержит функцию createNewTransaction.

Что я знаю, так это то, что функции GET в библиотеке работают без проблем.Я могу без проблем запускать GET-запросы и возвращать действующий JSON.

Если бы вы могли дать мне несколько подсказок или подсказок о том, что не так, я, вероятно, смогу разобраться сам, я просто не знаю, с чего начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...