使用邮递员,我已经能够成功创建一个API调用来从网络服务器检索信息。
但是,我在用PHP做同样的事情上一直没有成功。以下是我试图在PHP中复制的Postman的一些屏幕截图。
这是我的PHP代码-
$filters = array("1234", "28");
$selectors = array("Brand", "Name");
$body = array('Filter' => array('SKU'=>$filters, 'OutputSelector' => $selectors));
$url = "https://xyz.neto.com.au/do/WS/NetoAPI";
$method = "POST";
$headers = array(
"NETOAPI_ACTION: GetItem",
"NETOAPI_KEY: xxxxxxx",
"Accept: application/json",
"NETOAPI_USERNAME: puneeth"
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
$err = curl_error($ch);
curl_close($ch);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
P.S我故意弄错了网址和密钥。
我正在尝试遵循此处概述的说明-https://developers.neto.com.au/documentation/engineers/api-documentation/products/getitem
答案 0 :(得分:1)
一些可能阻止您的代码正常工作的事情:
您已在$body
中将请求的主体声明为数组。您需要先对其进行JSON编码,然后再将其传递给cURL:
$body = array('Filter' => array('SKU'=>$filters, 'OutputSelector' => $selectors));
$bodyJSON = json_encode($body);
[...]
curl_setopt($ch, CURLOPT_POSTFIELDS, $bodyJSON);
如果收到空响应,则还需要配置cURL进行SSL通信。快速解决方案是忽略远程服务器证书的有效性:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
尽管可以,但是请参见this answer,以获得更好的解决方案。
在发送原始postfield时,某些服务器需要知道您要发送的数据类型。这是通过设置Content-Type
标头完成的:
$headers = array(
"Content-Type: application/json",
[...]
);