Skip to content

Instantly share code, notes, and snippets.

@ujnak
Last active August 23, 2023 04:40
KOMOJUでの決済セッションの作成
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;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment