Skip to content

Commit ba0472f

Browse files
committed
Correctly set payment information when using paypal
1 parent 9fc1138 commit ba0472f

File tree

3 files changed

+21
-37
lines changed

3 files changed

+21
-37
lines changed

app/code/Magento/Paypal/Model/Express.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,14 +669,19 @@ public function getApi()
669669
public function assignData(\Magento\Framework\DataObject $data)
670670
{
671671
parent::assignData($data);
672-
672+
673673
$additionalData = $data->getData(PaymentInterface::KEY_ADDITIONAL_DATA);
674674

675675
if (!is_array($additionalData)) {
676676
return $this;
677677
}
678678

679679
foreach ($additionalData as $key => $value) {
680+
// Skip extension attributes
681+
if ($key === \Magento\Framework\Api\ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY) {
682+
continue;
683+
}
684+
680685
$this->getInfoInstance()->setAdditionalInformation($key, $value);
681686
}
682687
return $this;

app/code/Magento/Paypal/Test/Unit/Model/ExpressTest.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,21 @@ public function testAssignData()
161161
{
162162
$transportValue = 'something';
163163

164+
$extensionAttributeMock = $this->getMockForAbstractClass(
165+
\Magento\Quote\Api\Data\PaymentExtensionInterface::class,
166+
[],
167+
'',
168+
false,
169+
false
170+
);
171+
164172
$data = new DataObject(
165173
[
166174
PaymentInterface::KEY_ADDITIONAL_DATA => [
167175
Express\Checkout::PAYMENT_INFO_TRANSPORT_BILLING_AGREEMENT => $transportValue,
168176
Express\Checkout::PAYMENT_INFO_TRANSPORT_PAYER_ID => $transportValue,
169-
Express\Checkout::PAYMENT_INFO_TRANSPORT_TOKEN => $transportValue
177+
Express\Checkout::PAYMENT_INFO_TRANSPORT_TOKEN => $transportValue,
178+
\Magento\Framework\Api\ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY => $extensionAttributeMock
170179
]
171180
]
172181
);

app/code/Magento/Paypal/view/frontend/web/js/action/set-payment-method.js

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,42 +10,12 @@ define([
1010
'mage/storage',
1111
'Magento_Checkout/js/model/error-processor',
1212
'Magento_Customer/js/model/customer',
13-
'Magento_Checkout/js/model/full-screen-loader'
14-
], function ($, quote, urlBuilder, storage, errorProcessor, customer, fullScreenLoader) {
13+
'Magento_Checkout/js/model/full-screen-loader',
14+
'Magento_Checkout/js/action/set-payment-information'
15+
], function ($, quote, urlBuilder, storage, errorProcessor, customer, fullScreenLoader, setPaymentInformation) {
1516
'use strict';
1617

1718
return function (messageContainer) {
18-
var serviceUrl,
19-
payload,
20-
paymentData = quote.paymentMethod();
21-
22-
/**
23-
* Checkout for guest and registered customer.
24-
*/
25-
if (!customer.isLoggedIn()) {
26-
serviceUrl = urlBuilder.createUrl('/guest-carts/:cartId/set-payment-information', {
27-
cartId: quote.getQuoteId()
28-
});
29-
payload = {
30-
cartId: quote.getQuoteId(),
31-
email: quote.guestEmail,
32-
paymentMethod: paymentData
33-
};
34-
} else {
35-
serviceUrl = urlBuilder.createUrl('/carts/mine/set-payment-information', {});
36-
payload = {
37-
cartId: quote.getQuoteId(),
38-
paymentMethod: paymentData
39-
};
40-
}
41-
fullScreenLoader.startLoader();
42-
43-
return storage.post(
44-
serviceUrl, JSON.stringify(payload)
45-
).fail(function (response) {
46-
errorProcessor.process(response, messageContainer);
47-
}).always(function () {
48-
fullScreenLoader.stopLoader();
49-
});
19+
return setPaymentInformation(messageContainer, quote.paymentMethod());
5020
};
51-
});
21+
});

0 commit comments

Comments
 (0)