Skip to content

Commit 952d857

Browse files
committed
MAGETWO-99035: Payflow Field format error: 10413-The totals of the cart item amounts do not match order amounts.
1 parent 70f3d79 commit 952d857

File tree

4 files changed

+229
-369
lines changed

4 files changed

+229
-369
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ protected function _applyDiscountTaxCompensationWorkaround(
179179
) {
180180
$dataContainer = $salesEntity->getTaxContainer();
181181
$this->addTax((double)$dataContainer->getBaseDiscountTaxCompensationAmount());
182-
$this->addTax((double)$dataContainer->getBaseShippingDiscountTaxCompensationAmount());
182+
$this->addTax((double)$dataContainer->getBaseShippingDiscountTaxCompensationAmnt());
183183
}
184184

185185
/**

app/code/Magento/Paypal/Model/Payflow/Transparent.php

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ class Transparent extends Payflowpro implements TransparentInterface
5959
*/
6060
private $paymentExtensionFactory;
6161

62+
/**
63+
* @var \Magento\Paypal\Model\CartFactory
64+
*/
65+
private $payPalCartFactory;
66+
6267
/**
6368
* @param \Magento\Framework\Model\Context $context
6469
* @param \Magento\Framework\Registry $registry
@@ -76,6 +81,7 @@ class Transparent extends Payflowpro implements TransparentInterface
7681
* @param ResponseValidator $responseValidator
7782
* @param PaymentTokenInterfaceFactory $paymentTokenFactory
7883
* @param OrderPaymentExtensionInterfaceFactory $paymentExtensionFactory
84+
* @param \Magento\Paypal\Model\CartFactory $payPalCartFactory
7985
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
8086
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
8187
* @param array $data
@@ -98,6 +104,7 @@ public function __construct(
98104
ResponseValidator $responseValidator,
99105
PaymentTokenInterfaceFactory $paymentTokenFactory,
100106
OrderPaymentExtensionInterfaceFactory $paymentExtensionFactory,
107+
\Magento\Paypal\Model\CartFactory $payPalCartFactory,
101108
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
102109
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
103110
array $data = []
@@ -123,6 +130,7 @@ public function __construct(
123130
$this->responseValidator = $responseValidator;
124131
$this->paymentTokenFactory = $paymentTokenFactory;
125132
$this->paymentExtensionFactory = $paymentExtensionFactory;
133+
$this->payPalCartFactory = $payPalCartFactory;
126134
}
127135

128136
/**
@@ -162,13 +170,19 @@ public function authorize(InfoInterface $payment, $amount)
162170
$this->addRequestOrderInfo($request, $order);
163171
$request = $this->fillCustomerContacts($order, $request);
164172

173+
/** @var \Magento\Paypal\Model\Cart $payPalCart */
174+
$payPalCart = $this->payPalCartFactory->create(['salesModel' => $order]);
175+
$payPalCart->getAmounts();
176+
165177
$token = $payment->getAdditionalInformation(self::PNREF);
166178
$request->setData('trxtype', self::TRXTYPE_AUTH_ONLY);
167179
$request->setData('origid', $token);
168180
$request->setData('amt', $this->formatPrice($amount));
169181
$request->setData('currency', $order->getBaseCurrencyCode());
170-
$request->setData('taxamt', $this->formatPrice($order->getBaseTaxAmount()));
171-
$request->setData('freightamt', $this->formatPrice($order->getBaseShippingAmount()));
182+
$request->setData('itemamt', $this->formatPrice($payPalCart->getSubtotal()));
183+
$request->setData('taxamt', $this->formatPrice($payPalCart->getTax()));
184+
$request->setData('freightamt', $this->formatPrice($payPalCart->getShipping()));
185+
$request->setData('discount', $this->formatPrice($payPalCart->getDiscount()));
172186

173187
$response = $this->postRequest($request, $this->getConfig());
174188
$this->processErrors($response);

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ protected function setUp()
7070
public function testInvalidGetAllItems($items)
7171
{
7272
$taxContainer = new \Magento\Framework\DataObject(
73-
['base_discount_tax_compensation_amount' => 0.2, 'base_shipping_discount_tax_compensation_amount' => 0.1]
73+
['base_discount_tax_compensation_amount' => 0.2, 'base_shipping_discount_tax_compensation_amnt' => 0.1]
7474
);
7575
$this->_salesModel->expects($this->once())->method('getTaxContainer')->will($this->returnValue($taxContainer));
7676
$this->_salesModel->expects($this->once())->method('getAllItems')->will($this->returnValue($items));
@@ -146,7 +146,7 @@ public function testInvalidTotalsGetAllItems($values, $transferDiscount)
146146
$this->assertEquals(
147147
$values['base_tax_amount'] +
148148
$values['base_discount_tax_compensation_amount'] +
149-
$values['base_shipping_discount_tax_compensation_amount'],
149+
$values['base_shipping_discount_tax_compensation_amnt'],
150150
$this->_model->getTax()
151151
);
152152
$this->assertEquals($values['base_shipping_amount'], $this->_model->getShipping());
@@ -162,7 +162,7 @@ public function invalidTotalsGetAllItemsDataProvider()
162162
[
163163
[
164164
'base_discount_tax_compensation_amount' => 0,
165-
'base_shipping_discount_tax_compensation_amount' => 0,
165+
'base_shipping_discount_tax_compensation_amnt' => 0,
166166
'base_subtotal' => 0,
167167
'base_tax_amount' => 0,
168168
'base_shipping_amount' => 0,
@@ -174,7 +174,7 @@ public function invalidTotalsGetAllItemsDataProvider()
174174
[
175175
[
176176
'base_discount_tax_compensation_amount' => 1,
177-
'base_shipping_discount_tax_compensation_amount' => 2,
177+
'base_shipping_discount_tax_compensation_amnt' => 2,
178178
'base_subtotal' => 3,
179179
'base_tax_amount' => 4,
180180
'base_shipping_amount' => 5,
@@ -255,8 +255,8 @@ protected function _prepareInvalidModelData($values, $transferDiscount)
255255
[
256256
'base_discount_tax_compensation_amount' =>
257257
$values['base_discount_tax_compensation_amount'],
258-
'base_shipping_discount_tax_compensation_amount' =>
259-
$values['base_shipping_discount_tax_compensation_amount'],
258+
'base_shipping_discount_tax_compensation_amnt' =>
259+
$values['base_shipping_discount_tax_compensation_amnt'],
260260
]
261261
);
262262
$expectedSubtotal = $values['base_subtotal'];

0 commit comments

Comments
 (0)