0

我正在尝试将我的 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>

重定向到以下控制器并成功返回我存储在用户表中的令牌:

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 中格式化以上内容?

4

2 回答 2

1

可能是您缺少Bearer关键字。

尝试:

$result = $client->get('https://api.23andme.com/3/account/', [
    'Authorization' => 'Bearer '.$user->dna_token
]);

return $result;

我从我在这里看到的 23andme 文档中的 cURL 示例中推断出这一点。

curl "https://api.23andme.com/3/account/" \ -H "Authorization: Bearer demo_oauth_token"

于 2017-03-16T19:21:34.877 回答
0

好的,我发现了问题。为了使用 guzzle 设置不记名令牌,您必须像这样在标头中传递它:

$result = $client->request('GET', 'https://api.23andme.com/3/account/', [
          'headers' => [
            'Authorization' => 'Bearer ' . $user->dna_token
          ]
        ]);
于 2017-03-17T20:39:44.480 回答