多くのWebサービスではWeb APIを使ってデータアクセス/操作する際にOAuth2を利用します。SquareのWeb APIでも多分に洩れず、OAuth2を利用しています。
今回はその基本的な使い方です。プログラミング言語はRubyで紹介しますが、他にもJava、PHP、Pythonのサンプルコードもあります。
サンプルコードについて
Sinatraを使ったサンプルコードはGitHubにアップロードされています。こちらを参考にしてください。
まずコードをcloneします。
$ git clone git@github.com:square/connect-api-examples.git
そしてサンプルコードまで辿ります。
cd connect-api-examples/connect-examples/oauth/ruby
Gemfileはなくとも利用できますがあった方が動かしやすいでしょう。
$ cat Gemfile
source 'https://rubygems.org'
gem 'sinatra'
gem 'unirest'
そしてライブラリをインストールします。
$ bundle
アプリケーションキーを変更する
oauth-flow.rb
にある APP_ID
と APP_SECRET
を自分のものと置き換えます。この文字列はSquare Developer Portal にて取得できます。
APP_ID = 'sq0...xqA'
APP_SECRET = 'sq0...8QM'

APP_SECRETはOAuthの中にあります。

これでコードの修正は完了です。
コールバックURLを指定する
Square Developer PortalのOAuth設定にあるRedirect URLを指定します。今回はローカルで動かすので、 http://localhost:4567/callback
とします。

試す
まず http://localhost:4567/ を開きます。
そして「Click here to authorize the application.」と書かれているのでクリックします。
そうすると認可を求める画面が表示されます。
許可をクリックすれば処理成功としてコールバックされます。この時のURLは以下のようになります。
http://localhost:4567/callback?code=sq0...heg&response_type=code#_=_
この code パラメータを使って、トークンを取得します。
response = Unirest.post 'https://connect.squareup.com/oauth2/token',
headers: {
'Authorization' => "Client #{APP_SECRET}",
'Accept' => 'application/json',
'Content-Type' => 'application/json'
},
parameters: {
'client_id' => APP_ID,
'client_secret' => APP_SECRET,
'code' => authorization_code
}
この時のレスポンスは次のようになります。
{
"access_token" => "sq0...PQg",
"token_type" => "bearer",
"expires_at" => "2017-10-14T08:53:50Z",
"merchant_id"=>"M1D...KAK"
}
このaccess_tokenをデータベースなりに保存しておくことで、そのユーザとしてSquare APIが使えるようになります。
エラーの場合
エラーの場合は次のようなレスポンスが返ってきます。例えば以下は許可を得られなかった場合です。
http://localhost:4567/callback?error=access_denied&error_description=user_denied
アプリの管理
なお、接続したアプリについてはSquareデータのアプリメニューの中にあるマイアプリにて確認できます。もう使っていないものであったり、誤って接続したアプリなどはこちらで削除しましょう。
このような形でSquareのOAuth2は簡単に実装できます。ぜひSquareの決済システムを使ったプラグインや連携システムを構築してみてください!