【问题标题】:PHP Rest API post request using Linnworks API使用 Linnworks API 的 PHP Rest API 发布请求
【发布时间】: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 中尝试过,但没有成功。

标签: php api rest


【解决方案1】:

我刚刚开始使用 Linnworks 进行开发,至少可以说那里的文档真的没有帮助。

但是,根据我的经验,有两点需要注意。一,要获得 AuthorisationByApplication 你必须使用不同的服务器来返回一个有效的令牌:

https://api.linnworks.net/api/Auth/AuthorizeByApplication

另一个从应用程序授权帐户请求。这是我获取帐户类别的功能:

$paras = array(
'token' => $u->Token
);

getLinn('Inventory/GetCategories', $paras);

function getLinn($method, $paras)
{
$url = 'https://eu1.linnworks.net/api/' . $method;
$aHttp = array(
    'http' => array(
        'method' => 'POST',
        'content' => '',
        'header' => ["Authorization: " . $paras['token'],
            "Transfer-Encoding: chunked",
            "Content-Encoding: chunked",
            "Content-type: application/x-www-form-urlencoded"
        ]
    )
);
//print_r($aHttp);
$context = stream_context_create($aHttp);
$contents = file_get_contents($url, false, $context);

return $contents;
}

希望这可以帮助将来的人:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2023-01-16
    • 2017-03-05
    相关资源
    最近更新 更多