Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Gateway.php
Go to the documentation of this file.
1 <?php
7 
11 
17 class Gateway
18 {
22  const STATUS_OPEN = 'OPEN';
23  const STATUS_PROCESSING = 'PROCESSING';
24  const STATUS_FLAGGED = 'FLAGGED';
25  const STATUS_DISMISSED = 'DISMISSED';
32  const GUARANTEE_APPROVED = 'APPROVED';
33  const GUARANTEE_DECLINED = 'DECLINED';
34  const GUARANTEE_PENDING = 'PENDING';
35  const GUARANTEE_CANCELED = 'CANCELED';
36  const GUARANTEE_IN_REVIEW = 'IN_REVIEW';
37  const GUARANTEE_UNREQUESTED = 'UNREQUESTED';
43  const DISPOSITION_GOOD = 'GOOD';
44  const DISPOSITION_FRAUDULENT = 'FRAUDULENT';
45  const DISPOSITION_UNSET = 'UNSET';
46 
50  private $createCaseBuilder;
51 
55  private $apiClient;
56 
60  private $orderRepository;
61 
65  private $caseRepository;
66 
75  public function __construct(
76  CreateCaseBuilderInterface $createCaseBuilder,
77  ApiClient $apiClient,
78  OrderRepositoryInterface $orderRepository,
79  CaseRepositoryInterface $caseRepository
80  ) {
81  $this->createCaseBuilder = $createCaseBuilder;
82  $this->apiClient = $apiClient;
83  $this->orderRepository = $orderRepository;
84  $this->caseRepository = $caseRepository;
85  }
86 
95  public function createCase($orderId)
96  {
97  $caseParams = $this->createCaseBuilder->build($orderId);
98  $storeId = $this->getStoreIdFromOrder($orderId);
99 
100  $caseCreationResult = $this->apiClient->makeApiCall(
101  '/cases',
102  'POST',
103  $caseParams,
104  $storeId
105  );
106 
107  if (!isset($caseCreationResult['investigationId'])) {
108  throw new GatewayException('Expected field "investigationId" missed.');
109  }
110 
111  return (int)$caseCreationResult['investigationId'];
112  }
113 
122  public function submitCaseForGuarantee($signifydCaseId)
123  {
124  $storeId = $this->getStoreIdFromCase($signifydCaseId);
125  $guaranteeCreationResult = $this->apiClient->makeApiCall(
126  '/guarantees',
127  'POST',
128  [
129  'caseId' => $signifydCaseId,
130  ],
131  $storeId
132  );
133 
134  $disposition = $this->processDispositionResult($guaranteeCreationResult);
135  return $disposition;
136  }
137 
146  public function cancelGuarantee($caseId)
147  {
148  $storeId = $this->getStoreIdFromCase($caseId);
149  $result = $this->apiClient->makeApiCall(
150  '/cases/' . $caseId . '/guarantee',
151  'PUT',
152  [
153  'guaranteeDisposition' => self::GUARANTEE_CANCELED
154  ],
155  $storeId
156  );
157 
158  $disposition = $this->processDispositionResult($result);
159  if ($disposition !== self::GUARANTEE_CANCELED) {
160  throw new GatewayException("API returned unexpected disposition: $disposition.");
161  }
162 
163  return $disposition;
164  }
165 
175  private function processDispositionResult(array $result)
176  {
177  if (!isset($result['disposition'])) {
178  throw new GatewayException('Expected field "disposition" missed.');
179  }
180 
181  $disposition = strtoupper($result['disposition']);
182 
183  if (!in_array($disposition, [
184  self::GUARANTEE_APPROVED,
185  self::GUARANTEE_DECLINED,
186  self::GUARANTEE_PENDING,
187  self::GUARANTEE_CANCELED,
188  self::GUARANTEE_IN_REVIEW,
189  self::GUARANTEE_UNREQUESTED
190  ])) {
191  throw new GatewayException(
192  sprintf('API returns unknown guaranty disposition "%s".', $disposition)
193  );
194  }
195 
196  return $disposition;
197  }
198 
205  private function getStoreIdFromCase(int $caseId)
206  {
207  $case = $this->caseRepository->getByCaseId($caseId);
208  $orderId = $case->getOrderId();
209 
210  return $this->getStoreIdFromOrder($orderId);
211  }
212 
219  private function getStoreIdFromOrder(int $orderId)
220  {
221  $order = $this->orderRepository->get($orderId);
222 
223  return $order->getStoreId();
224  }
225 }
$orderRepository
Definition: order.php:69
$case
$order
Definition: order.php:55
$caseRepository
__construct(CreateCaseBuilderInterface $createCaseBuilder, ApiClient $apiClient, OrderRepositoryInterface $orderRepository, CaseRepositoryInterface $caseRepository)
Definition: Gateway.php:75