Square APIには、CheckoutAPIという注文決済用のAPIがあります。
このAPIは注文情報などを渡すと、Squareが用意してくれている決済画面(チェックアウト画面)のURLが生成されます。
生成されたURLを開くと、注文の確認とカード決済の画面が表示され、そこで必要な情報を入力して決済ができるという便利機能です。
API Explorerで動作確認
簡単にSquare APIの動作を確認するために、API ExplorerというWEBツールが用意されているので、使ってみます。
location IDを取得
Checkout APIを呼び出すのに、locationIDが必要になるので、Locations APIを使って取得します。
Locations API- Square API Reference
Checkout用URL取得
取得したlocationIDと、オーダー情報を入れてCheckoutAPIのCreate checkoutを呼び出すと、Checkout画面のURLを取得できます。
Checkout API- Square API Reference
curl https://connect.squareupsandbox.com/v2/locations/M513Y0SCF175A/checkouts \
-X POST \
-H 'Content-Type: application/json' \
-H 'Square-Version: 2020-02-26' \
-H 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXX' \
-d '{
"idempotency_key": "testid-XXXX-XXX2",
"order": {
"order": {
"location_id": "M513Y0SCF175A",
"line_items": [
{
"name": "アイテム名",
"quantity": "1",
"base_price_money": {
"amount": 100,
"currency": "JPY"
}
}
]
}
},
"ask_for_shipping_address": true
}'
- idempotency_key : 注文用のユニークID
- location_id : 事前に取得しておいたlocation ID
- line_items : 注文アイテムの情報
- name : アイテム名
- quantity : 数量
- base_price_money : 価格情報
- amount : 金額
- currency : 通貨
- ask_for_shipping_address : trueだとチェックアウト画面で住所を入力できる
レスポンスは以下のような情報が返ってきます。
{
"checkout": {
"id": "CBASEKm_qJ3BeTG27SnbOzAkXBs",
"checkout_page_url": "https://connect.squareupsandbox.com/v2/checkout?c=CBASEKm_qJ3BeTG27SnbOzAkXBs&l=M513Y0SCF175A",
"ask_for_shipping_address": true,
"order": {
"id": "KMvhoORZBkKNnWP6szBtchATWe4F",
"location_id": "M513Y0SCF175A",
"source": {
"name": "Sandbox for sq0idp-LUCLOPS6RjfQhSMSwHHPvw"
},
"line_items": [
{
"uid": "kj7Sl32wZYLyv34ppcka7B",
"name": "アイテム名",
"quantity": "1",
"base_price_money": {
"amount": 100,
"currency": "JPY"
},
"variation_total_price_money": {
"amount": 100,
"currency": "JPY"
},
"gross_sales_money": {
"amount": 100,
"currency": "JPY"
},
"total_tax_money": {
"amount": 0,
"currency": "JPY"
},
"total_discount_money": {
"amount": 0,
"currency": "JPY"
},
"total_money": {
"amount": 100,
"currency": "JPY"
}
}
],
"net_amounts": {
"total_money": {
"amount": 100,
"currency": "JPY"
},
"tax_money": {
"amount": 0,
"currency": "JPY"
},
"discount_money": {
"amount": 0,
"currency": "JPY"
},
"tip_money": {
"amount": 0,
"currency": "JPY"
},
"service_charge_money": {
"amount": 0,
"currency": "JPY"
}
},
"created_at": "2020-03-15T07:07:45.160Z",
"updated_at": "2020-03-15T07:07:45.160Z",
"state": "OPEN",
"version": 1,
"total_money": {
"amount": 100,
"currency": "JPY"
},
"total_tax_money": {
"amount": 0,
"currency": "JPY"
},
"total_discount_money": {
"amount": 0,
"currency": "JPY"
},
"total_tip_money": {
"amount": 0,
"currency": "JPY"
},
"total_service_charge_money": {
"amount": 0,
"currency": "JPY"
}
},
"created_at": "2020-03-15T07:07:45Z"
}
}
checkout_page_url
のURLを表示すると、以下のような画面が表示されました。
適当に発送先情報を入れ、SANDBOXテスト用カード番号を入力してオーダーしてみました。
管理画面で確認
ちゃんと取引記録が入りました。
まとめ
CheckoutAPIは、住所やカード番号などの情報の管理を全てSquareに任せられるので、個人情報の管理も気にしなくていいので安心。
しかし、英語のチェックアウトページしか用意されていないのが残念。
やっぱり、ちゃんとUI作ってPaymentsAPIを使うのが良さそうです。