ThreeDSecureDetailsHandler.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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 Braintree\Transaction;
  8. use Magento\Payment\Gateway\Helper\ContextHelper;
  9. use Magento\Braintree\Gateway\SubjectReader;
  10. use Magento\Payment\Gateway\Response\HandlerInterface;
  11. use Magento\Sales\Api\Data\OrderPaymentInterface;
  12. /**
  13. * Class ThreeDSecureDetailsHandler
  14. */
  15. class ThreeDSecureDetailsHandler implements HandlerInterface
  16. {
  17. const LIABILITY_SHIFTED = 'liabilityShifted';
  18. const LIABILITY_SHIFT_POSSIBLE = 'liabilityShiftPossible';
  19. /**
  20. * @var SubjectReader
  21. */
  22. private $subjectReader;
  23. /**
  24. * Constructor
  25. *
  26. * @param SubjectReader $subjectReader
  27. */
  28. public function __construct(SubjectReader $subjectReader)
  29. {
  30. $this->subjectReader = $subjectReader;
  31. }
  32. /**
  33. * @inheritdoc
  34. */
  35. public function handle(array $handlingSubject, array $response)
  36. {
  37. $paymentDO = $this->subjectReader->readPayment($handlingSubject);
  38. /**
  39. * @TODO after changes in sales module should be refactored for new interfaces
  40. */
  41. /** @var OrderPaymentInterface $payment */
  42. $payment = $paymentDO->getPayment();
  43. ContextHelper::assertOrderPayment($payment);
  44. /** @var Transaction $transaction */
  45. $transaction = $this->subjectReader->readTransaction($response);
  46. if ($payment->hasAdditionalInformation(self::LIABILITY_SHIFTED)) {
  47. // remove 3d secure details for reorder
  48. $payment->unsAdditionalInformation(self::LIABILITY_SHIFTED);
  49. $payment->unsAdditionalInformation(self::LIABILITY_SHIFT_POSSIBLE);
  50. }
  51. if (empty($transaction->threeDSecureInfo)) {
  52. return;
  53. }
  54. /** @var \Braintree\ThreeDSecureInfo $info */
  55. $info = $transaction->threeDSecureInfo;
  56. $payment->setAdditionalInformation(self::LIABILITY_SHIFTED, $info->liabilityShifted ? 'Yes' : 'No');
  57. $shiftPossible = $info->liabilityShiftPossible ? 'Yes' : 'No';
  58. $payment->setAdditionalInformation(self::LIABILITY_SHIFT_POSSIBLE, $shiftPossible);
  59. }
  60. }