cURL неправильно отправляет тип контента - PullRequest
1 голос
/ 22 октября 2019

Я пытаюсь установить соединение с сервером детской площадки Klarna. Для этого случая мне нужно создать сеанс HPP с session_id от клиента. Я уже получаю session_id с помощью cURL, но когда я пытаюсь отправить другой запрос cURL, тип содержимого равен NULL.

Я попытался создать функцию для правильной установки параметров cURL, которая прекрасно работает для создания КПсеанс для получения session_id от Klarna, но не для сессии HPP.

Этот код предназначен для установки параметров сеанса cURL, поскольку меняются только URL-адрес и данные, поэтому я предоставляю их в качестве параметра.

private function executeCurl( $url, $data ) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $this->setHeader()); // set header for request
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); // set authorization
        curl_setopt($ch, CURLOPT_USERPWD, $this->username() . ":" . $this->password()); // set authorization
        curl_setopt($ch, CURLOPT_URL, $url); // set URL
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // set data for request
        curl_setopt($ch, CURLOPT_VERBOSE, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        $curl = curl_exec($ch);

        $info = curl_getinfo($ch);
        var_dump($info);

        curl_close($ch);

        return $curl;
}

В этой функции KP session_idправильно создан и вызывает функцию hostpayment.

    public function start() {
        $data = $this->createJson();
        $curl = $this->executeCurl("https://api.playground.klarna.com/payments/v1/sessions", $data);

        $data = json_decode($curl,true);

        $session_id = $data["session_id"];

        $this->hostpayment($session_id);
    }

В этой функции должен быть создан сеанс HPP.

    public function hostpayment($session_id) {
       $url = "https://api.playground.klarna.com/payments/v1/sessions/" . $session_id;

       $data = $this->createSessionJson($session_id);

       $curl = $this->executeCurl($url, $data);
       $data = json_decode($curl,true);

    }

Я ожидаю, что вывод cURL в обоих случаях будетто же самое, за исключением URL-адреса и данных.

curl_getinfo опередил следующее для сеанса KP:


{ ["url"]=> string(54) "https://api.playground.klarna.com/payments/v1/sessions" ["content_type"]=> string(16) "application/json" ["http_code"]=> int(200) ["header_size"]=> int(290) ["request_size"]=> int(271)}

Запрос HPP выдает следующее:

{ ["url"]=> string(91) "https://api.playground.klarna.com/payments/v1/sessions/53ac5196-ced3-7573-96c7-332a7b8ab0ae" ["content_type"]=> NULL ["http_code"]=> int(204) ["header_size"]=> int(212) ["request_size"]=> int(307)}

Вы видите, что тип контента во второмзапрос равен нулю, а код HTTP - 204, поэтому запрос выполнен успешно, но заголовок установлен неправильно.

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