PaymentDetailsHandler.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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\Observer\DataAssignObserver;
  8. use Magento\Braintree\Gateway\SubjectReader;
  9. use Magento\Payment\Gateway\Response\HandlerInterface;
  10. use Magento\Sales\Api\Data\OrderPaymentInterface;
  11. /**
  12. * Payment Details Handler
  13. */
  14. class PaymentDetailsHandler implements HandlerInterface
  15. {
  16. const AVS_POSTAL_RESPONSE_CODE = 'avsPostalCodeResponseCode';
  17. const AVS_STREET_ADDRESS_RESPONSE_CODE = 'avsStreetAddressResponseCode';
  18. const CVV_RESPONSE_CODE = 'cvvResponseCode';
  19. const PROCESSOR_AUTHORIZATION_CODE = 'processorAuthorizationCode';
  20. const PROCESSOR_RESPONSE_CODE = 'processorResponseCode';
  21. const PROCESSOR_RESPONSE_TEXT = 'processorResponseText';
  22. /**
  23. * List of additional details
  24. * @var array
  25. */
  26. protected $additionalInformationMapping = [
  27. self::AVS_POSTAL_RESPONSE_CODE,
  28. self::AVS_STREET_ADDRESS_RESPONSE_CODE,
  29. self::CVV_RESPONSE_CODE,
  30. self::PROCESSOR_AUTHORIZATION_CODE,
  31. self::PROCESSOR_RESPONSE_CODE,
  32. self::PROCESSOR_RESPONSE_TEXT,
  33. ];
  34. /**
  35. * @var SubjectReader
  36. */
  37. private $subjectReader;
  38. /**
  39. * Constructor
  40. *
  41. * @param SubjectReader $subjectReader
  42. */
  43. public function __construct(SubjectReader $subjectReader)
  44. {
  45. $this->subjectReader = $subjectReader;
  46. }
  47. /**
  48. * @inheritdoc
  49. */
  50. public function handle(array $handlingSubject, array $response)
  51. {
  52. $paymentDO = $this->subjectReader->readPayment($handlingSubject);
  53. /** @var \Braintree\Transaction $transaction */
  54. $transaction = $this->subjectReader->readTransaction($response);
  55. /** @var OrderPaymentInterface $payment */
  56. $payment = $paymentDO->getPayment();
  57. $payment->setCcTransId($transaction->id);
  58. $payment->setLastTransId($transaction->id);
  59. //remove previously set payment nonce
  60. $payment->unsAdditionalInformation(DataAssignObserver::PAYMENT_METHOD_NONCE);
  61. foreach ($this->additionalInformationMapping as $item) {
  62. if (!isset($transaction->$item)) {
  63. continue;
  64. }
  65. $payment->setAdditionalInformation($item, $transaction->$item);
  66. }
  67. }
  68. }