【发布时间】:2016-01-07 04:09:51
【问题描述】:
我是 REST API 的新手,我正在尝试开始将 Linnworks API 用于我们的订单管理软件。作为一个起点,我尝试使用发布请求来简单地使用它的 GUID 获取 1 项的当前库存水平。
可以在此处查看此请求的文档:
http://apidoc.linnworks.net/Home/ApiMethod/GetStockLevel
我已经使用用户 ID 和密码完成了发布请求的第一阶段,并按照此处的说明发布了令牌:
http://apidoc.linnworks.net/Home/Page/Auth%20Introduction
我现在尝试使用 stream_context_create 和我阅读的许多博客文章中的信息来创建一个帖子请求。我编写了以下代码,但一直出现空白屏幕,甚至没有警告或错误消息。谁能看到我哪里出错了?我是新手,所以我可能会错过一些重要的东西。为了安全起见,我省略了我的令牌:
<?php
$postdata = array(
'stockItemId' => 'bb0ef47f-f3fe-47b4-8863-ddfe8bc69b29'
);
$opts = array('http' =>
array(
'method' => 'POST',
'protocol_version' => 1.1,
'header' =>
'Authorization: Token my-token-here\r\n'.
'Host: eu1.linnworks.net\r\n'.
'Content-Type: application/x-www-form-urlencoded\r\n'.
'Accept-Language: en\r\n',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents('https://eu1.linnworks.net//api/Stock/GetStockLevel',false, $context);
echo $result;
?>
在对每个变量进行 var_dump 时,如果有帮助,我会得到以下信息:
变量转储:$postdata
array(1) { ["stockItemId"]=> string(36) "bb0ef47f-f3fe-47b4-8863-ddfe8bc69b29" }
变量转储:$opts
array(1) { ["http"]=> array(4) { ["method"]=> string(4) "POST" ["protocol_version"]=> float(1.1) ["header"]=> string(162) "Authorization: Token my-token-here\r\nHost: eu1.linnworks.net\r\nContent-Type: application/x-www-form-urlencoded\r\nAccept-Language: en\r\n" ["content"]=> array(1) { ["stockItemId"]=> string(36) "bb0ef47f-f3fe-47b4-8863-ddfe8bc69b29" } } }
变量转储:$context
resource(2) of type (stream-context)
变量转储:$result
bool(false)
任何帮助将不胜感激
【问题讨论】:
-
看看Guzzle library 来创建 HTTP 请求,恕我直言,更容易和灵活。
-
干杯我会调查的
-
查看添加授权手册,看起来令牌必须由 GET 而不是 Auth 标头提供?我尝试这样调用 URL: $a = file_get_contents('eu1.linnworks.net//api/Stock/GetStockLevel');当我 var_dump a 它返回 false,并引发错误(警告:file_get_contents(eu1.linnworks.net//api/Stock/GetStockLevel)[function.file-get-contents]:未能打开流:HTTP 请求失败!HTTP/1.1 401 未授权)。可以检查您的 error_reporting 级别吗?
-
您好 Sanderbee 感谢您的帮助。但是,在此页面 (apidoc.linnworks.net/Home/Page/Auth%20Introduction) 上确实显示“令牌可以在授权标头或查询字符串中提供,具体取决于您的要求。”此外,所有文档都是在开头使用 POST 编写的。但是,我确实在 url 中尝试过,但没有成功。