微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Amadeus Flight Search API在curl PHP中传递access_token时出错

如何解决Amadeus Flight Search API在curl PHP中传递access_token时出错

我正在集成amadeus飞行搜索api并在使用access_token时出错。我猜问题出在获取访问令牌吗?

{ "errors": [ { "code": "38191","title": "Invalid HTTP header","detail": "Missing or invalid format for mandatory Authorization header","status": "401" } ] }

我需要获得所有从来源到目的地的航班,并提供价格详细信息。

$curls = curl_init();
curl_setopt($curls,CURLOPT_URL,'https://test.api.amadeus.com/v1/security/oauth2/token'); 
curl_setopt($curls,CURLOPT_POST,true);
curl_setopt($curls,CURLOPT_POSTFIELDS,"grant_type=client_credentials&client_id=$secretid&client_secret=$secretkey");
curl_setopt($curls,CURLOPT_HTTPHEADER,array('Content-Type: application/x-www-form-urlencoded'));
$token = curl_exec($curls);
$data = json_decode($token,true);

curl_setopt($curls,'https://test.api.amadeus.com/v2/shopping/flight-offers?originLocationCode=SYD&destinationLocationCode=BKK&departureDate=2020-10-01&returnDate=2020-08-05&adults=2&includedAirlineCodes=TG&max=3');

curl_setopt($curls,array('Authorization: Bearer' .$data['access_token']));
$result = curl_exec($curls);
    if (curl_errno($curls)) {
        echo 'Error:' . curl_error($curls);
    }
//print_r ($result);
curl_close ($curls);

解决方法

我在您的代码中发现了一些错误,并对其进行了修复以使其正常工作:

  1. 对于使用的PHP版本,您需要添加curl_setopt($curls,CURLOPT_RETURNTRANSFER,true);以确保它不仅打印API响应,而且还返回它(请参见this post
  2. 您需要在Bearer和访问令牌之间留一个空格:array('Authorization: Bearer ' .$data['access_token']));
  3. 您尝试调用的示例是错误的,返回日期早于脱离日期。我将其更改为一个更简单的示例:https://test.api.amadeus.com/v2/shopping/flight-offers?originLocationCode=EWR&destinationLocationCode=MIA&departureDate=2020-09-10&returnDate=2020-09-17&adults=1&max=1。请查看API reference documentatio n来了解您可以使用的不同查询参数。
  4. 在进行API调用之前,您需要将CURLOPT_POST更改为false(因为您要调用的API是GET

在完整的示例下面查找:

$curls = curl_init();
curl_setopt($curls,CURLOPT_URL,'https://test.api.amadeus.com/v1/security/oauth2/token');
curl_setopt($curls,CURLOPT_POST,true);
curl_setopt($curls,CURLOPT_POSTFIELDS,"grant_type=client_credentials&client_id=$secretid&client_secret=$secretkey");
curl_setopt($curls,CURLOPT_HTTPHEADER,array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($curls,true);
$token = curl_exec($curls);
$data = json_decode($token,true);

curl_setopt($curls,'https://test.api.amadeus.com/v2/shopping/flight-offers?originLocationCode=EWR&destinationLocationCode=MIA&departureDate=2020-09-10&returnDate=2020-09-17&adults=1&max=1');
curl_setopt($curls,false);

curl_setopt($curls,array('Authorization: Bearer ' .$data['access_token']));
$result = curl_exec($curls);
    if (curl_errno($curls)) {
        echo 'Error:' . curl_error($curls);
    }
print_r ($result);
curl_close ($curls);

注意:我不是PHP专家,我相信代码可以改进。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。