開発情報・ナレッジ

クレジットカード決済のオプションサービス「EMV 3Dセキュア」の実装サンプルプログラム

ここでは、 セミナー受付管理でご案内しているセミナー申込サイトを例に、ソニーペイメントサービス株式会社が提供する決済代行サービスの「e-SCOTT」を利用して、都度および継続課金に対応したクレジットカード決済のオプションサービス「EMV 3Dセキュア」の実装方法をご紹介します。

●「e-SCOTT」の特徴
クレジットカード決済やコンビニ決済などの幅広い決済手段から、事業者様のニーズに合わせた最適な決済方法を一括導入、一元管理が可能であり、グローバルなセキュリティ基準に準拠し、20年以上の実績と信頼のソニーペイメントサービス株式会社のマルチペイメントサービスです。

●「EMV 3Dセキュア」について
EMV 3Dセキュアは、クレジットカード決済を安全に行うための国際カードブランドが提供する本人認証サービスです。
本人認証にはあらかじめ設定したパスワード、ワンタイムパスワード、デバイスの生体認証など、カード発行会社によって認証方式が異なります。
詳しくはこちらのサイトでご確認ください。

デモを確認

前提条件

セミナー受付管理が作成されていることが必要です。
決済機能のご利用にはソニーペイメントサービス株式会社との利用契約が必要となります。
※参考 ご契約からご利用開始まで、通常1カ月程度かかります。
詳しくは、下記メールアドレスまでお問い合わせください。
 メールアドレス:takahiro.nakamura@sonypayment.co.jp
 担当:中村

概要図

各処理から書き込みを行うログDBおよび各処理から読み込みを行う環境変数DBへの矢印は、概要図からは割愛しております。 歯車マークは、セミナー申込者には見えないページを示します。

構成要素

変更する構成要素
DB
クレジットカード決済サービスに関連する情報を既存DBに追加します。
・セミナーマスターDB
・セミナー申込DB
サイト
決済サービスに関連する情報を表示するように処理を追加します。
・セミナー一覧ページ
・セミナー詳細ページ
・セミナー申込ページ
追加する構成要素
DB
決済の履歴管理をするDBを作成します。
・ログDB
本処理で必要な変数を登録しておくDBを作成します。
・環境変数DB
サイト
クレジットカード情報を入力するページを新規作成します。
・カード情報入力ページ
本人認証ページへリダイレクトするページを新規作成します。
・決済処理ページ
決済のお支払い情報を取得するページを新規作成します。
このページはe-SCOTTシステムからアクセスがあるのみで、セミナー申込者から見えないページです。
・結果通知取得ページ
都度課金の決済完了と継続課金の契約完了時に表示するページを新規作成します。
・決済完了ページ
スケジュールトリガ
毎月課金を行う継続課金用プログラムを作成します。
・継続課金バッチ

手順

1.ソースコードダウンロード
必要なファイルを下記のリンクからダウンロードします。
2.DB変更と作成
2-1.セミナーマスターDB
以下のフィールドを追加します。
フィールドタイプ 表示名 備考
数値 料金
テキスト セミナーID
セレクト 都度課金/継続課金フラグ 1︓都度課金
2︓継続課金
追加する「セミナーID」はDBトリガ機能(レコードアクション)を設定します。
レコードアクションの説明は以下のコンテンツをご確認ください。
DBトリガ機能(レコードアクション)

