Community

コミュニティをご利用の際は 【ガイドライン】を確認・同意いただいた上でご利用ください。

  • 投稿

    アバターnaka3web

    リフレッシュトークンでErrorとなる

    $params = http_build_query(
    array(
    ‘client_id’ => APP_ID,
    ‘client_secret’ => SECRET,
    ‘grant_type’ => ‘refresh_token’,
    ‘refresh_token’ => REFRESH_TOKEN,
    ‘redirect_uri’ => CALLBACK_URL
    )
    );
    $headers = array( “Content-type” => “application/x-www-form-urlencoded” );

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, ‘https://accounts.secure.freee.co.jp/public_api/token’);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, ‘POST’);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_HEADER, true);

    上記のコードでリフレッシュトークンをPOSTすると次の様なエラーとなります。

    {

    ‘error’ => string(13) “invalid_grant”

    ‘error_description’ => string(189) “指定された認可グラントは不正か、有効期限切れか、無効か、リダイレクトURIが異なるか、もしくは別のクライアントに適用されています。”

    }

     

    同じタイミングで取得したアクセストークンは正常に利用できています。

    x-www-form-urlencodedをjsonとしても同じです。

    リフレッシュトークンをPOSTした際にErrorとなる原因を、ご教示いただけると助かります。

    宜しくお願いいたします。

    回答

    freee dev-supportfreee dev-support

    ご質問ありがとうございます。
    invalid grant エラーが発生するケースですが次の2点が原因として考えられます。

    * 無効化(revoke)されたアクセストークンをリフレッシュしている
    * パラメーター client_id, client_secret の誤り

    そのため、下記をご確認いただければと存じます。

    * client_idとclient_secretのパラメーターが正しいかの
    * リフレッシュしたアクセストークンは無効になるので、同じアクセストークンを複数回リフレッシュしていないか
    * APIで無効化(revoke)したアクセストークンをリフレッシュしていないか

    以上です。
    どうぞよろしくお願いいたします。

    アバターnaka3web

    お世話になります。

    ご回答ありがとうございます。

    >* client_idとclient_secretのパラメーターが正しいかの

    正しいです。

    login画面を開き、アクセストークンとリフレッシュトークンを取得できます。

     

    >* リフレッシュしたアクセストークンは無効になるので、同じアクセストークンを複数回リフレッシュしていないか

    複数回リフレッシュしていません。

    初回リフレッシュから事象が発生します。

     

    >* APIで無効化(revoke)したアクセストークンをリフレッシュしていないか

    APIで無効化や再リフレッシュはしておりません。

    初回リフレッシュ時から事象が発生します。

     

    提示させて頂いた抜粋ソースに不備はございませんでしょうか?

    引き続き、宜しくお願いいたします。

     

    アバターnaka3web

    事象が発生するときのheaderを取得できました。

    参考になるか分かりませんが、次の通りです。

    HTTP/2 401
    date: Thu, 05 Dec 2019 21:48:00 GMT
    content-type: application/json; charset=UTF-8
    status: 401 Unauthorized
    cache-control: no-cache, must-revalidate
    x-runtime: 0.024426
    x-frame-options: SAMEORIGIN
    x-xss-protection: 1; mode=block
    x-content-type-options: nosniff
    x-request-id: XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX
    pragma: no-cache

    freee dev-supportfreee dev-support

    ご確認ありがとうございます。

    頂いたコードは php でよろしかったでしょうか?
    以下 php のコードとして話を進めさせていただきます。

    コード上気になる点は2箇所です。
    1. パラメータ redirect_uri は不要
    2. headers の指定方法に不備がある

    今回のエラーと直接関係無いかと存じますが修正してご確認ください。
    2 に関しては PHP の cURL の仕様のため PHP の公式ドキュメントでご確認ください。
    https://www.php.net/manual/ja/function.curl-setopt.php

    上記修正後、すでにご確認頂いているかもしれませんが下記ご確認ください。
    1. 正常に取得した token 情報を保存
    2. トークンをリフレッシュするさいの $params の値をデバッガーなどで確認
    3. $params のなかの、refresh_token, client_id, client_secret が利用時に意図した値になっているか確認

    その上で不備が見当たらない場合、
    フォームよりお問い合わせ対象を「Public API (会計freee)」にしてご連絡いただけると幸いです。
    https://support.freee.co.jp/hc/ja/requests/new?referral=helppage

    そのさい、下記の情報を共有頂けると幸いです。
    * 初回アクセストークン取得時のヘッダーを含む完全なリクエスト、レスポンス
    * トークンのリフレッシュをした時のヘッダーを含む完全なリクエスト、レスポンス

    以上です。
    ご確認よろしくお願いいたします。

    アバターnaka3web

    有り難うございました。

    そして申し訳ございませんでした。

    refresh_tokenの転記間違いがございました。

    修正して、refresh出来るようになりました。

    freee dev-supportfreee dev-support

    無事に解決できて何よりでございます。

    引き続きよろしくお願いいたします。