【问题标题】:Xero Authorization Unsuccessful error in curl requestcurl请求中的Xero授权不成功错误
【发布时间】:2021-02-25 09:30:44
【问题描述】:

我在从 Xero 访问联系人时遇到问题。我不断收到错误 - AuthorizationUnsuccessful

请在下面找到我用来发送请求的代码以及我得到的响应:

'范围' => ( 'openid', '电子邮件', '轮廓', 'offline_access', '会计.设置', '会计.联系人' ) 在我的 xero 配置文件中

在 Postman 中传递请求

    <?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.xero.com/api.xro/2.0/Contacts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"accept: application/json",
"authorization: Bearer eyJh.......N6mbaw",
"cache-control: no-cache",
"postman-token: 51048d11-4f31-ba27-16c7-48739f14c6f0",
"xero-tenant-id: e8672ad4-ea92-4698-87aa-a69f5b049265"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
?>

Response:
{
"Type": null,
"Title": "Unauthorized",
"Status": 401,
"Detail": "AuthorizationUnsuccessful",
"Instance": "14ae9993-dc1b-4d8d-a4c0-15b2c343f337",
"Extensions": {}
}

非常感谢您的帮助。

【问题讨论】:

  • 那么成功了,下面的答案?

标签: laravel api curl


【解决方案1】:

在你的标题中,我认为不需要postman-token,所以它应该看起来像,

CURLOPT_HTTPHEADER => array(
"Accept: application/json",
"Authorization: Bearer eyJh.......N6mbaw",
"Cache-control: no-cache",
"Xero-tenant-id: e8672ad4-ea92-4698-87aa-a69f5b049265"
)

注意首字母大写。

另一个更简单、更有条理的选择是使用 guzzle,因为您使用的是 laravel(如果 > 5.1),您已经在 laravel 中拥有 guzzle 或者甚至可以使用 HTTP 客户端。


使用 Guzzle 你可以使用 Guzzle 来处理 curl 请求,

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;


public function yourFunction()
{
    try {
        $client = new Client();
        $guzzleResponse = $client->get(
                'https://api.xero.com/api.xro/2.0/Contacts', [
                'headers' => [
                    "Accept" => "application/json",
                    "Authorization" => "Bearer eyJh.......N6mbaw",
                    "Cache-control" => "no-cache",
                    "Xero-tenant-id" => "e8672ad4-ea92-4698-87aa-a69f5b049265"
                ],
                'allow_redirects' => [
                    'max' => 10,
                ],
                'connect_timeout' => 30
            ]);
        if ($guzzleResponse->getStatusCode() == 200) {
            $response = json_decode($guzzleResponse->getBody(),true);
        }
        
    } catch (RequestException $e) {
        // you can catch here 400 response errors and 500 response errors
        // see this https://stackoverflow.com/questions/25040436/guzzle-handle-400-bad-request/25040600
    } catch(Exception $e){
        //other errors 
    }
}

你可以参考guzzle docs更多关于guzzle的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2018-05-27
    • 1970-01-01
    • 2018-01-23
    相关资源
    最近更新 更多