セミナーマスターDBにレコードアクションを作成し、処理を設定します。
レコードアクションの登録トリガにて、システムで採番されるIDを「セミナーID」の格納値として設定します。
設定内容は画像を参照してください。
2-2.セミナー申込DB
以下のフィールドを追加します。
フィールドタイプ 表示名 備考
テキスト 郵便番号
テキスト セミナーID
セレクト 決済ステータス [都度課金]
1:未決済(デフォルト)
2:決済
[継続課金]
1:未契約(デフォルト)
2:契約
数値 料金
セレクト 都度課金/継続課金フラグ 1:都度課金
2:継続課金
日時 申込年月日
テキスト トークン
テキスト e-SCOTT会員ID
テキスト e-SCOTT会員パスワード
日時 決済開始日
日時 継続課金契約日
日時 決済完了日
日時 決済予定日
数値 支払回数
数値 未払回数
テキスト セッションID
テキストエリア 備考
追加する「レコードID」「e-SCOTT会員ID」「e-SCOTT会員パスワード」「セッションID」はフィールド詳細設定にて、デフォルト値を設定します。

「レコードID」はシステムで採番されるIDを設定します。
設定内容は画像を参照してください。
「e-SCOTT会員ID」「e-SCOTT会員パスワード」「セッションID」はランダム文字列16桁を設定します。
3つの項目とも設定内容は画像を参照してください。
追加する「申込年月日」はDBトリガ機能(レコードアクション)を設定します。
レコードアクションの説明は以下のコンテンツをご確認ください。
DBトリガ機能(レコードアクション)

セミナー申込DBにレコードアクションを作成し、処理を設定します。
「申込年月日」はDB格納時の日時を設定します。
設定内容は画像を参照してください。
セミナー申込者宛てに、都度課金のお支払い完了時と継続課金のご契約完了時にメール送信する設定をします。
DBトリガのメールアクションの説明は以下のコンテンツをご確認ください。
DBトリガのメールアクション

都度課金の決済完了後にメール送信するDBトリガのメールアクションを設定します。
セミナー申込DBの更新トリガにて、「決済ステータス」更新時にメールを送信します。
設定内容は画像を参照してください。
次に継続課金の契約完了後にメール送信するDBトリガのメールアクションを設定します。
セミナー申込DBの更新トリガにて、「決済ステータス」更新時にメールを送信します。
設定内容は画像を参照してください。
2-3.ログDB
e-SCOTT システムとの送受信ログやセミナー申込 DB の更新履歴を登録する DB になります。
以下のフィールドを作成します。
フィールドタイプ 表示名 備考
テキスト インデックス
テキストエリア ログデータ Jsonデータが登録されます
テキストエリア 備考
2-4.環境変数DB
本処理で必要な変数を登録しておくDBです。
以下のフィールドを作成します。
フィールドタイプ 表示名 備考
テキスト 環境変数名
テキストエリア 環境変数値
テキストエリア 説明
環境変数DBに以下のレコードを登録します。
環境変数名 環境変数値 説明
GetTokenCodeURL ソニーペイメントサービス株式会社と契約すると、パラメータと値が払い出されます。
その値を設定します。
トークン取得URL
TransactionURL 3Dセキュアクレジットカード共通電文
MonthlyTransactionURL クレジットカード 継続課金オーソリ電文
MerchantID マーチャントID
MerchantPass マーチャントパスワード
Passphrase 暗号化キー(電文用)
InitVector 初期化ベクトル(電文用)
TokenCode トークン認証コード
SemiMstURL https://api.spiral-platform.com/v1/apps/[アプリID]/dbs/[セミナーマスターDBのDBID]/records (注1) セミナーマスターDBのURL
SemiRegistURL https://api.spiral-platform.com/v1/apps/[アプリID]/dbs/[セミナー申込DBのDBID]/records (注1) セミナー申込DBのURL
LogDataURL https://api.spiral-platform.com/v1/apps/[アプリID]/dbs/[ログDBのDBID]/records (注1) ログDBのURL
TenantId 0001 店舗コード(電文用)
(注1)DBへアクセスするためのURLです。確認方法は以下のページを参照してください。
APIによるDB作成/レコード操作

