diff --git a/core/src/Order/Builder/OrderPayloadBuilder.php b/core/src/Order/Builder/OrderPayloadBuilder.php index c4024e32c..dade12813 100644 --- a/core/src/Order/Builder/OrderPayloadBuilder.php +++ b/core/src/Order/Builder/OrderPayloadBuilder.php @@ -173,27 +173,30 @@ private function buildOptionalPayload(bool $isFullPayload): array $optionalPayload[] = $this->payerNodeBuilder->setCart($this->cart)->build(); } - if (!$this->isUpdate) { - $optionalPayload[] = $this->applicationContextNodeBuilder - ->setIsExpressCheckout($this->expressCheckout) - ->setIsVirtualCart($this->cart['cart']['is_virtual']) - ->build(); - } - if ($this->isCard) { $optionalPayload[] = $this->buildCardPaymentSource(); $this->payload['purchase_units'][0] = array_merge($this->payload['purchase_units'][0], $this->buildSupplementaryData()); } if ($isFullPayload) { - $optionalPayload[] = $this->buildPaymentSource(); - if (empty($optionalPayload['payment_source'][$this->fundingSource]['experience_context'])) { - $optionalPayload[] = $this->applicationContextNodeBuilder - ->setIsExpressCheckout($this->expressCheckout) - ->build(); + $paymentSource = $this->buildPaymentSource(); + + if (!empty($paymentSource)) { + $optionalPayload[] = $this->buildPaymentSource(); } } + if ( + !$this->isUpdate + && !empty($paymentSource) + && empty($paymentSource['payment_source'][$this->fundingSource]['experience_context']) + ) { + $optionalPayload[] = $this->applicationContextNodeBuilder + ->setIsExpressCheckout($this->expressCheckout) + ->setIsVirtualCart($this->cart['cart']['is_virtual']) + ->build(); + } + return $optionalPayload; } @@ -262,10 +265,10 @@ private function buildPaymentSource() case 'google_pay': return $this->googlePayPaymentSourceNodeBuilder->build(); case 'paypal': - $this->payPalPaymentSourceNodeBuilder->setSavePaymentMethod($this->savePaymentMethod) ->setPaypalCustomerId($this->paypalCustomerId) - ->setPaypalVaultId($this->paypalVaultId); + ->setPaypalVaultId($this->paypalVaultId) + ->setExpressCheckout($this->expressCheckout); return $this->payPalPaymentSourceNodeBuilder->build(); }