支払い統合クライアント拡張機能の使用
Liferay DXP 2024.Q1+/ポータル GA112+
クライアント拡張機能を使用して、Liferay の新しい支払い方法と統合できます。 サンプルワークスペース からのこのクライアント拡張機能は、OAuth 2 を使用して Liferay と通信するスタンドアロンの Spring Boot アプリケーションで構成されています。 Liferay ですぐに使用できる支払い方法の詳細については、 支払い方法の設定 を参照してください。
前提条件
-
サポートされているバージョンの Javaをインストールします。
注推奨される JVM 設定については、 JVM 構成 を参照してください。
-
サンプルワークスペースをダウンロードし、解凍します。
curl -o com.liferay.sample.workspace-latest.zip https://repository.liferay.com/nexus/service/local/artifact/maven/content\?r\=liferay-public-releases\&g\=com.liferay.workspace\&a\=com.liferay.sample.workspace\&\v\=LATEST\&p\=zipunzip -d liferay-sample-workspace com.liferay.sample.workspace-latest.zip
これで、クライアント拡張機能を起動して Liferay にデプロイするためのツールが手に入りました。
支払い統合クライアント拡張機能を調べる
client-extensions/liferay-sample-commerce-payment-integration/client-extension.yaml ファイルは、サンプルワークスペースの支払い統合クライアント拡張機能を定義します。 .yaml ファイルには、理解しておく必要がある 3 つの重要なブロックがあります。
assemble:
- fromTask: bootJar
assemble ブロックは、スタンドアロン アプリケーション/マイクロサービスが bootJar コマンドで作成されることを指定します。 これは Spring Boot Gradle プラグインから入手できます。 Liferay SaaS にデプロイするには、アプリケーション JAR を LUFFA に含める必要があります。
liferay-sample-commerce-payment-integration:
key: liferay-sample-commerce-payment-integration
name: Liferay Sample Commerce Payment Integration
oAuth2ApplicationExternalReferenceCode: liferay-sample-commerce-payment-integration-oauth-application-user-agent
paymentIntegrationType: 3
paymentIntegrationTypeSettings:
key1: value1
key2: value2
key3: value3
key4: value4
key5: value5
type: commercePaymentIntegration
liferay-sample-commerce-payment-integration ブロックには、支払い統合クライアント拡張に必要な主要な設定が含まれています。 各フィールドの詳細については、 支払い統合クライアント拡張 YAML リファレンス を参照してください。
liferay-sample-commerce-payment-integration-oauth-application-user-agent:
.serviceAddress: localhost:58081
.serviceScheme: http
name: Liferay Sample Commerce Payment Integration OAuth Application User Agent
scopes:
- Liferay.Headless.Admin.Workflow.everything
type: oAuthApplicationUserAgent
client-extension.yaml のもう 1 つの重要な部分は、 liferay-sample-commerce-payment-integration-oauth-application-user-agent 定義にあります。 serviceAddress パラメータはサービスがローカルで実行される場所を定義し、 serviceScheme パラメータはプロトコルを定義します。 name フィールドは、OAuth アプリケーション ユーザー エージェントの名前を定義します。 スコープ フィールドは、ヘッドレス API に付与されるアクセスを定義します。 このセクションでは、Liferay を認可サーバーとして設定し、次にデプロイする支払い統合がリソース サーバーの安全なエンドポイントを呼び出してペイロードを送信できるようにします。 詳細については、 OAuth ユーザー エージェント YAML 構成リファレンス を参照してください。
支払い統合クライアント拡張機能を展開する
-
サンプルワークスペースに移動します。
-
実行
./gradlew initBundleこれにより、ワークスペースの
/bundlesフォルダー内にバンドルがダウンロードされます。 -
/bundles/tomcat/binフォルダに移動します。 実行./catalina run -
サンプルワークスペースs
/client-extensions/liferay-sample-commerce-payment-integrationフォルダに戻ります。 -
実行
../../gradlew clean createClientExtensionConfig deploy -
Liferayのログで、クライアント拡張機能がデプロイされ、起動したことを確認します。
2024-03-05 11:22:48.192 INFO [com.liferay.portal.kernel.deploy.auto.AutoDeployScanner][AutoDeployDir:212] Processing liferay-sample-commerce-payment-integration.zip 2024-03-05 11:22:57.527 INFO [fileinstall-directory-watcher][BundleStartStopLogger:68] STARTED liferaysamplecommercepaymentintegration_7.4.13 [1499]さらに、OAuth ユーザー エージェントに関するメッセージも記録されます。
2024-03-05 11:22:57.679 INFO [CM Event Dispatcher (Fire ConfigurationEvent: pid=com.liferay.oauth2.provider.configuration.OAuth2ProviderApplicationUserAgentConfiguration~liferay-sample-commerce-payment-integration-oauth-application-user-agent)][InterpolationConfigurationPlugin:135] Replaced value of configuration property 'homePageURL' for PID com.liferay.oauth2.provider.configuration.OAuth2ProviderApplicationUserAgentConfiguration~liferay-sample-commerce-payment-integration-oauth-application-user-agent 2024-03-05 11:22:57.712 INFO [CM Event Dispatcher (Fire ConfigurationEvent: pid=com.liferay.oauth2.provider.configuration.OAuth2ProviderApplicationUserAgentConfiguration~liferay-sample-commerce-payment-integration-oauth-application-user-agent)][OAuth2ProviderApplicationUserAgentConfigurationFactory:170] OAuth 2 application with external reference code liferay-sample-commerce-payment-integration-oauth-application-user-agent and company ID 93285384307986 has client ID id-5433f036-5672-de77-ea7b-a82110957aca -
OAuth アプリケーション ユーザー エージェントが Liferay に追加されたことを確認します。 コントロール パネル → OAuth2 管理に移動します。