アプリIDはアプリ作成時に発行されます。基本設定から参照できます。
またDBIDはDB作成時に発行されます。基本設定から参照できます。
3.DBアプリロール設定
既存のアプリロールにログDBに関する権限を追加します。
権限調整の詳細は、「アプリロール」をご確認ください。
制限内容は以下の通りです。
アプリロール 許可/制限したい内容
管理者 全操作可能
セミナー事務局
営業/サポート担当
販促
ログDBに関する操作はすべてNG
4.PHP環境変数
共通設定内のPHP環境変数にて、PHPで使用する環境変数を設定します。
設定内容は以下の通りです。
変数名 共通/個別 説明
APIKey 共通 APIキー(注1)
CardPaymentEnvDbUrl 共通 環境変数DBのURL(注2)
BaseURL 共通 作成したサイトURL
(注1)APIキーの発行方法は以下のそれぞれの詳細ページを参照してください。
APIエージェントでのAPIキーの発行
ユーザに紐づくAPIキーの発行
(注2)環境変数DBへアクセスする為のURLです。このURLの調査方法は以下のページを参照してください。
APIによるDB作成/レコード操作
5.ページ変更と作成
5-1.セミナー一覧ページ(任意)
セミナー一覧ページに料金フィールドを表示させます。
ご自身で料金表示の対応をする場合はスキップして頂いて構いません。
作成済みのレコードリストブロックを編集してフィールドを追加します。
詳しくは、レコードリストブロックのビジュアル設定をご確認ください。

追加項目
フィールドタイプ 表示名
数値 料金

追加すると以下のようになります。
5-2.セミナー詳細ページ(任意)
セミナー詳細ページに料金フィールドを表示させます。
ご自身で料金表示の対応をする場合はスキップして頂いて構いません。
作成済みのレコードアイテムブロックを編集してフィールドを追加します。
詳しくは、レコードアイテムブロックのビジュアル設定を参照してください。

追加項目
フィールドタイプ 表示名
数値 料金(都度課金/継続課金フラグが1の場合)
月額料金(都度課金/継続課金フラグが2の場合)

プレビューは以下のようになります。
5-3.セミナー申込ページ
セミナー申込ページに郵便番号と料金を表示させます。
作成済みの登録フォームブロックを編集してフィールドを追加します。
追加方法については以下のコンテンツの「フィールドパーツ追加」をご確認ください。
登録フォームブロックのソース設定

追加項目
フィールドタイプ 表示名 備考
テキスト 郵便番号
数値 料金 都度課金/継続課金フラグが1の場合
月額料金 都度課金/継続課金フラグが2の場合

プレビューは以下のようになります。
5-3-1.「PHP」タブの設定
「PHP」タブを選択し、以下のファイルの中身に全て置き換えます。
【seminar_application.txt】
このコードはセミナーIDをキーにセミナー情報を取得しパラメータとして引き渡す処理です。
5-4.申込完了メール
申込完了メールにカード情報入力ページへ遷移用URLを追加します。
登録フォームブロックの完了メールを編集して本文に遷移用URLを追加します。
申込完了メールの本文などを変更したい場合は、「フォームのメールアクション」をご確認ください。

遷移用URLはカード情報入力ページのURLに、リクエストパラメータとして
?record={{セミナー申込DBのセッションID}}
を付与します。
このセッションIDは、セミナー申込者を特定するためのものです。
5-5.カード情報入力ページ
クレジットカード決済サービスのカード情報入力するページを作成します。
5-5-1.ページ作成
下図のようにカード情報入力ページを作成します。
 識別名:enter
 表示名:カード情報入力
 設定方法:ソース設定
5-5-2.「body」タブの作成
「body」タブを選択し、以下のファイルの中身に全て置き換えます。
【enter_body.txt】
5-5-3.「head」タブの作成
「head」タブを選択し、以下のファイルの中身に全て置き換えます。
【enter_head.txt】
5-5-4.「PHP」タブの作成
「PHP」タブを選択し、以下のファイルの中身に全て置き換えます。
【enter_php.txt】
※ページ設定で指定したPHPは当該ページのみに適用されます。
5-6.決済処理ページ
e-SCOTTシステムへ電文送信と、本人認証ページへ遷移するページを作成します。
5-6-1.ページ作成
下図のように決済処理ページを作成します。
 識別名:pay
 表示名:決済処理
 表示名:設定方法:ソース設定
