1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Paypal\Model\Payflow\Service\Response;
use Magento\Framework\DataObject;
use Magento\Payment\Model\Method\Logger;
use Magento\Paypal\Model\Payflow\Service\Response\Handler\HandlerInterface;
use Magento\Framework\Session\Generic;
use Magento\Paypal\Model\Payflowpro;
use Magento\Quote\Api\CartRepositoryInterface;
use Magento\Paypal\Model\Payflow\Transparent;
use Magento\Quote\Api\PaymentMethodManagementInterface;
use Magento\Quote\Model\Quote\Payment;
use Magento\Sales\Api\Data\OrderPaymentInterface;
/**
* Class Transaction
*/
class Transaction
{
/**
* @var Generic
*/
protected $sessionTransparent;
/**
* @var CartRepositoryInterface
*/
protected $quoteRepository;
/**
* @var Transparent
*/
protected $transparent;
/**
* @var PaymentMethodManagementInterface
*/
private $paymentManagement;
/**
* @var HandlerInterface
*/
private $errorHandler;
/**
* @var Logger
*/
private $logger;
/**
* @param Generic $sessionTransparent
* @param CartRepositoryInterface $quoteRepository
* @param Transparent $transparent
* @param PaymentMethodManagementInterface $paymentManagement
* @param HandlerInterface $errorHandler
* @param Logger $logger
*/
public function __construct(
Generic $sessionTransparent,
CartRepositoryInterface $quoteRepository,
Transparent $transparent,
PaymentMethodManagementInterface $paymentManagement,
HandlerInterface $errorHandler,
Logger $logger
) {
$this->sessionTransparent = $sessionTransparent;
$this->quoteRepository = $quoteRepository;
$this->transparent = $transparent;
$this->paymentManagement = $paymentManagement;
$this->errorHandler = $errorHandler;
$this->logger = $logger;
}
/**
* Returns gateway response data object.
*
* @param array $gatewayTransactionResponse
* @return DataObject
*/
public function getResponseObject($gatewayTransactionResponse)
{
$response = new DataObject();
$response = $this->transparent->mapGatewayResponse((array) $gatewayTransactionResponse, $response);
$this->logger->debug(
(array) $gatewayTransactionResponse,
(array) $this->transparent->getDebugReplacePrivateDataKeys(),
(bool) $this->transparent->getDebugFlag()
);
return $response;
}
/**
* Saves payment information in quote.
*
* @param DataObject $response
* @return void
* @throws \InvalidArgumentException
*/
public function savePaymentInQuote($response)
{
$quote = $this->quoteRepository->get($this->sessionTransparent->getQuoteId());
$payment = $this->paymentManagement->get($quote->getId());
if (!$payment instanceof Payment) {
throw new \InvalidArgumentException("Variable must contain instance of \\Quote\\Payment.");
}
$payment->setData(OrderPaymentInterface::CC_TYPE, $response->getData(OrderPaymentInterface::CC_TYPE));
$payment->setAdditionalInformation(Payflowpro::PNREF, $response->getData(Payflowpro::PNREF));
$this->errorHandler->handle($payment, $response);
$this->paymentManagement->set($quote->getId(), $payment);
}
}