CardDetailsHandler.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Braintree\Gateway\Response;
  7. use Magento\Braintree\Gateway\Config\Config;
  8. use Magento\Braintree\Gateway\SubjectReader;
  9. use Magento\Payment\Gateway\Helper\ContextHelper;
  10. use Magento\Payment\Gateway\Response\HandlerInterface;
  11. use Magento\Sales\Api\Data\OrderPaymentInterface;
  12. /**
  13. * Class CardDetailsHandler
  14. */
  15. class CardDetailsHandler implements HandlerInterface
  16. {
  17. const CARD_TYPE = 'cardType';
  18. const CARD_EXP_MONTH = 'expirationMonth';
  19. const CARD_EXP_YEAR = 'expirationYear';
  20. const CARD_LAST4 = 'last4';
  21. const CARD_NUMBER = 'cc_number';
  22. /**
  23. * @var Config
  24. */
  25. private $config;
  26. /**
  27. * @var SubjectReader
  28. */
  29. private $subjectReader;
  30. /**
  31. * Constructor
  32. *
  33. * @param Config $config
  34. * @param SubjectReader $subjectReader
  35. */
  36. public function __construct(
  37. Config $config,
  38. SubjectReader $subjectReader
  39. ) {
  40. $this->config = $config;
  41. $this->subjectReader = $subjectReader;
  42. }
  43. /**
  44. * @inheritdoc
  45. */
  46. public function handle(array $handlingSubject, array $response)
  47. {
  48. $paymentDO = $this->subjectReader->readPayment($handlingSubject);
  49. $transaction = $this->subjectReader->readTransaction($response);
  50. /**
  51. * @TODO after changes in sales module should be refactored for new interfaces
  52. */
  53. $payment = $paymentDO->getPayment();
  54. ContextHelper::assertOrderPayment($payment);
  55. $creditCard = $transaction->creditCard;
  56. $payment->setCcLast4($creditCard[self::CARD_LAST4]);
  57. $payment->setCcExpMonth($creditCard[self::CARD_EXP_MONTH]);
  58. $payment->setCcExpYear($creditCard[self::CARD_EXP_YEAR]);
  59. $payment->setCcType($this->getCreditCardType($creditCard[self::CARD_TYPE]));
  60. // set card details to additional info
  61. $payment->setAdditionalInformation(self::CARD_NUMBER, 'xxxx-' . $creditCard[self::CARD_LAST4]);
  62. $payment->setAdditionalInformation(OrderPaymentInterface::CC_TYPE, $creditCard[self::CARD_TYPE]);
  63. }
  64. /**
  65. * Get type of credit card mapped from Braintree
  66. *
  67. * @param string $type
  68. * @return array
  69. */
  70. private function getCreditCardType($type)
  71. {
  72. $replaced = str_replace(' ', '-', strtolower($type));
  73. $mapper = $this->config->getCcTypesMapper();
  74. return $mapper[$replaced];
  75. }
  76. }