Soap.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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\Webapi\Soap\ClientFactory;
  8. use Magento\Payment\Gateway\Http\ClientInterface;
  9. use Magento\Payment\Gateway\Http\ConverterInterface;
  10. use Magento\Payment\Gateway\Http\TransferInterface;
  11. use Magento\Payment\Model\Method\Logger;
  12. /**
  13. * Class Soap
  14. * @package Magento\Payment\Gateway\Http\Client
  15. * @api
  16. * @since 100.0.2
  17. */
  18. class Soap implements ClientInterface
  19. {
  20. /**
  21. * @var Logger
  22. */
  23. private $logger;
  24. /**
  25. * @var ConverterInterface | null
  26. */
  27. private $converter;
  28. /**
  29. * @var ClientFactory
  30. */
  31. private $clientFactory;
  32. /**
  33. * @param Logger $logger
  34. * @param ClientFactory $clientFactory
  35. * @param ConverterInterface | null $converter
  36. */
  37. public function __construct(
  38. Logger $logger,
  39. ClientFactory $clientFactory,
  40. ConverterInterface $converter = null
  41. ) {
  42. $this->logger = $logger;
  43. $this->converter = $converter;
  44. $this->clientFactory = $clientFactory;
  45. }
  46. /**
  47. * Places request to gateway. Returns result as ENV array
  48. *
  49. * @param TransferInterface $transferObject
  50. * @return array
  51. * @throws \Magento\Payment\Gateway\Http\ClientException
  52. * @throws \Magento\Payment\Gateway\Http\ConverterException
  53. * @throws \Exception
  54. */
  55. public function placeRequest(TransferInterface $transferObject)
  56. {
  57. $this->logger->debug(['request' => $transferObject->getBody()]);
  58. $client = $this->clientFactory->create(
  59. $transferObject->getClientConfig()['wsdl'],
  60. ['trace' => true]
  61. );
  62. try {
  63. $client->__setSoapHeaders($transferObject->getHeaders());
  64. $response = $client->__soapCall(
  65. $transferObject->getMethod(),
  66. [$transferObject->getBody()]
  67. );
  68. $result = $this->converter
  69. ? $this->converter->convert(
  70. $response
  71. )
  72. : [$response];
  73. $this->logger->debug(['response' => $result]);
  74. } catch (\Exception $e) {
  75. $this->logger->debug(['trace' => $client->__getLastRequest()]);
  76. throw $e;
  77. }
  78. return $result;
  79. }
  80. }