2023年8月23日水曜日

KOMOJUの決済サービスをAPEXアプリケーションに実装する

株式会社DEGICAが提供しているデジタル決済プラットフォームKOMOJUによるクレジットカード決済を、Oracle APEXのアプリケーションに実装してみます。KOMOJUはいくつかの導入方法を提供しています。そのなかで、ホストフィールドを使った実装を行います。

開発者ガイドにある以下の記述にそって、Oracle APEXに合わせた実装を行います。

実装ガイド:ホストフィールドでペイメントを作成
https://ja.doc.komoju.com/docs/integration-guide-standard

作成したアプリケーションは以下のように動作します。


最後にREST APIを呼び出して決済セッションの状態を確認しています。実際に決済の成功や失敗を確認するにはWebhookを実装するのが一般的だと思いますが、本記事ではWebhookの作成は取り扱っていません。通常Webhookは、APEXのアプリケーションではなく、ORDSのRESTサービスとして実装します。

以下より実装について説明します。

アプリケーション作成ウィザードを起動し、空のアプリケーションを作成します。名前KOMOJUとします。

アプリケーションの作成をクリックします。


アプリケーション定義置換文字列として、公開鍵APIのエンドポイントを設定します。

公開鍵は置換文字列KOMOJU_PUBLISHABLE_KEY置換値としてpk_test_で始まる(テスト用の)公開鍵を設定します。

APIのエンドポイントは置換文字列としてKOMOJU_ENDPOINT置換値としてhttps://komoju.com/apiを設定します。


ワークスペース・ユーティリティWeb資格証明を開きます。


KOMOJUが提供するREST APIに使用するWeb資格証明は、以下の情報より作成します。

KOMOJUのAPIは、非公開鍵をユーザー名としたBasic認証により保護されています。Oracle APEXのWeb資格認証には認証タイプとして基本認証(Basic認証)を選択できますが、この場合、秘匿して保持されるのはパスワードに限られユーザー名は誰でも参照できます

KOMOJUの非公開鍵は秘匿が必須なので、基本認証の代わりに認証タイプとしてHTTPヘッダーを選択します。資格証明名Authorization資格証明シークレットとして、文字列Basicで始めて空白で区切り、非公開鍵の末尾に':'(コロン)をつけてBase64でエンコードした値を設定します。

Linuxなどのコマンドラインでは、以下のような処理によって資格証明シークレットを生成できます。

echo Basic `echo sk_test_xxxxxxxxxxxxxxxxxxxxxxx: | base64`

% echo Basic `echo sk_test_****************: | base64`

Basic ***************************************

%


Web資格証明の名前KOMOJU Cred静的IDKOMOJU_CREDとして、Web資格証明を作成します。URLに対して有効https://komoju.com/api/を設定します。

以上で作成をクリックします。


Web資格証明としてKOMOJU Cred(静的IDはKOMOJU_CRED)が作成されました。


KOMOJUのホストフィールドを表示するドロワーとなるページを作成します。

ページの作成をクリックします。


空白ページを選択します。


ページ番号(ページ・アイテム名に現れるため2とします)、名前Payページ・モードとしてドロワーを選択します。

ページの作成をクリックします。


ページPayが作成されました。

ホーム・ページでは決済金額を入力し、確定ボタンを押します。確定ボタンを押すとKOMOJUが提供するカード情報を入力するホストフィールドを実装したドロワーが開き、そこで決済を実行します。決済を実行すると、ドロワーが閉じます。


ページ・デザイナホーム・ページを開きます。

金額を入力するページ・アイテムP1_AMOUNTを作成します。

タイプ数値フィールドラベルAmountとします。


決済金額を確定するボタンCONFIRMを作成します。

ラベルConfirm外観ホットオンテンプレート・オプションWidthとしてStretchを選択します。動作アクションはデフォルトのページの送信から変更しません。


作成した決済セッションのIDを保持するページ・アイテムP1_SESSION_IDを作成します。タイプ非表示です。

セッション・ステートストレージとしてセッションごと(永続)を選択します。決済セッションはPL/SQLでの処理で作成します。その際にページ・アイテムに設定されたセッションIDは、ページ遷移の後でも値を維持するようにします。


決済セッションの状態を表示するリージョンを作成します。

識別タイトルSession Showタイプとして動的コンテンツを選択します。

ソースのCLOBを返すPL/SQLファンクション本体として以下を記述します。

ページ・アイテムP1_SESSION_IDはセッション・ステートとして保持されているため、送信するページ・アイテムへの設定は不要です。


このリージョンをリフレッシュするボタンREFRESHを作成します。

ラベルはRefresh動作アクションとして動的アクションで定義を選択します。


ボタンREFRESH動的アクションを作成します。

識別名前onClick REFRESHタイミングイベントはボタンのデフォルトであるクリックです。


TRUEアクションとしてリフレッシュを選択します。影響を受ける要素選択タイプリージョンリージョンとしてSession Showを選択します。


このページを初期化するボタンCLEARを作成します。

ラベルClear動作アクションページの送信です。レイアウト新規行の開始オフにし、ボタンREFRESHの右隣に配置します。


プロセス・ビューを開き、ボタンを押した時に実行されるプロセスを作成します。

ボタンCONFIRMを押した時に決済セッションを作成します。

プロセスの識別名前Create Sessionタイプとしてコードを実行を選択します。ソースPL/SQLコードとして以下を記述します。決済セッションを作成する最低限の処理です。


サーバー側の条件ボタン押下時としてCONFIRMを設定します。


ページを初期化するプロセスを作成します。

識別名前Clear Session Stateタイプセッション・ステートのクリア設定タイプとしてClear all Items on the Current Pageを選択します。

サーバー側の条件ボタン押下時としてCLEARを設定します。


ブランチを作成しプロセスの後に実行するように配置します。

識別名前Open Host Fields動作タイプとしてページまたはURL(リダイレクト)を選択します。

サーバー側の条件ボタン押下時としてCONFIRMを設定します。


ターゲットは、タイプこのアプリケーションのページページです。アイテムの設定として、ページ・アイテム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コードとして以下を記述します。


余計な装飾が表示されないよう、外観テンプレートとしてBlank with Attributes (No Grid)を選択します。


カード決済を実行するボタンPAYを作成します。

ラベルPay外観ホットオンにし、テンプレート・オプションWidthStretchを選択します。動作アクションとして動的アクションで定義を選択します。


ボタンPAYに動的アクションを作成します。

識別名前onClick Payとします。タイミングイベントはボタンのデフォルトであるクリックです。


TRUEアクションとしてJavaScriptコードの実行を選択し、設定コードに以下を記述します。

カード決済を実行した後にドロワーを閉じます。


以上でKOMOJUの決済サービスの実装は完了です。アプリケーションを実行すると、この記事の先頭のGIF動画のように動作します。

Oracle APEXのアプリケーション作成の参考になれば幸いです。