RefundRequestBuilder.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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\Request;
  17. use Magento\Payment\Gateway\Request\BuilderInterface;
  18. use Magento\Framework\App\ProductMetadata;
  19. use Amazon\Payment\Gateway\Helper\SubjectReader;
  20. use Amazon\Core\Helper\Data;
  21. use Magento\Sales\Api\OrderRepositoryInterface;
  22. use Amazon\Payment\Gateway\Data\Order\OrderAdapterFactory;
  23. /**
  24. * Class RefundRequestBuilder
  25. * Builds refund request for Amazon Pay
  26. */
  27. class RefundRequestBuilder implements BuilderInterface
  28. {
  29. /**
  30. * @var ProductMetadata
  31. */
  32. private $productMetaData;
  33. /**
  34. * @var SubjectReader
  35. */
  36. private $subjectReader;
  37. /**
  38. * @var Data
  39. */
  40. private $coreHelper;
  41. /**
  42. * @var OrderRepositoryInterface
  43. */
  44. private $orderRepository;
  45. /**
  46. * @var OrderAdapterFactory
  47. */
  48. private $orderAdapterFactory;
  49. /**
  50. * RefundRequestBuilder constructor.
  51. *
  52. * @param ProductMetadata $productMetadata
  53. * @param SubjectReader $subjectReader
  54. * @param Data $coreHelper
  55. * @param OrderRepositoryInterface $orderRepository
  56. * @param OrderAdapterFactory $orderAdapterFactory
  57. */
  58. public function __construct(
  59. ProductMetaData $productMetadata,
  60. SubjectReader $subjectReader,
  61. Data $coreHelper,
  62. OrderRepositoryInterface $orderRepository,
  63. OrderAdapterFactory $orderAdapterFactory
  64. ) {
  65. $this->coreHelper = $coreHelper;
  66. $this->productMetaData = $productMetadata;
  67. $this->subjectReader = $subjectReader;
  68. $this->orderRepository = $orderRepository;
  69. $this->orderAdapterFactory = $orderAdapterFactory;
  70. }
  71. /**
  72. * @param array $buildSubject
  73. * @return array
  74. */
  75. public function build(array $buildSubject)
  76. {
  77. $data = [];
  78. $paymentDO = $this->subjectReader->readPayment($buildSubject);
  79. $payment = $paymentDO->getPayment();
  80. $orderDO = $paymentDO->getOrder();
  81. $currencyCode = $orderDO->getCurrencyCode();
  82. $total = $buildSubject['amount'];
  83. $storeId = $orderDO->getStoreId();
  84. // The magento order adapter doesn't expose everything we need to send a request to the AP API so we
  85. // need to use our own version with the details we need exposed in custom methods.
  86. $orderAdapter = $this->orderAdapterFactory->create(
  87. ['order' => $payment->getOrder()]
  88. );
  89. $amazonId = $orderAdapter->getAmazonOrderID();
  90. $multicurrency = $orderAdapter->getMulticurrencyDetails($total);
  91. if ($multicurrency['multicurrency']) {
  92. $currencyCode = $multicurrency['order_currency'];
  93. $total = $multicurrency['total'];
  94. $storeId = $multicurrency['store_id'];
  95. }
  96. if ($amazonId) {
  97. $data = [
  98. 'amazon_capture_id' => $payment->getParentTransactionId(),
  99. 'refund_reference_id' => $amazonId . '-R' . time(),
  100. 'refund_amount' => $total,
  101. 'currency_code' => $currencyCode,
  102. 'store_id' => $storeId
  103. ];
  104. }
  105. return $data;
  106. }
  107. }