web-dev-qa-db-ja.com

プログラムで注文オブジェクトから支払い方法に関する情報を取得するにはどうすればよいですか?

お客様が使用するお支払い方法に応じて、注文後にいくつかの異なる処理を実行しようとしています。

私のEventSubscriberには、次のコードがあります。

_ public static function getSubscribedEvents() {
    $events = [
      'commerce_order.place.post_transition' => 'onPlaceTransition'
    ];
    return $events;
  }

  public function onPlaceTransition(WorkflowTransitionEvent $event) {
    $order = $event->getEntity();
_

次に、注文から使用された支払い方法の名前またはIDを取得したいのですが、kint($order)を使用したときに、支払い方法にアクセスする方法が見つかりませんでした。

_$order_オブジェクトを指定して支払い方法にアクセスするにはどうすればよいですか?

2
Patrick Kenny

Commerce Paymentモジュールは、有効にするとpayment_method基本フィールドを追加します。commerce_payment_entity_base_field_infoを参照してください https://github.com/drupalcommerce/commerce/blob/8.x-2.x/ modules/payment/commerce_payment.module#L28

を介して支払い方法(およびゲートウェイ)にアクセスできます。

$order->get('payment_method')->first()->entity
$order->get('payment_gateway')->first()->entity

受注メールのお支払い方法ラベルを取得した例.

if (!$order->get('payment_method')->isEmpty()) {
  $variables['payment_method'] = [
    '#markup' => $order->get('payment_method')->first()->entity->label(),
  ];
}

から https://github.com/drupalcommerce/commerce/blob/77b25bf4889a940eed6652475c3952c36144efc0/modules/payment/commerce_payment.module#L122

5
Matt Glaman