RefundHandler.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. /**
  3. * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License").
  6. * You may not use this file except in compliance with the License.
  7. * A copy of the License is located at
  8. *
  9. * http://aws.amazon.com/apache2.0
  10. *
  11. * or in the "license" file accompanying this file. This file is distributed
  12. * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
  13. * express or implied. See the License for the specific language governing
  14. * permissions and limitations under the License.
  15. */
  16. namespace Amazon\Payment\Gateway\Response;
  17. use Magento\Payment\Gateway\Response\HandlerInterface;
  18. use Amazon\Core\Helper\Data;
  19. use Magento\Payment\Model\Method\Logger;
  20. use Amazon\Payment\Gateway\Helper\SubjectReader;
  21. use Magento\Framework\Message\ManagerInterface;
  22. use Amazon\Payment\Api\Data\PendingRefundInterfaceFactory;
  23. /**
  24. * Class RefundHandler
  25. * Handles refund behavior for Amazon Pay
  26. */
  27. class RefundHandler implements HandlerInterface
  28. {
  29. /**
  30. * @var ManagerInterface
  31. */
  32. private $messageManager;
  33. /**
  34. * @var Logger
  35. */
  36. private $logger;
  37. /**
  38. * @var SubjectReader
  39. */
  40. private $subjectReader;
  41. /**
  42. * @var Data
  43. */
  44. private $coreHelper;
  45. /**
  46. * @var PendingRefundInterfaceFactory
  47. */
  48. private $pendingRefundFactory;
  49. /**
  50. * RefundHandler constructor.
  51. *
  52. * @param Logger $logger
  53. * @param SubjectReader $subjectReader
  54. * @param Data $coreHelper
  55. * @param ManagerInterface $messageManager
  56. * @param PendingRefundInterfaceFactory $pendingRefundFactory
  57. */
  58. public function __construct(
  59. Logger $logger,
  60. SubjectReader $subjectReader,
  61. Data $coreHelper,
  62. ManagerInterface $messageManager,
  63. PendingRefundInterfaceFactory $pendingRefundFactory
  64. ) {
  65. $this->logger = $logger;
  66. $this->subjectReader = $subjectReader;
  67. $this->coreHelper = $coreHelper;
  68. $this->messageManager = $messageManager;
  69. $this->pendingRefundFactory = $pendingRefundFactory;
  70. }
  71. /**
  72. * @param array $handlingSubject
  73. * @param array $response
  74. */
  75. public function handle(array $handlingSubject, array $response)
  76. {
  77. if (isset($response['status']) && !$response['status']) {
  78. $this->messageManager->addErrorMessage(
  79. __('The refund amount or the Amazon Order ID is incorrect.')
  80. );
  81. } else {
  82. $paymentDO = $this->subjectReader->readPayment($handlingSubject);
  83. $payment = $paymentDO->getPayment();
  84. $payment->setTransactionId($response['refund_id']);
  85. if ($response['state'] == 'Pending') {
  86. $this->pendingRefundFactory->create()
  87. ->setRefundId($response['refund_id'])
  88. ->setPaymentId($payment->getEntityId())
  89. ->setOrderId($payment->getOrder()->getId())
  90. ->save();
  91. }
  92. $this->messageManager->addSuccessMessage(__('Amazon Pay refund successful.'));
  93. }
  94. }
  95. }