Liferay サンプルコマース支払い統合 OAuth アプリケーションユーザーエージェントは、Liferay が保護されたエンドポイントを介して Spring Boot アプリケーションのデータにアクセスできるようにするために必要な OAuth 2 認証 を提供します。 この場合、Liferay がアプリケーションを承認するために必要なのは、 application-default.propertiesで外部参照コードを宣言することだけです。
liferay.oauth.application.external.reference.codes=liferay-sample-commerce-payment-integration-oauth-application-user-agent
マイクロサービスを開始する
client-extensions/liferay-sample-commerce-payment-integration フォルダから、
../../gradlew bootRun
Spring Boot アプリケーションが起動し、ログにメッセージが出力されます。
...
2024-03-05 11:22:58.893 INFO 3534 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 58081 (http) with context path ''
2024-03-05 11:22:58.900 INFO 3534 --- [ main] c.l.sample.SampleSpringBootApplication : Started SampleSpringBootApplication in 21.133 seconds (JVM running for 21.397)
<==========---> 80% EXECUTING [7m 43s]
> :client-extensions:liferay-sample-commerce-payment-integration:bootRun
支払い統合の追加を確認する
-
管理者としてログインし、 グローバル メニュー (
) を開き、 コントロール パネル → サイトに移動します。 -
新しい Minium サイトを追加します。
-
グローバル メニュー (
) を開き、 コマース → チャネルに移動します。 -
Minium Portal を選択し、支払い方法セクションまで下にスクロールします。 ここで、新しい支払い統合の追加を確認します。 デフォルトでは非アクティブです。

-
新しい支払い統合を選択し、 アクティブ トグルを使用してアクティブ化します。
-
[保存]をクリックします。 支払い統合のために、2 つの新しいタブ 資格 と 構成が表示されます。
構成タブには入力フィールドがあります。 クライアント拡張機能自体に値をハードコーディングする代わりに、クライアント拡張機能に必要な情報をここに入力できます。 例にはサンプルのキーと値のペアが含まれています。
「適格性」タブに移動して、支払い統合の対象となる特定の注文タイプまたは支払い条件を選択できます。 デフォルトでは、すべての注文タイプと支払い条件が対象となります。
-
保存をクリックします。
-
サイトを開き、アカウントセレクターを使用して新しいアカウントを作成します。
-
いくつかの商品をカートに追加します。
-
ミニカートを開き、 「送信」をクリックします。 これによりチェックアウトフローが開始されます。
-
注文が完了するまでチェックアウトを続けます。 グローバル メニュー (
) を開き、 コマース → 支払い に移動して支払いの完了を確認します。

