開発者ガイドにある以下の記述にそって、Oracle APEXに合わせた実装を行います。
実装ガイド:ホストフィールドでペイメントを作成
https://ja.doc.komoju.com/docs/integration-guide-standard
ワークスペース・ユーティリティのWeb資格証明を開きます。
作成したアプリケーションは以下のように動作します。
最後にREST APIを呼び出して決済セッションの状態を確認しています。実際に決済の成功や失敗を確認するにはWebhookを実装するのが一般的だと思いますが、本記事ではWebhookの作成は取り扱っていません。通常Webhookは、APEXのアプリケーションではなく、ORDSのRESTサービスとして実装します。
以下より実装について説明します。
アプリケーション作成ウィザードを起動し、空のアプリケーションを作成します。名前はKOMOJUとします。
アプリケーションの作成をクリックします。
アプリケーション定義の置換文字列として、公開鍵とAPIのエンドポイントを設定します。
公開鍵は置換文字列をKOMOJU_PUBLISHABLE_KEY、置換値としてpk_test_で始まる(テスト用の)公開鍵を設定します。
APIのエンドポイントは置換文字列としてKOMOJU_ENDPOINT、置換値としてhttps://komoju.com/apiを設定します。
KOMOJUが提供するREST APIに使用するWeb資格証明は、以下の情報より作成します。
KOMOJUの非公開鍵は秘匿が必須なので、基本認証の代わりに認証タイプとしてHTTPヘッダーを選択します。資格証明名はAuthorization、資格証明シークレットとして、文字列Basicで始めて空白で区切り、非公開鍵の末尾に':'(コロン)をつけてBase64でエンコードした値を設定します。
Linuxなどのコマンドラインでは、以下のような処理によって資格証明シークレットを生成できます。
Linuxなどのコマンドラインでは、以下のような処理によって資格証明シークレットを生成できます。
echo Basic `echo sk_test_xxxxxxxxxxxxxxxxxxxxxxx: | base64`
% echo Basic `echo sk_test_****************: | base64`
Basic ***************************************
%
Web資格証明の名前はKOMOJU Cred、静的IDはKOMOJU_CREDとして、Web資格証明を作成します。URLに対して有効はhttps://komoju.com/api/を設定します。
以上で作成をクリックします。
Web資格証明としてKOMOJU Cred(静的IDはKOMOJU_CRED)が作成されました。
KOMOJUのホストフィールドを表示するドロワーとなるページを作成します。
ページの作成をクリックします。
空白ページを選択します。
ページ番号を2(ページ・アイテム名に現れるため2とします)、名前をPay、ページ・モードとしてドロワーを選択します。
ページの作成をクリックします。
ページPayが作成されました。
ホーム・ページでは決済金額を入力し、確定ボタンを押します。確定ボタンを押すとKOMOJUが提供するカード情報を入力するホストフィールドを実装したドロワーが開き、そこで決済を実行します。決済を実行すると、ドロワーが閉じます。
ページ・デザイナでホーム・ページを開きます。
金額を入力するページ・アイテムP1_AMOUNTを作成します。
タイプは数値フィールド、ラベルはAmountとします。
ラベルはConfirm、外観のホットをオン、テンプレート・オプションのWidthとしてStretchを選択します。動作のアクションはデフォルトのページの送信から変更しません。
作成した決済セッションのIDを保持するページ・アイテムP1_SESSION_IDを作成します。タイプは非表示です。
セッション・ステートのストレージとしてセッションごと(永続)を選択します。決済セッションはPL/SQLでの処理で作成します。その際にページ・アイテムに設定されたセッションIDは、ページ遷移の後でも値を維持するようにします。
決済セッションの状態を表示するリージョンを作成します。
識別のタイトルはSession Show、タイプとして動的コンテンツを選択します。
ソースのCLOBを返すPL/SQLファンクション本体として以下を記述します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_response clob; | |
begin | |
if :P1_SESSION_ID is null then | |
return ''; | |
end if; | |
apex_web_service.set_request_headers('Accept','application/json'); | |
l_response := apex_web_service.make_rest_request( | |
p_url => :KOMOJU_ENDPOINT || '/v1/sessions/' || :P1_SESSION_ID | |
,p_http_method => 'GET' | |
,p_credential_static_id => 'KOMOJU_CRED' | |
); | |
return l_response; | |
end; |
ページ・アイテムP1_SESSION_IDはセッション・ステートとして保持されているため、送信するページ・アイテムへの設定は不要です。
ラベルはRefresh、動作のアクションとして動的アクションで定義を選択します。
識別の名前はonClick REFRESH、タイミングのイベントはボタンのデフォルトであるクリックです。
TRUEアクションとしてリフレッシュを選択します。影響を受ける要素の選択タイプはリージョン、リージョンとしてSession Showを選択します。
このページを初期化するボタンCLEARを作成します。
ラベルはClear、動作のアクションはページの送信です。レイアウトの新規行の開始はオフにし、ボタンREFRESHの右隣に配置します。
プロセス・ビューを開き、ボタンを押した時に実行されるプロセスを作成します。
ボタンCONFIRMを押した時に決済セッションを作成します。
プロセスの識別の名前はCreate Session、タイプとしてコードを実行を選択します。ソースのPL/SQLコードとして以下を記述します。決済セッションを作成する最低限の処理です。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_request clob; | |
l_request_json json_object_t; | |
l_response clob; | |
l_response_json json_object_t; | |
l_session_id varchar2(128); | |
e_create_session_failed exception; | |
begin | |
l_request_json := json_object_t(); | |
l_request_json.put('amount', to_number(:P1_AMOUNT)); | |
l_request_json.put('currency', 'JPY'); | |
/* | |
* komoju-fields要素のsubmitを行った後にreturn_urlに指定したURLに | |
* 遷移する。その際にreturn_urlに与えたURLに引数としてsession_id=セッションIDが | |
* 付加される。APEXはこれをアプリケーション・アイテムと見做すため、 | |
* アプリケーション・アイテムSESSION_IDの作成が必要になる。session_idはKOMOJUが付加するため | |
* チェックサムの計算ができない。そのためセッション・ステート保護を制限なしに設定する必要がある。 | |
* また、遷移先のページのページ・アクセス保護も、チェックサムが無くてもアクセスができるように制限なしにする必要がある。 | |
* | |
* ホストフィールドの表示をモーダル・ダイアログかドロワーにすると、return_urlの指定は不要になる。 | |
*/ | |
-- l_request_json.put('return_url',apex_util.host_url() || apex_page.get_url(p_page => 1)); | |
l_request := l_request_json.to_clob(); | |
apex_debug.info(l_request); -- デバッグ用 | |
apex_web_service.set_request_headers('Content-Type','application/json'); | |
l_response := apex_web_service.make_rest_request( | |
p_url => :KOMOJU_ENDPOINT || '/v1/sessions' | |
,p_http_method => 'POST' | |
,p_body => l_request | |
,p_credential_static_id => 'KOMOJU_CRED' | |
); | |
apex_debug.info(l_response); -- デバッグ用 | |
if apex_web_service.g_status_code <> 200 then | |
apex_debug.info(l_response); | |
raise e_create_session_failed; | |
end if; | |
l_response_json := json_object_t(l_response); | |
-- レスポンスからセッションIDを取り出す。 | |
:P1_SESSION_ID := l_response_json.get_string('id'); | |
end; |
サーバー側の条件のボタン押下時としてCONFIRMを設定します。
識別の名前はClear Session State、タイプはセッション・ステートのクリア、設定のタイプとしてClear all Items on the Current Pageを選択します。
サーバー側の条件のボタン押下時としてCLEARを設定します。
ブランチを作成しプロセスの後に実行するように配置します。
識別の名前はOpen Host Fields、動作のタイプとしてページまたはURL(リダイレクト)を選択します。
サーバー側の条件のボタン押下時としてCONFIRMを設定します。
ターゲットは、タイプがこのアプリケーションのページ、ページは2です。アイテムの設定として、ページ・アイテムP2_SESSION_IDに&P1_SESSION_ID.の値が渡るようにします。
以上で、ボタンをCONFIRMをクリックすると決済セッションが作成され、その決済セッションIDを(ページ・アイテムP2_SESSION_IDへの)引数としてドロワーが開くようになります。
ページ・デザイナでページPayを開きます。
ページ・プロパティのJavaScriptのファイルURLとして、KOMOJUが提供しているJavaScriptライブラリを指定します。
https://multipay.komoju.com/fields.js
ホストフィールドに関する実装は、このファイルに含まれています。
決済セッションのセッションIDを保持するページ・アイテムを作成します。
識別の名前はP2_SESSION_ID、タイプは非表示です。セッション・ステートのストレージはリクエストごと(メモリーのみ)を選択します。
ホストフィールドを表示するリージョンを作成します。
識別のタイトルはKOMOJU Host Fieldsとします。タイプとして静的コンテンツを選択し、ソースのHTMLコードとして以下を記述します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<komoju-fields | |
session-id=&P2_SESSION_ID. | |
publishable-key=&KOMOJU_PUBLISHABLE_KEY. | |
></komoju-fields> |
余計な装飾が表示されないよう、外観のテンプレートとしてBlank with Attributes (No Grid)を選択します。
カード決済を実行するボタンPAYを作成します。
ラベルはPay、外観のホットをオンにし、テンプレート・オプションのWidthにStretchを選択します。動作のアクションとして動的アクションで定義を選択します。
ボタンPAYに動的アクションを作成します。
識別の名前はonClick Payとします。タイミングのイベントはボタンのデフォルトであるクリックです。
TRUEアクションとしてJavaScriptコードの実行を選択し、設定のコードに以下を記述します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
document.querySelector('komoju-fields').submit(); | |
apex.navigation.dialog.close(true); |
カード決済を実行した後にドロワーを閉じます。
以上でKOMOJUの決済サービスの実装は完了です。アプリケーションを実行すると、この記事の先頭のGIF動画のように動作します。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完