cURL无法正确发送内容类型

时间:2019-10-22 08:37:19

标签: php laravel curl

我正在尝试与Klarna游乐场服务器建立连接。对于这种情况,我需要使用客户的session_id创建一个HPP会话。我已经使用cURL获得了session_id,但是当我尝试发送另一个cURL请求时,内容类型为NULL。

我试图创建一个函数来正确设置cURL选项,该函数可以很好地创建一个KP会话以接收来自Klarna的session_id,但不适用于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)}

您可以看到第二个请求中的内容类型为null,HTTP代码为204,因此请求成功,但标头设置不正确。

1 个答案:

答案 0 :(得分:0)

在尝试查找问题时,经过数小时的调试,我意识到Klarna使用了非常相似的URL,所以我不得不使用https://api.playground.klarna.com/payments/v1/sessions/来代替https://api.playground.klarna.com/hpp/v1/sessions/来接收正确的数据