5-6-2.「body」タブの作成
「body」タブを選択し、以下のファイルの中身に全て置き換えます。
【pay_body.txt】
5-6-3.「JavaScript」タブの作成
「JavaScript」タブを選択し、以下のファイルの中身に全て置き換えます。
【pay_javascript.txt】
5-6-4.「PHP」タブの作成
「PHP」タブを選択し、以下のファイルの中身に全て置き換えます。
【pay_php.txt】
※ページ設定で指定したPHPは当該ページのみに適用されます。
5-7.結果通知取得ページ
クレジットカード決済サービスの結果通知の情報を受け取るためのページを作成します。
5-7-1.ページ作成
下図のように結果通知取得ページを作成します。
 識別名:updateresult
 表示名:結果通知取得
 設定方法:ソース設定
5-7-2.「body」タブの作成
「body」タブを選択し、以下のファイルの中身に全て置き換えます。
【updateresult_body.txt】
5-7-3.「PHP」タブの作成
「PHP」タブを選択し、以下のファイルの中身に全て置き換えます。
【updateresult_php.txt】
※ページ設定で指定したPHPは当該ページのみに適用されます。
5-8.決済完了ページ
決済・契約完了を表示するページを作成します。
5-8-1.ページ作成
下図のように決済完了ページを作成します。
 識別名:finish
 表示名:決済完了
 設定方法:ソース設定
5-8-2.「body」タブの作成
「body」タブを選択し、以下のファイルの中身に全て置き換えます。
【finish_body.txt】
5-8-3.「JavaScript」タブの作成
「JavaScript」タブを選択し、以下のファイルの中身に全て置き換えます。
【finish_javascript.txt】
5-8-4.「PHP」タブの作成
「PHP」タブを選択し、以下のファイルの中身に全て置き換えます。
【finish_php.txt】
※ページ設定で指定したPHPは当該ページのみに適用されます。
6.スケジュールトリガの作成
アプリ設定のスケジュールトリガを利用してバッチ処理を作成します。
6-1.スケジュールトリガの設定
アプリ設定のスケジュールトリガを開き、左上の+ボタンを押してトリガを作成します。作成方法の詳細はこちらをご確認ください。
下図の例では、最も実行回数が多くなるよう1時間に4回としています。
6-2.カスタムプログラム作成
作成したスケジュールトリガを開き、「アクション」タブを選択します。左上の+ボタンを押してアクションを作成します。カスタムプログラムアクションについての詳細はこちらをご確認ください。
以下のファイルの中身をカスタムプログラムアクションのPHP欄に記載します。
【custom_program.txt】

※カスタムプログラムからはPHP環境変数が利用できないため、下記変数に7-4 PHP環境変数で説明している、環境変数DBのURLとAPIキーを設定してください。
// 環境変数DB
$env_var_url = $baseurl."<アプリID>/dbs/<DB ID>/records";
// APIキー
$apikey = "<APIキー>";
※排他制御を実装していませんので、複数のスケジュールトリガを設定しないでください。
7.動作確認
7-1.サイト・アプリの動作確認
セミナー受付管理ページ4-15-16-1 を参照しながら各ページの動作確認を行います。
7-2.決済処理の動作確認
テスト環境のセミナー一覧ページから順次アクセスし、セミナー申込を完了させます。
送信された申込完了メールに記載されているURLをクリックし、カード情報入力ページへ遷移します。
未決済または未契約の場合は、カード情報入力ページが表示されます。
既に都度課金の決済が完了している場合は、ページ上に「お申し込み頂いたセミナーのお支払い処理は既に完了しています。」の文言が表示されます。
既に継続課金の契約が完了している場合は、「お申し込み頂いたセミナーの継続課金のご契約は既に完了しています。」の文言が表示されます。

