it-swarm.com.de

Wie erhalte ich programmgesteuert Informationen zur Zahlungsmethode aus dem Bestellobjekt?

Ich versuche, nach der Bestellung eine andere Verarbeitung durchzuführen, je nachdem, welche Zahlungsmethode ein Kunde verwendet.

In meinem EventSubscriber habe ich den folgenden Code:

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

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

Jetzt möchte ich den Namen oder die ID der verwendeten Zahlungsmethode aus der Bestellung abrufen, aber als ich kint($order) verwendet habe, konnte ich keinen Weg finden, auf die Zahlungsmethode zuzugreifen.

Wie greife ich bei einem $order - Objekt auf die Zahlungsmethode zu?

2
Patrick Kenny

Das Commerce-Zahlungsmodul fügt das payment_method Basisfeld, wenn es aktiviert ist, siehe commerce_payment_entity_base_field_infohttps://github.com/drupalcommerce/commerce/blob/8.x-2.x/modules/payment/commerce_payment.module#L28

Sie können über auf die Zahlungsmethode (und das Gateway) zugreifen

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

Beispiel dafür, wann wir das Zahlungsmethodenetikett für die Bestellbestätigungs-E-Mail erhalten.

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

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

5
Matt Glaman