Integration Guide
ウェブブラウザに都度決済機能を実装する
対象となるサービス
- ECの決済
- デジタルコンテンツにおける一過性の決済
- コインやアイテムなどの購入
本機能によってできること
- ユーザーが Jamm で決済することを選択できる
- 選択したあとにユーザーが必要な行動を取り決済手続きを完了する
- 決済手続きが完了してから、ユーザーが自社サイトに戻り、決済完了画面を確認する
実装に必要な手順
- サービス内に Jamm 決済オプションボタンを実装
- ユーザーを Jamm の指定するリンクに遷移させる
- ユーザー決済完了の webhook を受け取る
1. バックエンドにJamm決済機能を実装する
Step 1 of 3
1
サーバーを設定する
Jamm SDKのインストール
Gemfile + ターミナル
1bundle add jamm
2
非公開鍵を設定する
server.rb
1require "jamm"2
3# Rails等のinitializerに設定してください。4Jamm.configure(5 # クライアントIDを設定6 client_id: ENV['JAMM_MERCHANT_CLIENT_ID'],7 # クライアントシークレットを設定8 client_secret: ENV['JAMM_MERCHANT_CLIENT_SECRET'],9 # Jammの環境を設定10 # - staging: Staging環境11 # - prod: Production(本番)環境12 env: ENV['JAMM_ENVIRONMENT'],13)
3
リダイレクト用支払いリンクを取得する
server.rb
1require "jamm"2
3# 支払いリンクを作成するには、以下3つのオブジェクトをセットしてください。4# 1. Buyer: 購入者情報5# 2. Charge: 決済情報6# 3. Redirect: 購入完了後にストアに戻るためのリンクURL7result = Jamm::Payment.on_session(8 buyer: Jamm::OpenAPI::Buyer.new(9 # 購入者のメールアドレス (必須)10 email: 'foo1@example.com',11 # 本人確認を強制する場合はtrue12 # 本人確認を強制しない場合、銀行の引き落とし上限額が低くなります。13 # 引き落とし上限額は銀行によって異なります。14 force_kyc: true,15 # 購入者の話番号 (半角数字のみ)16 phone: '09012345678',17 # 購入者氏名18 name: '山田 太郎',19 # 購入者氏名 (カタカナ)20 katakanaLastName: 'ヤマダ',21 katakanaFirstName: 'タロウ',22 # 購入者住所23 address: '東京都港区赤坂1-14-14第35興和ビル5F',24 # 購入者の生年月日25 birthDate: '1990-01-01',26 # 購入者の性別 (male / female)27 gender: 'male',28 # 任意のメタデータ29 # 例えばストアのユーザIDなど、カスタマーサポートに必要な追加情報を30 # ご指定ください。加盟店ダッシュボードで確認できます。31 #32 # この情報はエンドユーザには表示されません。33 # key/valueどちらも文字列型が必要です。34 metadata: {35 storeUserId: 'user_12345',36 }37 ),38 charge: Jamm::OpenAPI::InitialCharge.new(39 # 決済額40 price: 1000,41 # 決済の説明42 # このプロパティはエンドユーザに表示されます。43 description: 'ロングTシャツ',44 # 支払いリンクの有効期限45 # ISO 8601 extended format46 # - 年月日: YYYY-MM-DD47 # - 時刻プリフィックス: T48 # - 時間: HH:mm:ss49 # - UTC時刻: Z50 expiresAt: '2025-08-01T07:04:16Z',51 ),52 redirect: Jamm::OpenAPI::URL.new(53 # 決済成功時にストアに戻るためのURL54 success_url: "https://example.com/success",55 # 決済失敗時にストアに戻るためのURL56 failure_url: "https://example.com/failure",57 ),58)59
60puts result.to_hash.to_json
2. Jamm決済用のボタンを実装する
上記のステップで支払いリンクを作成したら、フロントエンドのボタンにリンクをセットしてください。
<a href={支払いリンク}>
Jammで支払う
</a>
3. 決済完了のwebhookを受け取る
Step 1 of 3
1
webhook URLを登録する
Provide webhook URL to Jamm
加盟店ダッシュボードからwebhook URLを設定
2
決済成功webhookを受け取る
server.rb
1# 例: Jamm Webhook用のルートを設定2
3# WebhookはJammからストアのサーバに対して送信されます。4# Webhookを受け取るエンドポイントは公開されている必要があります。5
6# Jammから配信されたWebhookメッセージ例7raw = JSON.parse('{8 "id": "mwh-00000000000000001",9 "signature": "sha256=000000000000000000000001",10 "created_at": "2025-03-26T02:24:51.989383018Z",11 "event_type": "EVENT_TYPE_CHARGE_SUCCESS",12 "content": {13 # contentの中身はメッセージ種類によって異なる14 }15}')16
17# Webhookメッセージを検証18Jamm::Webhook.verify(19 data: raw['content'].to_json,20 signature: raw['signature']21)22
23# Webhook メッセージを受け取り、メッセージ種別によって処理を行う24msg = Jamm::Webhook.parse(raw)25
26case msg.event_type27# 契約有効化時の処理28# https://github.com/jamm-pay/ruby-sdk/blob/main/lib/jamm/api/models/v1_contract_message.rb29#30# {31# customer: "cus_12345", // 顧客ID32# email: "user@example.com", // メールアドレス33# merchant_name: "Acme Inc" // ストア名34# }35when Jamm::OpenAPI::EventType::CONTRACT_ACTIVATED36 puts msg.content37
38# 決済処理系に含まれるcontentプロパティ39# https://github.com/jamm-pay/ruby-sdk/blob/main/lib/jamm/api/models/v1_charge_message.rb40#41# {42# id: "ch_12345",43# customer: "cus_12345",44# status: "STATUS_SUCCESS",45# initial_amount: 10000,46# discount: 500,47# final_amount: 9500,48# amount_refunded: 0,49# currency: "USD",50# // 処理日時。必要に応じてデータストアに保存してください51# processed_at: "2025-08-22T10:30:00Z",52# }53#54# 決済発生・失敗・作成・更新・キャンセル時の処理55when Jamm::OpenAPI::EventType::CHARGE_CREATED56when Jamm::OpenAPI::EventType::CHARGE_SUCCESS57when Jamm::OpenAPI::EventType::CHARGE_FAIL58when Jamm::OpenAPI::EventType::CHARGE_UPDATED59when Jamm::OpenAPI::EventType::CHARGE_CANCEL60 puts msg61
62# Jamm Customerが削除された場合63# https://github.com/jamm-pay/ruby-sdk/blob/main/lib/jamm/api/models/v1_user_account_message.rb64#65# {66# customer: "cus_98765",67# email: "alice@example.com",68# deleted_at: "2025-08-22T10:30:00Z" // 削除日時69# }70when Jamm::OpenAPI::EventType::USER_ACCOUNT_DELETED71else72 raise "Unsupported event type"73end74
3
決済後処理を実施する
決済関連DBの更新、発送、経理システムとの連携など必要な後処理を実施!