セミナー申込DBの決済ステータスが1(未決済)の状態の時、結果通知取得にて都度課金の決済完了を受け取った場合、以下のようにセミナー申込DBの項目が更新されます。
表示名
決済ステータス 2
決済完了日 現在時刻

セミナー申込DBの決済ステータスが1(未契約)の状態の時、結果通知取得にて継続課金の契約完了を受け取った場合、以下のようにセミナー申込DBの項目が更新されます。
表示名
決済ステータス 2
継続課金契約日 現在時刻
決済予定日 現在時刻
8.本番反映
テスト環境での確認が完了したら、セミナー受付管理ページ5-25-3 を参照しながら本番環境に反映します。
申込完了メールの本文に設定したカード情報入力ページURLも本番環境のURLへ変更をしてください。

制約事項

・本記事掲載にあたり、弊社で実施した試験はe-SCOTTの試験用のクレジットカード決済サービスを利用しています。
・本記事でご紹介の実装は、以下の点をご留意ください。
概要図で示す「本人認証」で中断した場合はお支払いの再開はできません。
継続課金のお支払い用に登録したクレジットカードの変更はできません。
継続課金の中断・再開は考慮しておりません。

ご利用ガイド

ソニーペイメントサービス株式会社とのご契約について
初期費用、月額固定費、トランザクション処理料、手数料等は、商材によって異なることがありますので、ソニーペイメントサービス株式会社にお問い合わせください。
 メールアドレス:takahiro.nakamura@sonypayment.co.jp
 担当:中村

よくある質問と回答を以下のページに記載しております。
https://faq.sonypaymentservices.jp/category/show/67?site_domain=default
ご契約致しますと、e-SCOTTシステムのマニュアルが提供されます。
ソニーペイメントサービス株式会社の加盟店管理画面の操作方法について
操作方法についてはこちらのアドレスにアクセスしてください。
https://faq.sonypaymentservices.jp/category/show/67?site_domain=default
決済状況の確認方法について
ソニーペイメントサービス株式会社の加盟店管理画面からご確認頂けます。
SPIRAL管理画面のセミナー申込DBから該当するセミナー申込者の「申込年月日」「セッションID」をご確認してください。
加盟店管理画面の取引データ検索にて、処理日時項目で「申込年月日」を含む範囲の指定を行い、自由領域1項目で「セッションID」を入力し、検索を行います。
決済処理が出来なかった場合、ステータスは「NG」となっております。
処理結果コードから取引のエラー原因が判断できます。
加盟店管理画面の詳しい操作方法は、「e-SCOTT Smart 加盟店管理画面 操作マニュアル」を参照してください。

処理結果コードの詳細はこちらのアドレスからエラーコード表をダウンロードして、ご確認ください。
https://faq.sonypaymentservices.jp/faq/show/671?category_id=13&site_domain=default
継続課金の料金未納確認について
SPIRAL管理画面のセミナー申込DBから「都度課金/継続課金フラグ」が2(継続課金)かつ「未払回数」が0以外のレコードを検索してください。
該当するレコードは、クレジットカード決済サービスでの引き落としができない状態です。
このレコードのセミナー申込者へ連絡し、料金請求の対応を行ってください。
継続課金の解約について
次の手順を実施してください。
1. SPIRAL管理画面のセミナー申込DBから該当するセミナー申込者の「申込年月日」「e-SCOTT会員ID」を確認する
2. e-SCOTT加盟店管理画面の会員情報検索にて、処理日時の項目で上記「申込年月日」を含む範囲の指定し、会員ID項目に「e-SCOTT会員ID」を入力し検索する
3. 該当する会員IDを「会員無効」にする
4. SPIRAL管理画面のセミナー申込DBから次のように更新する
「決済予定日」→空欄
「備考」→“yyyy/mm/dd 解約”

解決しない場合はこちら コンテンツに関しての
要望はこちら