PayPayのQRコード払いをAPEXアプリケーションに組み込んでみます。
作成するアプリケーションは以下のように動作します。スマートフォンのPayPayアプリにて画面に表示されているQRコードを読み込み、支払いを実行しています。
Create QR Code
サンドボックス環境にはテストユーザーも用意されています。スマートフォンにインストールされたPayPayアプリより、テストユーザーでサンドボックス環境にサインインする方法については、こちらのリンク先に説明されています。
Get payment details
PayPay for Developersにアカウント登録を行い、決済方法としてウェブペイメントを登録します。
PayPay for Developersに登録すると、テスト用のサンドボックス環境が使用可能になります。この中の加盟店ID、APIキー、APIキー・シークレットをAPIを呼び出す際に使用します。
サンドボックス環境の加盟店ID、APIキー、APIキー・シークレットが得られていて、スマートフォンのPayPayアプリにテストユーザーでサインインできれば、PayPay側の準備は完了です。
以下より、Oracle APEXのアプリケーション作成について記述します。
最初にPayPayの加盟店IDをWeb資格証明として登録します。PayPayのAPI認証はHMAC認証で行われますが、これはリクエストごとに値が変わるためWeb資格証明とするのには向いていません。加盟店IDはAPI発行時に、HTTPヘッダーまたは問い合わせ文字列に必ず含める必要があるため、Web資格証明として作成することにしています。
ワークスペース・ユーティリティのWeb資格証明を開き、作成を実行します。
名前はPayPay Merchant IDとします。静的識別子はPAYPAY_MERCHANT_ID、認証タイプはHTTPヘッダー、資格証明名はHTTPヘッダー名であるX-ASSUME-MERCHANT、資格証明シークレットとして加盟店IDを設定します。
作成をクリックして、Web資格証明の作成を完了します。
アプリケーション作成ウィザードを起動し、空のアプリケーションを作成します。名前はPayPay Sampleとします。
アプリケーションが作成されたらアプリケーション定義を開き、置換文字列としてAPIキーとAPIキー・シークレットを設定します。これは安全な方法とはいえないため、サンドボックス環境ではなく本番環境での利用の際は、より安全な方法で保存すべきです。例えばOracle Cloudであれば、ボールト・サービスのシークレットして保存するといった実装が可能です。Oracle APEXのアプリケーションは、セッション開始時にボールトからAPIキーやシークレットを取得するようにできます。
今回はサンドボックス環境での使用を前提として、置換文字列を定義します。置換文字列G_PAYPAY_APIKEYにAPIキーの値、G_PAYPAY_APIKEY_SECRETにAPIキー・シークレットの値を設定します。
変更の適用をクリックします。
ページ・デザイナでホーム・ページを開きます。
ホーム・ページに、取引の結果を表示します。
加盟店側で設定する取引IDを保持するページ・アイテムを作成します。
ページ・アイテムの識別の名前をP1_MERCHANT_PAYMENT_ID、タイプをテキスト・フィールドとします。ラベルはMerchant Payment IDとします。
P1_MERCHANT_PAYMENT_IDに対応した取引の状況をPayPayに問い合わせ、その結果を表示するリージョンを作成します。
リージョンの識別のタイトルはGet payment detailsとします。タイプとして動的コンテンツを選択します。ソースのCLOBを返すPL/SQLファンクション本体として以下を記述します。PayPayのGet payment details APIを呼び出し、応答であるJSON文書をそのまま表示します。
サーバー側の条件のタイプにアイテムはNULLではないを選択し、アイテムとしてP1_MERCHANT_PAYMENT_IDを指定します。P1_MERCHANT_PAYMENT_IDの値はPayPayの支払いが完了したときに、PayPayから制御がAPEXアプリに戻される際に設定されます。つまり、PayPayでの支払いが完了したときに、この動的リージョンのPL/SQLコードが実行されます。
PayPayによる支払いを行うページを作成します。
ページの作成を実行し、空白のページをページ番号2として作成します。名前はCheckout、ページ・モードは標準です。ナビゲーションはデフォルトのまま、ブレッドクラムの使用、ナビゲーションの使用ともにONとします。
ページの作成を実行します。
作成された空白のページにページ・アイテムとボタンを作成します。
支払い金額を入力するページ・アイテムP2_AMOUNTを作成します。タイプは数値フィールド、ラベルはAmountとします。必須ではありませんが、設定の最小値に100、最大値に10000を設定しています。
支払いの詳細を記述するページ・アイテムP2_ORDER_DESCRIPTIONを作成します。タイプはテキスト・フィールド、ラベルはOrder Descriptionとします。
チェックアウトを実行するボタンCHECKOUTを作成します。動作のアクションはページの送信です。
左ペインでプロセス・ビューを開き、PayPayによる支払いを呼び出すプロセスを作成します。
作成したプロセスの名前はCheckoutとします。タイプとしてコードの実行を選択し、ソースのPL/SQLコードとして以下を記述します。
サーバー側の条件のボタン押下時にCHECKOUTを指定し、ボタンCHECKOUTが押された時に実行されるようにします。
以上でアプリケーションは完成です。アプリケーションを実行すると、記事の先頭のGIF動画のように動作します。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/paypay-sample.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完