Zend.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Payment\Gateway\Http\Client;
  7. use Magento\Framework\HTTP\ZendClient;
  8. use Magento\Framework\HTTP\ZendClientFactory;
  9. use Magento\Payment\Gateway\Http\ClientInterface;
  10. use Magento\Payment\Gateway\Http\ConverterInterface;
  11. use Magento\Payment\Gateway\Http\TransferInterface;
  12. use Magento\Payment\Model\Method\Logger;
  13. /**
  14. * Class Zend
  15. * @package Magento\Payment\Gateway\Http\Client
  16. * @api
  17. * @since 100.0.2
  18. */
  19. class Zend implements ClientInterface
  20. {
  21. /**
  22. * @var ZendClientFactory
  23. */
  24. private $clientFactory;
  25. /**
  26. * @var ConverterInterface | null
  27. */
  28. private $converter;
  29. /**
  30. * @var Logger
  31. */
  32. private $logger;
  33. /**
  34. * @param ZendClientFactory $clientFactory
  35. * @param Logger $logger
  36. * @param ConverterInterface | null $converter
  37. */
  38. public function __construct(
  39. ZendClientFactory $clientFactory,
  40. Logger $logger,
  41. ConverterInterface $converter = null
  42. ) {
  43. $this->clientFactory = $clientFactory;
  44. $this->converter = $converter;
  45. $this->logger = $logger;
  46. }
  47. /**
  48. * {inheritdoc}
  49. */
  50. public function placeRequest(TransferInterface $transferObject)
  51. {
  52. $log = [
  53. 'request' => $transferObject->getBody(),
  54. 'request_uri' => $transferObject->getUri()
  55. ];
  56. $result = [];
  57. /** @var ZendClient $client */
  58. $client = $this->clientFactory->create();
  59. $client->setConfig($transferObject->getClientConfig());
  60. $client->setMethod($transferObject->getMethod());
  61. switch ($transferObject->getMethod()) {
  62. case \Zend_Http_Client::GET:
  63. $client->setParameterGet($transferObject->getBody());
  64. break;
  65. case \Zend_Http_Client::POST:
  66. $client->setParameterPost($transferObject->getBody());
  67. break;
  68. default:
  69. throw new \LogicException(
  70. sprintf(
  71. 'Unsupported HTTP method %s',
  72. $transferObject->getMethod()
  73. )
  74. );
  75. }
  76. $client->setHeaders($transferObject->getHeaders());
  77. $client->setUrlEncodeBody($transferObject->shouldEncode());
  78. $client->setUri($transferObject->getUri());
  79. try {
  80. $response = $client->request();
  81. $result = $this->converter
  82. ? $this->converter->convert($response->getBody())
  83. : [$response->getBody()];
  84. $log['response'] = $result;
  85. } catch (\Zend_Http_Client_Exception $e) {
  86. throw new \Magento\Payment\Gateway\Http\ClientException(
  87. __($e->getMessage())
  88. );
  89. } catch (\Magento\Payment\Gateway\Http\ConverterException $e) {
  90. throw $e;
  91. } finally {
  92. $this->logger->debug($log);
  93. }
  94. return $result;
  95. }
  96. }