我正在尝试与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,因此请求成功,但标头设置不正确。
答案 0 :(得分:0)
在尝试查找问题时,经过数小时的调试,我意识到Klarna使用了非常相似的URL,所以我不得不使用https://api.playground.klarna.com/payments/v1/sessions/来代替https://api.playground.klarna.com/hpp/v1/sessions/来接收正确的数据