PayflowProAddCcData.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Observer;
  7. use Magento\Framework\Event\Observer;
  8. use Magento\Payment\Observer\AbstractDataAssignObserver;
  9. use Magento\Paypal\Model\Payflow\Transparent;
  10. use Magento\Quote\Api\Data\PaymentInterface;
  11. class PayflowProAddCcData extends AbstractDataAssignObserver
  12. {
  13. /**
  14. * @var array
  15. */
  16. private $ccKeys = [
  17. 'cc_type',
  18. 'cc_exp_year',
  19. 'cc_exp_month',
  20. 'cc_last_4'
  21. ];
  22. /**
  23. * @param Observer $observer
  24. * @return void
  25. */
  26. public function execute(\Magento\Framework\Event\Observer $observer)
  27. {
  28. $dataObject = $this->readDataArgument($observer);
  29. $additionalData = $dataObject->getData(PaymentInterface::KEY_ADDITIONAL_DATA);
  30. if (!is_array($additionalData)) {
  31. return;
  32. }
  33. $ccData = array_intersect_key($additionalData, array_flip($this->ccKeys));
  34. if (count($ccData) !== count($this->ccKeys)) {
  35. return;
  36. }
  37. $paymentModel = $this->readPaymentModelArgument($observer);
  38. $paymentModel->setAdditionalInformation(
  39. Transparent::CC_DETAILS,
  40. $this->sortCcData($ccData)
  41. );
  42. // CC data should be stored explicitly
  43. foreach ($ccData as $ccKey => $ccValue) {
  44. $paymentModel->setData($ccKey, $ccValue);
  45. }
  46. }
  47. /**
  48. * @param array $ccData
  49. * @return array
  50. */
  51. private function sortCcData(array $ccData)
  52. {
  53. $r = [];
  54. foreach ($this->ccKeys as $key) {
  55. $r[$key] = isset($ccData[$key]) ? $ccData[$key] : null;
  56. }
  57. return $r;
  58. }
  59. }