我试图将我的php应用中的用户连接到23和Me api,但在尝试使用提供的令牌时遇到问题。我可以使用以下http操作成功获取令牌:
<a href="https://api.23andme.com/authorize/?redirect_uri={{ env('APP_URL') }}/receive_code/&response_type=code&client_id={{ env('DNA_ID') }}&scope=basic names email">Connect with 23andMe</a>
哪个重定向到以下控制器并成功返回我存储在users表中的令牌:
public function connectDNA()
{
$code = $_GET["code"];
$client = new Client();
$result = $client->post('https://api.23andme.com/token/', [
'form_params' => [
'client_id' => env('DNA_ID'),
'client_secret' => env('DNA_SECRET'),
'grant_type' => 'authorization_code',
'code' => $code,
'redirect_uri' => 'http://localhost:8000/receive_code/',
'scope' => 'basic names email'
]
]);
$contents = $result->getBody()->getContents();
$contents = json_decode($contents);
$user = Auth::user();
$user->dna_token = $contents->access_token;
$user->save();
return redirect('/home');
}
问题是当我尝试使用该令牌以guzzle访问23和我的API时,我怀疑是因为我不知道如何构建呼叫。我尝试了以下几种变体:
$result = $client->get('https://api.23andme.com/3/account/', [
'Authorization' => $user->dna_token
]);
return $result;
更新:问题似乎是我如何格式化guzzle。当我卷曲时:
curl "https://api.23andme.com/3/account/" \ > -H "Authorization: Bearer demo_oauth_token"
API返回测试结果,我如何在Guzzle中格式化上面的内容?
答案 0 :(得分:1)
可能您错过了Bearer
关键字。
尝试:
$result = $client->get('https://api.23andme.com/3/account/', [
'Authorization' => 'Bearer '.$user->dna_token
]);
return $result;
我在23andme文档中的cURL示例中推断出这一点,我看到here。
curl "https://api.23andme.com/3/account/" \ -H "Authorization: Bearer demo_oauth_token"
答案 1 :(得分:0)
好的,我发现了这个问题。为了设置带有guzzle的持有者令牌,你必须将它传递到如下的标题中:
$result = $client->request('GET', 'https://api.23andme.com/3/account/', [
'headers' => [
'Authorization' => 'Bearer ' . $user->dna_token
]
]);