LINE@ Messaging API でアクセストークンを取得 【Javascript , PHP】

LINE Messaging API アクセストークン取得

LINE Developers news で長期間有効なチャネルアクセストークンが廃止されると告知がありました。チャネルアクセストークンは、LINEのMessaging APIを呼び出すのに必要な認証です。

LINE Developers
LINEの開発者向けプロダクトやサービスについてのニュースをお届けします。

長期間有効なチャネルアクセストークンは、実質いつまでも有効なトークンで一度発行してしまえばずっと使い回せるのですが、これが廃止されるということでアクセストークンを定期的に取得する必要が出てきました。

(※9/27のdeveloper newsで、長期間有効なチャネルアクセストークンの廃止が延期されることが発表されました。11月に廃止される予定でしたが、とりあえずまだ使えるようです。)

PHPでアクセストークンを取得

PHPでアクセストークンを取得するコード例は下記です。

//リクエスト先URL
const API_URL = "https://api.line.me/v2/oauth/accessToken";

$data = array(
    'grant_type' => 'client_credentials',
    'client_id' => CHANNEL_ID,
    'client_secret' => SECRET,
);
$header = array(
    "Content-Type: application/x-www-form-urlencoded",
);
$options = array('http' => array(
    'method' => 'POST',
    'header'  => implode("\r\n", $header),
    'content' => http_build_query($data)
));

$response = file_get_contents(
    API_URL,
    false,
    stream_context_create($options)
);

//レスポンスのjsonからtokenを取得
$access_token = json_decode($response)->access_token;

CHANNEL_IDにはアカウントの基本情報にあるChannel ID、SECRETにはChannel Secretを指定します。これらはLINE Developersの管理画面で確認できます。

line developer

Javascriptでアクセストークンを取得

Javascriptでアクセストークンを取得するコード例は下記です。

//リクエスト先URL
const API_URL = 'https://api.line.me/v2/oauth/accessToken'

const BODY = 'grant_type=client_credentials&'
  + 'client_id=' + CHANNEL_ID
  + '&client_secret=' + SECRET

const options = {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  body: BODY,
}

fetch(API_URL, options)
  .then(response => {
    response.json()
      .then(json => {
        //jsonを取得
        let access_token = json.access_token
      })
  })

ただしJavascriptで画面側からリクエストを送る場合、クロスドメイン制約を回避する必要があります。サーバ側でプロキシの設定等でクロスドメイン回避ができる場合のみ使用できます。

普通にリクエストを送ると、No ‘Access-Control-Allow-Origin’ と言われて取得できないので注意です。返ってくるjsonは下のような形です。

{
  "access_token": "W1TeHCgfH2Liwa.....",
  "expires_in": 2592000,
  "token_type": "Bearer"
}

取得したトークンの有効期間は30日間です。

トークン取得APIについて、詳しくは下記のMessagin APIリファレンスを参照してください。

LINE Developers

コメント