新しい支払い方法の実装
このチュートリアルでは、 CommercePaymentMethod インターフェイスを実装して新しい支払い方法を追加する方法を説明します。
支払方法とは、顧客が注文に対して支払う様々な方法を表します。 Liferay Commerce には、 Authorize.Net、 Mercanet、 Money Order、 PayPalなど、すぐに使用できる支払い方法がいくつか用意されています。

概要
サンプルをデプロイする
このセクションでは、Liferay Commerce のインスタンスでサンプルの支払い方法を実行してみます。
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132
http://localhost:8080でLiferayにサインインします。 メールアドレス test@liferay.com とパスワード testを使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。
次に、以下の手順に従います。
-
Acme Commerce Payment Methodをダウンロードして解凍します。
curl https://resources.learn.liferay.com/commerce/latest/en/developer-guide/sales/liferay-b1c3.zip -Ounzip liferay-b1c3.zip -
サンプルをビルドしてデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、デプロイされたjarをDockerコンテナ上の
/opt/liferay/osgi/modulesにコピーするのと同じです。 -
Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.b1c3.impl_1.0.0 -
サンプルの支払方法が追加されたことを確認します。 ブラウザで
https://localhost:8080を開きます。 次に、アプリケーション メニュー (
) をクリックし、 コマース → チャネルに移動して、 支払い方法 セクションまでスクロールします。
Liferay Commerce 2.1 以前では、 サイト管理 → コマース → 設定 → 支払い方法に移動します。

これで、CommercePaymentMethodを実装する新しい支払方法を正常に構築およびデプロイできました。
次に、詳細をさらに詳しく見ていきましょう。
サンプルの説明
このセクションでは、デプロイした例を確認します。 まず、OSGi 登録用のクラスにアノテーションを付けます。 次に、 CommercePaymentMethod インターフェースを確認します。 3 番目に、 CommercePaymentMethodの実装を完了します。
OSGi登録用のクラスに注釈を付ける
@Component(
property = "commerce.payment.engine.method.key=b1c3",
service = CommercePaymentMethod.class
)
public class B1C3CommercePaymentMethod implements CommercePaymentMethod {
Liferay Commerce が新しい支払い方法を 支払い方法レジストリ内の他の支払い方法と区別できるように、支払い方法に固有のキーを提供することが重要です。 すでに使用されているキーを再利用すると、既存の関連付けられている支払い方法が上書きされます。
CommercePaymentMethodインターフェイスを確認する
次のメソッドを実装します。
public String getDescription(Locale locale);
これにより、[支払い方法]管理ページの「説明」列にデータが入力されます。 言語キーを使用して説明を取得する際のリファレンスについては、 liferay-b1c3.zip/b1c3-impl/src/main/java/com/acme/b1c3/internal/commerce/payment/method の B1C3CommercePaymentMethod.java クラスを参照してください。
public String getKey();
これにより、支払方法レジストリ内の支払方法に一意の識別情報が提供されます。 このキーを使用して、レジストリから支払方法を取得できます。 すでに使用されているキーを再利用すると、既存の関連付けられている支払い方法が上書きされます。
public String getName(Locale locale);
これにより、[支払い方法]管理ページの「Name」列にデータが入力されます。 このメソッドは、getDescriptionメソッドと同様に動作します。
public int getPaymentType();
これは、支払いエンジンが特定の支払い方法を使用する方法を識別します。
値COMMERCE_PAYMENT_METHOD_TYPE_OFFLINEを使用して、この支払方法にオンライン処理要件がないことを支払エンジンに通知します。 すぐに使用できる支払いタイプ定数は他に2つあります:COMMERCE_PAYMENT_METHOD_TYPE_ONLINE_STANDARDとCOMMERCE_PAYMENT_METHOD_TYPE_ONLINE_REDIRECTです。
public String getServletPath();
オンラインの支払方法では、外部の支払いプロバイダーとの適切なインターフェイスを有効にするために、サーブレットが必要になる場合があります。 オフラインの支払方法にはサーブレットパスは必要ないため、getServletPathはnullを返します。
支払方法を完了する
支払い方法は、支払いを処理および完了するためのバックエンド ロジックと、その他多くのオプションのカスタム動作で構成されます。 以下を行います。
支払処理ロジックを実装する
@Override
public boolean isProcessPaymentEnabled() {
return true;
}
このメソッドは、支払を処理する支払方法に対してtrueを返す必要があります。 これにより、支払方法でサポートされる機能が支払エンジンに通知されます。
@Override
public CommercePaymentResult processPayment(
CommercePaymentRequest commercePaymentRequest)
throws Exception {
return new CommercePaymentResult(
null, commercePaymentRequest.getCommerceOrderId(),
CommerceOrderConstants.PAYMENT_STATUS_AUTHORIZED, false, null, null,
Collections.emptyList(), true);
}
このメソッドにカスタム支払ロジックを実装します。 CommercePaymentResultには、支払の処理に関連する情報を格納する必要があります。 詳細については、 CommercePaymentResult.java を参照してください。
支払完了ロジックを実装する
@Override
public boolean isCompleteEnabled() {
return true;
}
これは、支払を完了する支払方法に対してtrueを返す必要があります。 これにより、支払方法でサポートされる機能が支払エンジンに通知されます。
@Override
public CommercePaymentResult completePayment(
CommercePaymentRequest commercePaymentRequest)
throws Exception {
return new CommercePaymentResult(
null, commercePaymentRequest.getCommerceOrderId(),
CommerceOrderConstants.PAYMENT_STATUS_PAID, false, null, null,
Collections.emptyList(), true);
}
このメソッドにカスタム支払完了ロジックを実装します。 CommercePaymentResultは、支払いプロセスの完了に関連する情報を格納するコンテナです。 詳細については、 CommercePaymentResult.java を参照してください。
オプションのメソッドを実装する
購読、定期的な支払、払い戻しなど、追加の機能を提供するために実装できる追加のメソッドがあります。 これらは CommercePaymentMethod.javaで確認できます。 これらのメソッドはペアで提供されます。1つは有効にするメソッドで、もう1つは特定の機能を実装するメソッドです。
これらのメソッドの多くは、オンラインAPIを使用した支払方法にとって重要です。 オンライン支払い方法の例については、 PayPalCommercePaymentMethod を参照してください。
この例では、これらのオプションのメソッドをオーバーライドしていません。
言語キーをLanguage.propertiesに追加する
モジュール内の liferay-b1c3.zip/b1c3-impl/src/main/resources/content にある Language.properties ファイルに言語キーとその値を追加します。
b1c3-commerce-payment-method=B1C3 Commerce Payment Method
pay-via-b1c3-commerce-payment-method=Pay via B1C3 commerce payment method.
詳細については、「 アプリケーションのローカライズ 」を参照してください。
さいごに
CommercePaymentMethodインターフェイスを実装するための基本を理解し、Liferay Commerceに新しい支払方法を追加しました。