AbstractTransaction.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Braintree\Gateway\Http\Client;
  7. use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory;
  8. use Magento\Payment\Gateway\Http\ClientException;
  9. use Magento\Payment\Gateway\Http\ClientInterface;
  10. use Magento\Payment\Gateway\Http\TransferInterface;
  11. use Magento\Payment\Model\Method\Logger;
  12. use Psr\Log\LoggerInterface;
  13. /**
  14. * Class AbstractTransaction
  15. */
  16. abstract class AbstractTransaction implements ClientInterface
  17. {
  18. /**
  19. * @var LoggerInterface
  20. */
  21. protected $logger;
  22. /**
  23. * @var Logger
  24. */
  25. protected $customLogger;
  26. /**
  27. * @var BraintreeAdapterFactory
  28. */
  29. protected $adapterFactory;
  30. /**
  31. * Constructor
  32. *
  33. * @param LoggerInterface $logger
  34. * @param Logger $customLogger
  35. * @param BraintreeAdapterFactory $adapterFactory
  36. */
  37. public function __construct(LoggerInterface $logger, Logger $customLogger, BraintreeAdapterFactory $adapterFactory)
  38. {
  39. $this->logger = $logger;
  40. $this->customLogger = $customLogger;
  41. $this->adapterFactory = $adapterFactory;
  42. }
  43. /**
  44. * @inheritdoc
  45. */
  46. public function placeRequest(TransferInterface $transferObject)
  47. {
  48. $data = $transferObject->getBody();
  49. $log = [
  50. 'request' => $data,
  51. 'client' => static::class
  52. ];
  53. $response['object'] = [];
  54. try {
  55. $response['object'] = $this->process($data);
  56. } catch (\Exception $e) {
  57. $message = __($e->getMessage() ?: 'Sorry, but something went wrong');
  58. $this->logger->critical($message);
  59. throw new ClientException($message);
  60. } finally {
  61. $log['response'] = (array) $response['object'];
  62. $this->customLogger->debug($log);
  63. }
  64. return $response;
  65. }
  66. /**
  67. * Process http request
  68. * @param array $data
  69. * @return \Braintree\Result\Error|\Braintree\Result\Successful
  70. */
  71. abstract protected function process(array $data);
  72. }