RiskDataHandler.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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\Payment\Gateway\Helper\ContextHelper;
  8. use Magento\Braintree\Gateway\SubjectReader;
  9. use Magento\Payment\Gateway\Response\HandlerInterface;
  10. /**
  11. * Class RiskDataHandler
  12. */
  13. class RiskDataHandler implements HandlerInterface
  14. {
  15. /**
  16. * Risk data id
  17. */
  18. const RISK_DATA_ID = 'riskDataId';
  19. /**
  20. * The possible values of the risk decision are Not Evaluated, Approve, Review, and Decline
  21. */
  22. const RISK_DATA_DECISION = 'riskDataDecision';
  23. /**
  24. * Risk data Review status
  25. */
  26. private static $statusReview = 'Review';
  27. /**
  28. * @var SubjectReader
  29. */
  30. private $subjectReader;
  31. /**
  32. * Constructor
  33. *
  34. * @param SubjectReader $subjectReader
  35. */
  36. public function __construct(SubjectReader $subjectReader)
  37. {
  38. $this->subjectReader = $subjectReader;
  39. }
  40. /**
  41. * Handles response
  42. *
  43. * @param array $handlingSubject
  44. * @param array $response
  45. * @return void
  46. */
  47. public function handle(array $handlingSubject, array $response)
  48. {
  49. $paymentDO = $this->subjectReader->readPayment($handlingSubject);
  50. /** @var \Braintree\Transaction $transaction */
  51. $transaction = $this->subjectReader->readTransaction($response);
  52. if (!isset($transaction->riskData)) {
  53. return;
  54. }
  55. $payment = $paymentDO->getPayment();
  56. ContextHelper::assertOrderPayment($payment);
  57. $payment->setAdditionalInformation(self::RISK_DATA_ID, $transaction->riskData->id);
  58. $payment->setAdditionalInformation(self::RISK_DATA_DECISION, $transaction->riskData->decision);
  59. // mark payment as fraud
  60. if ($transaction->riskData->decision === self::$statusReview) {
  61. $payment->setIsFraudDetected(true);
  62. }
  63. }
  64. }