コードを調べる
Liferay で支払い統合を作成するには、次の支払いステータスのコントローラーを実装する必要があります。
- 支払い設定
- 許可する
- 捕獲
- キャンセル
- 払い戻し
提供されているサンプル クライアント拡張機能には、Liferay で新しい支払い統合を作成するために Spring Boot アプリケーションによって呼び出されるこれらのコントローラーが含まれています。 client-extension.yaml ファイルの key および name フィールドは、支払い統合のキーと名前を指定します。 既存の支払い方法と競合しない一意のキーを使用する必要があります。
SetUpPaymentRestController.javaを調べる
@PostMapping
public ResponseEntity<String> post(
@AuthenticationPrincipal Jwt jwt, @RequestBody String json) {
log(jwt, _log, json);
return new ResponseEntity<>(
new JSONObject(
).put(
"paymentStatus", 18
).toString(),
HttpStatus.OK);
}
SetUpPaymentRestController には、JSON Web Token (JWT) とリクエスト本体の 2 つのパラメーターを持つ単一の post メソッドが含まれています。 トークンは HTTP 呼び出しを認証し、リクエスト本体には JSON 形式の文字列としてデータが含まれます。 リクエストボディをログに記録した後、 JSONObject() コンストラクターを使用して支払いステータスを 18 に設定し、HTTP ステータスとともに応答エンティティとして返します。
AuthorizeRestController.javaを調べる
@PostMapping
public ResponseEntity<String> post(
@AuthenticationPrincipal Jwt jwt, @RequestBody String json) {
log(jwt, _log, json);
return new ResponseEntity<>(
new JSONObject(
).put(
"paymentStatus", 2
).put(
"transactionCode", UUID.randomUUID()
).toString(),
HttpStatus.OK);
}
AuthorizeRestController には、JSON Web Token (JWT) とリクエスト本体の 2 つのパラメーターを持つ単一の post メソッドが含まれています。 トークンは HTTP 呼び出しを認証し、リクエスト本体には JSON 形式の文字列としてデータが含まれます。 リクエストボディをログに記録した後、 JSONObject() コンストラクターを使用して支払いステータスを 2 に設定し、HTTP ステータスとともに応答エンティティとして返します。
CaptureRestController.javaを調べる
@PostMapping
public ResponseEntity<String> post(
@AuthenticationPrincipal Jwt jwt, @RequestBody String json) {
log(jwt, _log, json);
return new ResponseEntity<>(
new JSONObject(
).put(
"paymentStatus", 0
).toString(),
HttpStatus.OK);
}
CaptureRestController には、JSON Web Token (JWT) とリクエスト本体の 2 つのパラメーターを持つ単一の post メソッドが含まれています。 トークンは HTTP 呼び出しを認証し、リクエスト本体には JSON 形式の文字列としてデータが含まれます。 リクエストボディをログに記録した後、 JSONObject() コンストラクターを使用して支払いステータスを 0 に設定し、HTTP ステータスとともに応答エンティティとして返します。
CancelRestController.javaを調べる
@PostMapping
public ResponseEntity<String> post(
@AuthenticationPrincipal Jwt jwt, @RequestBody String json) {
log(jwt, _log, json);
return new ResponseEntity<>(
new JSONObject(
).put(
"paymentStatus", 8
).toString(),
HttpStatus.OK);
}
CancelRestController には、JSON Web Token (JWT) とリクエスト本体の 2 つのパラメーターを持つ単一の post メソッドが含まれています。 トークンは HTTP 呼び出しを認証し、リクエスト本体には JSON 形式の文字列としてデータが含まれます。 リクエストボディをログに記録した後、 JSONObject() コンストラクターを使用して支払いステータスを 8 に設定し、HTTP ステータスとともに応答エンティティとして返します。
RefundRestController.javaを調べる
@PostMapping
public ResponseEntity<String> post(
@AuthenticationPrincipal Jwt jwt, @RequestBody String json) {
log(jwt, _log, json);
return new ResponseEntity<>(
new JSONObject(
).put(
"paymentStatus", 17
).toString(),
HttpStatus.OK);
}
RefundRestController には、JSON Web Token (JWT) とリクエスト本体の 2 つのパラメーターを持つ単一の post メソッドが含まれています。 トークンは HTTP 呼び出しを認証し、リクエスト本体には JSON 形式の文字列としてデータが含まれます。 リクエストボディをログに記録した後、 JSONObject() コンストラクターを使用して支払いステータスを 17 に設定し、HTTP ステータスとともに応答エンティティとして返します。