WebhookMessageReader.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Signifyd\Model\SignifydGateway\Response;
  7. use Magento\Framework\Json\DecoderInterface;
  8. /**
  9. * Reads request and produces webhook message data object based on request params.
  10. */
  11. class WebhookMessageReader
  12. {
  13. /**
  14. * @var DecoderInterface
  15. */
  16. private $dataDecoder;
  17. /**
  18. * @var WebhookMessageFactory
  19. */
  20. private $webhookMessageFactory;
  21. /**
  22. * @param DecoderInterface $decoder
  23. * @param WebhookMessageFactory $webhookMessageFactory
  24. */
  25. public function __construct(
  26. DecoderInterface $decoder,
  27. WebhookMessageFactory $webhookMessageFactory
  28. ) {
  29. $this->dataDecoder = $decoder;
  30. $this->webhookMessageFactory = $webhookMessageFactory;
  31. }
  32. /**
  33. * Returns webhook message data object.
  34. *
  35. * @param WebhookRequest $request
  36. * @return WebhookMessage
  37. * @throws \InvalidArgumentException
  38. */
  39. public function read(WebhookRequest $request)
  40. {
  41. try {
  42. $decodedData = $this->dataDecoder->decode($request->getBody());
  43. } catch (\Exception $e) {
  44. throw new \InvalidArgumentException(
  45. 'Webhook request body is not valid JSON: ' . $e->getMessage(),
  46. $e->getCode(),
  47. $e
  48. );
  49. }
  50. $webhookMessage = $this->webhookMessageFactory->create(
  51. [
  52. 'data' => $decodedData,
  53. 'eventTopic' => $request->getEventTopic()
  54. ]
  55. );
  56. return $webhookMessage;
  57. }
  58. }