【Square】OAuth 認証のアクセストークンを cron から自動更新する

Square との OAuth 認証で使用されているアクセストークンを cron から更新する方法を紹介します。

OAuth 認証を行う場合、APIを提供する側のサーバー(リソースサーバー)のAPIを利用するためにアクセストークンというトークンが発行されます。アクセストークンには有効期限が設定されているため、有効期限が切れる前に新しいアクセストークンを取得する必要があります。

Squareでは、7日以内ごとに OAuth のアクセストークンを自動的に更新することを推奨しています。7日以内に更新することで、エラーを発見し解決するための十分な時間を確保できます。アクセストークンの更新を行わない場合、アクセストークンの更新の失敗を見逃し、Webサイトの運用者やその顧客に予期せぬ経験をもたらすリスクが高くなります。


ShoppingCart 拡張アプリでは、インストール時から標準で用意されている a-blog cms をスタンドーアローン起動できるプログラムを利用して、cron から OAuth 認証のアクセストークンを定期的に自動更新することができます。

a-blog cms インストールした時点で、cron/example.php に a-blog cms をスタンドーアローン起動できるプログラムを利用するためのサンプルファイルが用意されています。この記事ではこの cron/example.php を利用することを前提として説明します。

cron/example.php を以下のように記述します。

<?php

// デフォルトではBID=1の文脈で実行されるため、
// OAuth認証を行っているブログのBIDが1以外の場合、
// php/standalone.php を読み込むより前にBIDを設定してください。
define('BID', 2);

// 設置場所に合わせて、php/standalone のパスを合わせてください。
require_once dirname(__FILE__) . '/../php/standalone.php';

use Acms\Plugins\ShoppingCart\ServiceProvider;

set_time_limit(0);
ini_set('memory_limit', '512M');

acmsStandAloneRun(function () {
    acmsStdMessage('[Start] 処理を開始しました');
    try {
        // ShoppingCart拡張アプリを初期化
        $App = new ServiceProvider();
        $App->init();

        App::make('square.service.oauth');

        acmsStdMessage('[Success] 処理を完了しました');
    } catch (\Exception $e) {
        acmsStdMessage('[Error] ' . $e->getMessage());
        return false;
    }
    return true;
});

実行時にアクセストークンの更新が必要かどうかを判定し、必要であればアクセストークンの更新を行います。

次に、サーバーでcronの設定を行います。7日おきに実行されるように設定したいため、例えば以下のように設定します。

0 0 */7 * * php path/to/cron/example.php

これで7日おきに、cronが実行され、アクセストークンの更新が必要かどうかを判定し、必要であればアクセストークンの更新を自動で行う事ができるようになります。