RequestSender.php 2.02 KB
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Signifyd\Model\SignifydGateway\Client;

use Magento\Signifyd\Model\SignifydGateway\Debugger\DebuggerFactory;
use Magento\Signifyd\Model\SignifydGateway\ApiCallException;
use Magento\Framework\HTTP\ZendClient;

/**
 * Class RequestSender
 * Gets HTTP client end sends request to Signifyd API
 */
class RequestSender
{
    /**
     * @var DebuggerFactory
     */
    private $debuggerFactory;

    /**
     * RequestSender constructor.
     *
     * @param DebuggerFactory $debuggerFactory
     */
    public function __construct(
        DebuggerFactory $debuggerFactory
    ) {
        $this->debuggerFactory = $debuggerFactory;
    }

    /**
     * Sends HTTP request to Signifyd API with configured client.
     *
     * Each request/response pair is handled by debugger.
     * If debug mode for Signifyd integration enabled in configuration
     * debug information is recorded to debug.log.
     *
     * @param ZendClient $client
     * @param int|null $storeId
     * @return \Zend_Http_Response
     * @throws ApiCallException
     */
    public function send(ZendClient $client, $storeId = null): \Zend_Http_Response
    {
        try {
            $response = $client->request();

            $this->debuggerFactory->create($storeId)->success(
                $client->getUri(true),
                $client->getLastRequest(),
                $response->getStatus() . ' ' . $response->getMessage(),
                $response->getBody()
            );

            return $response;
        } catch (\Exception $e) {
            $this->debuggerFactory->create($storeId)->failure(
                $client->getUri(true),
                $client->getLastRequest(),
                $e
            );

            throw new ApiCallException(
                'Unable to process Signifyd API: ' . $e->getMessage(),
                $e->getCode(),
                $e,
                $client->getLastRequest()
            );
        }
    }
}