ホストページ
KOMOJU ホストページを使うことで、とても簡単で安全な決済処理を導入できます。
たった1つのインテグレーションで、以下の機能をご利用いただけます。
- 多通貨、多言語対応の国際的な支払い
- 複数の決済方法から顧客が希望する方法を選んで決済可能
- PCIに準拠した安全なクレジットカード決済システム
注: 旧ホストページをお探しの方は、こちらをご参照ください。
決済の流れ
まずはじめにセッションを作成してホストページの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 またはcaptured のpaymentが含まれるようになります。 |
cancelled |
顧客が「マーチャントに戻る」をクリックして支払いをキャンセル。pending 状態の ペイメントが含まれている場合、顧客が支払いに失敗した可能性があります。 |
pending |
新たに作成されたセッションです。 pending 状態のセッションで顧客がredirect_url にリダイレクトされることはありません。 |
シーケンス図
ワンクリック決済
ワンクリック決済を利用することでリピーターの迅速な決済を実現できます。
顧客は決済時にクレジットカード情報を保存できるようになります。 この機能により、顧客はクレジットカード情報を再入力する手間を省略できるため、決済のコンバージョンが上がります。
ワンクリック機能は以下のパラメータを指定すると有効になります。
パラメータ | 詳細 | 値 |
---|---|---|
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"
}