Hallo,
ich schreibe ein Plugin, bei dem ich nach Bezahlung die Bestelldaten weiter verarbeiten will. Leider bekomme ich keine OrderTransactionCollection von der StateMachineStateEntity und kann daher die Bezahlmethode nicht herausfinden. Letztendlich will ich auch die PayPal-TransaktionsID verarbeiten.
Hier eine gekürzte Version:
<?php declare(strict_types=1);
use Psr\Log\LoggerInterface;
use Shopware\Core\Checkout\Order\Event\OrderStateMachineStateChangeEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class OrderTransactionStatePaidListener implements EventSubscriberInterface
{
/**
* @var Client
*/
private Client $client;
/**
* @var LoggerInterface
*/
private LoggerInterface $logger;
public function __construct(LoggerInterface $logger) {
$this->logger = $logger;
}
public static function getSubscribedEvents(): array
{
return [
'state_enter.order_transaction.state.paid' => 'onOrderTransactionStatePaid',
];
}
public function onOrderTransactionStatePaid(OrderStateMachineStateChangeEvent $event): void
{
$order = $event->getOrder();
$orderCustomer = $order->getOrderCustomer();
$customer = $orderCustomer->getCustomer();
$deliveries = $order->getDeliveries();
$shippingAddress = $deliveries->getShippingAddress()->first();
$billingAddress = $order->getBillingAddress();
$stateMachineState = $order->getStateMachineState();
$orderTransactions = $stateMachineState->getOrderTransactions();
if ($orderTransactions !== null) {
$orderTransaction = $orderTransactions->filterByState('paid')->first();
$this->logger->info('payment method', [$orderTransaction->getPaymentMethod()->getName()]);
} else {
$this->logger->info('No order transaction there', ['order number' => $order->getOrderNumber()]);
}
if ($billingAddress === null) {
$billingAddress = $shippingAddress;
$this->logger->info('Billing address not found, using shipping address',
['Order Number', $order->getOrderNumber()]
);
}
}
}
Wieso bekomme ich bei $stateMachineState->getOrderTransactions() „null“ zurück? Und wieso bekomme ich ebenso „null“ bei $order->getBillingAddress()?
Liebe Grüße
Sebastian