Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Payment.php
Go to the documentation of this file.
1 <?php
7 
9 
38 {
42  protected $_eventPrefix = 'sales_quote_payment';
43 
47  protected $_eventObject = 'payment';
48 
54  protected $_quote;
55 
60 
64  private $additionalChecks;
65 
69  private $serializer;
70 
74  private $jsonValidator;
75 
92  public function __construct(
93  \Magento\Framework\Model\Context $context,
94  \Magento\Framework\Registry $registry,
95  \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
97  \Magento\Payment\Helper\Data $paymentData,
98  \Magento\Framework\Encryption\EncryptorInterface $encryptor,
99  \Magento\Payment\Model\Checks\SpecificationFactory $methodSpecificationFactory,
100  \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
101  \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
102  array $data = [],
103  array $additionalChecks = [],
104  \Magento\Framework\Serialize\Serializer\Json $serializer = null,
105  \Magento\Framework\Serialize\JsonValidator $jsonValidator = null
106  ) {
107  $this->methodSpecificationFactory = $methodSpecificationFactory;
108  $this->additionalChecks = $additionalChecks;
109  $this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance()
110  ->get(\Magento\Framework\Serialize\Serializer\Json::class);
111  $this->jsonValidator = $jsonValidator ?: \Magento\Framework\App\ObjectManager::getInstance()
112  ->get(\Magento\Framework\Serialize\JsonValidator::class);
113  parent::__construct(
114  $context,
115  $registry,
116  $extensionFactory,
118  $paymentData,
119  $encryptor,
120  $resource,
121  $resourceCollection,
122  $data
123  );
124  }
125 
131  protected function _construct()
132  {
133  $this->_init(\Magento\Quote\Model\ResourceModel\Quote\Payment::class);
134  }
135 
142  public function setQuote(\Magento\Quote\Model\Quote $quote)
143  {
144  $this->_quote = $quote;
145  $this->setQuoteId($quote->getId());
146  return $this;
147  }
148 
156  public function getQuote()
157  {
158  return $this->_quote;
159  }
160 
170  public function importData(array $data)
171  {
172  $data = $this->convertPaymentData($data);
173  $data = new \Magento\Framework\DataObject($data);
174  $this->_eventManager->dispatch(
175  $this->_eventPrefix . '_import_data_before',
176  [$this->_eventObject => $this, 'input' => $data]
177  );
178 
179  $this->setMethod($data->getMethod());
180  $method = $this->getMethodInstance();
181  $quote = $this->getQuote();
182 
187  $quote->collectTotals();
188 
189  $checks = array_merge($data->getChecks(), $this->additionalChecks);
190  $methodSpecification = $this->methodSpecificationFactory->create($checks);
191  if (!$method->isAvailable($quote) || !$methodSpecification->isApplicable($method, $quote)) {
192  throw new \Magento\Framework\Exception\LocalizedException(
193  __('The requested Payment Method is not available.')
194  );
195  }
196 
197  $method->assignData($data);
198 
199  /*
200  * validating the payment data
201  */
202  $method->validate();
203  return $this;
204  }
205 
212  private function convertPaymentData(array $rawData)
213  {
214  $paymentData = [
218  'checks' => []
219  ];
220 
221  foreach (array_keys($rawData) as $requestKey) {
222  if (!array_key_exists($requestKey, $paymentData)) {
223  $paymentData[PaymentInterface::KEY_ADDITIONAL_DATA][$requestKey] = $rawData[$requestKey];
224  } elseif ($requestKey === PaymentInterface::KEY_ADDITIONAL_DATA) {
225  $paymentData[PaymentInterface::KEY_ADDITIONAL_DATA] = array_merge(
227  (array) $rawData[$requestKey]
228  );
229  } else {
230  $paymentData[$requestKey] = $rawData[$requestKey];
231  }
232  }
233 
234  return $paymentData;
235  }
236 
242  public function beforeSave()
243  {
244  if ($this->getQuote()) {
245  $this->setQuoteId($this->getQuote()->getId());
246  }
247  return parent::beforeSave();
248  }
249 
255  public function getCheckoutRedirectUrl()
256  {
257  $method = $this->getMethodInstance();
258  if ($method) {
259  return $method->getCheckoutRedirectUrl();
260  }
261  return '';
262  }
263 
269  public function getOrderPlaceRedirectUrl()
270  {
271  $method = $this->getMethodInstance();
272  if ($method) {
273  return $method->getConfigData('order_place_redirect_url');
274  }
275  return '';
276  }
277 
283  public function getMethodInstance()
284  {
285  $method = parent::getMethodInstance();
286  $method->setStore($this->getQuote()->getStoreId());
287  return $method;
288  }
289 
299  public function getPoNumber()
300  {
301  return $this->getData(self::KEY_PO_NUMBER);
302  }
303 
310  public function setPoNumber($poNumber)
311  {
312  return $this->setData(self::KEY_PO_NUMBER, $poNumber);
313  }
314 
320  public function getMethod()
321  {
322  return $this->getData(self::KEY_METHOD);
323  }
324 
331  public function setMethod($method)
332  {
333  return $this->setData(self::KEY_METHOD, $method);
334  }
335 
341  public function getAdditionalData()
342  {
343  $additionalDataValue = $this->getData(self::KEY_ADDITIONAL_DATA);
344  if (is_array($additionalDataValue)) {
345  return $additionalDataValue;
346  }
347  if (is_string($additionalDataValue) && $this->jsonValidator->isValid($additionalDataValue)) {
348  $additionalData = $this->serializer->unserialize($additionalDataValue);
349  if (is_array($additionalData)) {
350  return $additionalData;
351  }
352  }
353  return null;
354  }
355 
362  public function setAdditionalData($additionalData)
363  {
364  return $this->setData(self::KEY_ADDITIONAL_DATA, $additionalData);
365  }
366 
367  //@codeCoverageIgnoreEnd
368 
374  public function getExtensionAttributes()
375  {
376  return $this->_getExtensionAttributes();
377  }
378 
385  public function setExtensionAttributes(\Magento\Quote\Api\Data\PaymentExtensionInterface $extensionAttributes)
386  {
387  return $this->_setExtensionAttributes($extensionAttributes);
388  }
389 }
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
__construct(\Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory, \Magento\Payment\Helper\Data $paymentData, \Magento\Framework\Encryption\EncryptorInterface $encryptor, \Magento\Payment\Model\Checks\SpecificationFactory $methodSpecificationFactory, \Magento\Framework\Model\ResourceModel\AbstractResource $resource=null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection=null, array $data=[], array $additionalChecks=[], \Magento\Framework\Serialize\Serializer\Json $serializer=null, \Magento\Framework\Serialize\JsonValidator $jsonValidator=null)
Definition: Payment.php:92
_setExtensionAttributes(\Magento\Framework\Api\ExtensionAttributesInterface $extensionAttributes)
$quote
__()
Definition: __.php:13
getData($key='', $index=null)
Definition: Info.php:79
$resource
Definition: bulk.php:12
setExtensionAttributes(\Magento\Quote\Api\Data\PaymentExtensionInterface $extensionAttributes)
Definition: Payment.php:385
setAdditionalData($additionalData)
Definition: Payment.php:362
setQuote(\Magento\Quote\Model\Quote $quote)
Definition: Payment.php:142
$method
Definition: info.phtml:13