By

決済 API Komoju を使って決済してみる

この記事は Payment Advent Calendar 2015 の 17 日目です。

今日は弊社 Degica で開発している Komoju という決済 API とその使い方を紹介します。

Komoju とは

Komoju は複数の支払い方法に対応している決済ゲートウェイサービスです。

現時点で対応している支払い方法は全部で 5 種類です。

  • クレジットカード
  • コンビニ支払い
  • 銀行振込
  • PayEasy
  • WebMoney

使い方にもいくつかの方法がありますが、この記事では REST API を使った決済を試してみます。

API ドキュメント

この記事では紹介しきれない機能もあるので、知りたい方はAPIドキュメントを参照してください。

アカウント作成

まず、サインアップのページでテスト用のアカウントを作りましょう。

準備

API キーの確認

API を実行するには API キーが必要です。ログインして、「クライアントアカウント」のページから「Secret キー」を確認してください

Webhookの作成

Komoju は決済に関するステータスの変化が発生したときに Webhook を指定した URL に送信します。今回は Webhook の中身だけ確認できればよいので、 RequestBin を使います。
「クライアントアカウント」→「Webhook」→「新規WEBHOOK」に移動して Webhook を作成します。

まず、requestb.in の URL を設定して、シークレットキーを適当に入力してください。このシークレットキーは Webhook の送信者が Komoju であることを証明するものなので、今回は適当でよいです。
受信したい webhook イベントの種類を選べるので、今回はとりあえず payment.* を全部有効にします。

API の実行

以上でセットアップは完了です。さっそく curl を使って API を実行してみましょう

クレジットカード決済を実施する

[your secret key] には先程確認した「Secret キー」を使ってください

curl -u [your secret key]: -XPOST https://sandbox.komoju.jp/api/v1/payments \
 -d "amount=1000" \
 -d "currency=JPY" \
 -d "payment_details[type]=credit_card" \
 -d "payment_details[family_name]=Yamada" \
 -d "payment_details[given_name]=Taro" \
 -d "payment_details[month]=01" \
 -d "payment_details[year]=2016" \
 -d "payment_details[number]=4111111111111111" \
 -d "payment_details[verification_value]=123"

amountcurrency はすべての支払い方法で共通のパラメータで支払方法ごとに固有のパラメータは payment_details オブジェクトの中に入れます。
今回はクレジットカードの支払いなので payment_details[type]credit_card を設定しています。

パラメータに関する詳しい情報はドキュメントの Create Payment APIペイメントの詳細 を参照してください。

さて、上記の curl コマンドを実行すると、次のようなレスポンスが返ってきます。(jqで整形してます)

{
  "id": "29ttr6noadghk5uysfdj1ierw",
  "resource": "payment",
  "status": "captured",
  "amount": 1000,
  "tax": 80,
  "customer": null,
  "payment_deadline": null,
  "payment_details": {
    "type": "credit_card",
    "email": null,
    "brand": "visa",
    "last_four_digits": "1111",
    "month": 1,
    "year": 2016
  },
  "payment_method_fee": 0,
  "total": 1080,
  "currency": "JPY",
  "description": null,
  "subscription": null,
  "captured_at": "2015-12-17T02:33:37Z",
  "external_order_num": null,
  "metadata": {},
  "created_at": "2015-12-17T02:33:37Z",
  "amount_refunded": 0,
  "refunds": []
}

決済の確認

管理画面の 取引ページ に行くと、先ほど実行した決済が作成されていることが確認できます。

また、この情報はList Payments APIで JSON データを取得することもできます。

$ curl -u [your secret key]: https://sandbox.komoju.jp/api/v1/payments | jq .
{
  "resource": "list",
  "total": 1,
  "page": 1,
  "per_page": 30,
  "last_page": 1,
  "data": [
    {
      "id": "29ttr6noadghk5uysfdj1ierw",
      "resource": "payment",
      "status": "captured",
      "amount": 1000,
      "tax": 80,
      "customer": null,
      "payment_deadline": null,
      "payment_details": {
        "type": "credit_card",
        "email": null,
        "brand": "visa",
        "last_four_digits": "1111",
        "month": 1,
        "year": 2016
      },
      "payment_method_fee": 0,
      "total": 1080,
      "currency": "JPY",
      "description": null,
      "subscription": null,
      "captured_at": "2015-12-17T02:33:37Z",
      "external_order_num": null,
      "metadata": {},
      "created_at": "2015-12-17T02:33:37Z",
      "amount_refunded": 0,
      "refunds": []
    }
  ]
}

Webhook の確認

先ほど設定した requestb.in に行って確認してみると、次のような Webhook が送信されていることが確認できます(jqで整形してます)
ちなみに、この記事を書くのに使ったrequestb.inは http://requestb.in/120sewg1?inspect です。

{
  "id": "3x2zofq2zwtv0woecshqokl4r",
  "type": "payment.captured",
  "resource": "event",
  "data": {
    "id": "29ttr6noadghk5uysfdj1ierw",
    "resource": "payment",
    "status": "captured",
    "amount": 1000,
    "tax": 80,
    "customer": null,
    "payment_deadline": null,
    "payment_details": {
      "type": "credit_card",
      "email": null,
      "brand": "visa",
      "last_four_digits": "1111",
      "month": 1,
      "year": 2016
    },
    "payment_method_fee": 0,
    "total": 1080,
    "currency": "JPY",
    "description": null,
    "subscription": null,
    "captured_at": "2015-12-17T02:33:37Z",
    "external_order_num": null,
    "metadata": {},
    "created_at": "2015-12-17T02:33:37Z",
    "amount_refunded": 0,
    "refunds": []
  },
  "created_at": "2015-12-17T02:33:37Z"
}

その他の決済

payment_details の中身を変更すると、クレジットカード以外の決済を実施できます。例えばコンビニ決済だと、次のようなリクエストになります。

curl -u [your secret key] -XPOST https://sandbox.komoju.jp/api/v1/payments \
  -d "amount=1000" \
  -d "currency=JPY" \
  -d "payment_details[type]=konbini" \
  -d "payment_details[email]=test@example.com" \
  -d "payment_details[phone]=090-1111-2222" \
  -d "payment_details[store]=lawson"

まとめ

Komoju API の始め方を簡単に紹介しました。
繰り返しになりますが詳細な情報については API ドキュメントを参照してください。

管理画面の右下にカスタマーサポートチャットがありますので、何か質問があればお気軽にお問い合わせください。

明日は弊社 Chris です。

一緒にユニークな決済サービスを作ってくれる Rails エンジニアを募集中です!
多国籍なメンバーと一緒に仕事をしてみませんか?詳細はこちらのリンクです:D