ホストページ

KOMOJU ホストページを使うことで、とても簡単で安全な決済処理を導入できます。

たった1つのインテグレーションで、以下の機能をご利用いただけます。

  • 多通貨、多言語対応の国際的な支払い
  • 複数の決済方法から顧客が希望する方法を選んで決済可能
  • PCIに準拠した安全なクレジットカード決済システム

Checkout

注: 旧ホストページをお探しの方は、こちらをご参照ください。

決済の流れ

まずはじめにセッションを作成してホストページのURLを取得します。 次に、顧客をそのURLへリダイレクトして、顧客にホストページ上で決済をしていただきます。

セッションの作成

セッションの作成には、amount(金額)、currency(通貨)、external_order_num(取引の識別子)を指定して POST /api/v1/sessions へリクエストしてください。

なお、KOMOJU APIはリクエストの際に認証を通過する必要があります。詳しくはこちらをご覧ください。

リクエストサンプル:


curl -X POST https://komoju.com/api/v1/sessions \
  -u sk_12345: \
  -d "return_url=https://example.com" \
  -d "amount=1000" \
  -d "currency=JPY"
  -d "payment_data[external_order_num]=my_order_number"

レスポンスサンプル:

{
  "id": "boc2hxvmyl497eekihyrwmmgm",
  "resource": "session",
  "mode": "payment",
  "payment": null,
  "session_url": "https://komoju.com/sessions/boc2hxvmyl497eekihyrwmmgz",
  "return_url": "https://example.com",
  "default_locale": "ja",
  "payment_methods": [
    {
      "type": "credit_card"
    },
    {
      "type": "konbini"
    }
  ],
  "created_at": "2020-12-09T18:26:59.000+09:00",
  "cancelled_at": null,
  "completed_at": null,
  "status": "pending"
}

顧客のリダイレクト

上記のレスポンスサンプルのように、セッションの作成時に返されるJSONにはsession_urlが含まれます。 そのURLに顧客をリダイレクトします。 支払いが終わると、顧客はreturn_urlにリダイレクトされます。

決済のステータス確認

顧客が決済を完了したことの通知を受け取るためには、Webhookの設定が必要です。 支払いが正常に完了すると、KOMOJUは payment.captured イベントのWebhookを、設定されたエンドポイントURLへ送信します。 payment.captured Webhookはsessionパラメータを含みます。このパラメータを利用することで、決済が前のステップで作成したセッションにより作成されたものであることを知ることができます。

商品発送の判断をreturn_urlに依存しないように注意してください。 決済方法によっては、決済完了後、顧客が意図的に操作しない限りreturn_urlへリダイレクトしない場合があります。

顧客がリダイレクトされる際、return_urlのクエリーパラメータにsession_id=xxxxxが渡されます。 例えば、セッションがreturn_url=https://example.comを指定して作成された場合、 顧客は完了時にhttps://example.com?session_id=xxxxxにリダイレクトされます。 決済の状態を知るためには、session_idを使ってセッションの取得を行ってください。 セッションのステータスの一覧は以下の通りです。

session.status 説明
completed 顧客が決済情報の入力に成功。 セッションオブジェクトにauthorizedまたはcapturedpaymentが含まれるようになります。
cancelled 顧客が「マーチャントに戻る」をクリックして支払いをキャンセル。pending状態の ペイメントが含まれている場合、顧客が支払いに失敗した可能性があります。
pending 新たに作成されたセッションです。 pending状態のセッションで顧客がredirect_urlにリダイレクトされることはありません。

シーケンス図

ショップショップKOMOJUKOMOJU顧客顧客セッションの作成`session_url`へリダイレクト決済`return_url`へリダイレクトGET /api/v1/sessions/{id}`payment.status=captured`の確認注文の処理中か完了のページを表示Webhook `payment.captured`商品の発送またはサービスの提供

ワンクリック決済

One click

ワンクリック決済を利用することでリピーターの迅速な決済を実現できます。

顧客は決済時にクレジットカード情報を保存できるようになります。 この機能により、顧客はクレジットカード情報を再入力する手間を省略できるため、決済のコンバージョンが上がります。

ワンクリック機能は以下のパラメータを指定すると有効になります。

パラメータ 詳細
external_customer_id 顧客に割り当てられたIDです。 255 文字以下の長さを持つ文字列

このパラメータには顧客ごとに一意となる値を指定してください。 他の顧客と重複する可能性のある値や、悪意のある攻撃者によるなりすましが可能な値を使用してはなりません。

リクエストサンプル

フィールドの詳細な説明については、KOMOJU APIリファレンスをご参照ください。

  • cURL
  • Node.js
  • Ruby
curl -X POST https://komoju.com/api/v1/sessions \
  -u sk_123456: \
  -d "default_locale=ja" \
  -d "email=test@example.com" \
  -d "metadata[test]=value" \
  -d "amount=8888" \
  -d "currency=JPY" \
  -d "payment_data[external_order_num]=my_custom_order" \
  -d "payment_data[name]=John" \
  -d "payment_data[name_kana]=ジョン" \
  -d "payment_types[]=credit_card" \
  -d "payment_types[]=konbini" \
  -d "return_url=https://example.com" 
var querystring = require('querystring');
var https = require('https');
var secret_key = 'sk_123456'
var auth = 'Basic ' + Buffer.from(secret_key + ':').toString('base64');
var post_data = querystring.stringify({
  'default_locale': 'ja',
  'email': 'test@example.com',
  'metadata[test]': 'value',
  'amount': '8888',
  'currency': 'JPY',
  'payment_data[external_order_num]': 'my_custom_order',
  'payment_data[name]': 'John',
  'payment_data[name_kana]': 'ジョン',
  'payment_types[]': 'credit_card',
  'payment_types[]': 'konbini',
  'return_url': 'https://example.com'
});

var post_options = {
  host: 'komoju.com',
  port: '443',
  path: '/api/v1/sessions',
  method: 'POST',
  headers: {
    'Authorization': auth,
    'Content-Length': Buffer.byteLength(post_data)
  }
};

var post_req = https.request(post_options, function(res) {
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        console.log(chunk);
    });
});

post_req.write(post_data);
post_req.end();
require 'uri'
require 'net/https'
require 'json'
require 'base64'
require 'pp'
uri = URI.parse('https://komoju.com/api/v1/sessions')
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
secret_key = 'sk_123456'
auth = Base64.encode64("#{secret_key}:")
headers = {
  'Content-Type' => 'application/json',
  'Authorization' => "Basic #{auth}"
}

body = {
  default_locale: "ja",
  email: "test@example.com",
  metadata: {
    test: "value"
  },
  amount: "8888",
  currency: "JPY",
  payment_data: {
    external_order_num: "my_custom_order",
    name: "John",
    name_kana: "ジョン"
  },
  payment_types: [
    "credit_card",
    "konbini"
  ],
  return_url: "https://example.com"
}

res = https.post(
  uri.path,
  body.to_json,
  headers
)

puts res.body
{
  "id": "e9x5mvx3jkpkofzcg7umfael6",
  "resource": "session",
  "mode": "payment",
  "amount": 8888,
  "currency": "JPY",
  "payment": null,
  "session_url": "https://komoju.com/sessions/e9x5mvx3jkpkofzcg7umfael6",
  "return_url": "https://example.com",
  "default_locale": "ja",
  "payment_methods": [
    {
      "type": "credit_card"
    },
    {
      "type": "konbini",
      "brands": {
        "seven-eleven": "/images/konbini/seven-eleven.svg",
        "lawson": "/images/konbini/lawson.svg",
        "family-mart": "/images/konbini/family-mart.svg",
        "ministop": "/images/konbini/ministop.svg",
        "daily-yamazaki": "/images/konbini/daily-yamazaki.svg",
        "seicomart": "/images/konbini/seicomart.svg"
      }
    }
  ],
  "created_at": "2020-08-17T18:03:53.000+09:00",
  "cancelled_at": null,
  "completed_at": null,
  "status": "pending"
}