Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
OauthService.php
Go to the documentation of this file.
1 <?php
8 
9 use Magento\Framework\Oauth\Helper\Oauth as OauthHelper;
10 use Magento\Integration\Helper\Oauth\Data as IntegrationOauthHelper;
12 use Magento\Integration\Model\Oauth\ConsumerFactory;
14 use Magento\Integration\Model\Oauth\TokenFactory as TokenFactory;
17 
24 {
28  protected $_storeManager;
29 
33  protected $_consumerFactory;
34 
38  protected $_tokenFactory;
39 
43  protected $_dataHelper;
44 
48  protected $_httpClient;
49 
53  protected $_logger;
54 
58  protected $_oauthHelper;
59 
63  protected $_tokenProvider;
64 
68  private $_dateHelper;
69 
82  public function __construct(
83  \Magento\Store\Model\StoreManagerInterface $storeManager,
84  ConsumerFactory $consumerFactory,
85  TokenFactory $tokenFactory,
86  IntegrationOauthHelper $dataHelper,
87  \Magento\Framework\HTTP\ZendClient $httpClient,
88  \Psr\Log\LoggerInterface $logger,
89  OauthHelper $oauthHelper,
90  TokenProvider $tokenProvider
91  ) {
92  $this->_storeManager = $storeManager;
93  $this->_consumerFactory = $consumerFactory;
94  $this->_tokenFactory = $tokenFactory;
95  $this->_dataHelper = $dataHelper;
96  $this->_httpClient = $httpClient;
97  $this->_logger = $logger;
98  $this->_oauthHelper = $oauthHelper;
99  $this->_tokenProvider = $tokenProvider;
100  }
101 
109  private function getDateHelper()
110  {
111  if ($this->_dateHelper === null) {
113  ->get(\Magento\Framework\Stdlib\DateTime\DateTime::class);
114  }
115  return $this->_dateHelper;
116  }
117 
121  public function createConsumer($consumerData)
122  {
123  try {
124  $consumerData['key'] = $this->_oauthHelper->generateConsumerKey();
125  $consumerData['secret'] = $this->_oauthHelper->generateConsumerSecret();
126  $consumer = $this->_consumerFactory->create()->setData($consumerData);
127  $consumer->save();
128  return $consumer;
129  } catch (\Magento\Framework\Exception\LocalizedException $exception) {
130  throw $exception;
131  } catch (\Exception $exception) {
132  throw new \Magento\Framework\Oauth\Exception(
133  __(
134  "The oAuth consumer account couldn't be created due to an unexpected error. Please try again later."
135  )
136  );
137  }
138  }
139 
143  public function createAccessToken($consumerId, $clearExistingToken = false)
144  {
145  try {
146  $consumer = $this->_consumerFactory->create()->load($consumerId);
147  $existingToken = $this->_tokenProvider->getIntegrationTokenByConsumerId($consumer->getId());
148  if ($existingToken && $clearExistingToken) {
149  $existingToken->delete();
150  unset($existingToken);
151  }
152  } catch (\Exception $e) {
153  }
154  if (!isset($existingToken)) {
155  $consumer = $this->_consumerFactory->create()->load($consumerId);
156  $this->_tokenFactory->create()->createVerifierToken($consumerId);
157  $this->_tokenProvider->createRequestToken($consumer);
158  $this->_tokenProvider->getAccessToken($consumer);
159  return true;
160  }
161  return false;
162  }
163 
167  public function getAccessToken($consumerId)
168  {
169  try {
170  $consumer = $this->_consumerFactory->create()->load($consumerId);
171  $token = $this->_tokenProvider->getIntegrationTokenByConsumerId($consumer->getId());
172  if ($token->getType() != OauthTokenModel::TYPE_ACCESS) {
173  return false;
174  }
175  } catch (\Exception $e) {
176  return false;
177  }
178  return $token;
179  }
180 
184  public function loadConsumer($consumerId)
185  {
186  try {
187  return $this->_consumerFactory->create()->load($consumerId);
188  } catch (\Magento\Framework\Exception\LocalizedException $exception) {
189  throw $exception;
190  } catch (\Exception $exception) {
191  throw new \Magento\Framework\Oauth\Exception(
192  __("The oAuth consumer account couldn't be loaded due to an unexpected error. Please try again later.")
193  );
194  }
195  }
196 
200  public function loadConsumerByKey($key)
201  {
202  try {
203  return $this->_consumerFactory->create()->load($key, 'key');
204  } catch (\Magento\Framework\Exception\LocalizedException $exception) {
205  throw $exception;
206  } catch (\Exception $exception) {
207  throw new \Magento\Framework\Oauth\Exception(
208  __("The oAuth consumer account couldn't be loaded due to an unexpected error. Please try again later.")
209  );
210  }
211  }
212 
216  public function postToConsumer($consumerId, $endpointUrl)
217  {
218  try {
219  $consumer = $this->loadConsumer($consumerId);
220  $consumer->setUpdatedAt($this->getDateHelper()->gmtDate());
221  $consumer->save();
222  if (!$consumer->getId()) {
223  throw new \Magento\Framework\Oauth\Exception(
224  __('A consumer with "%1" ID doesn\'t exist. Verify the ID and try again.', $consumerId)
225  );
226  }
227  $consumerData = $consumer->getData();
228  $verifier = $this->_tokenFactory->create()->createVerifierToken($consumerId);
229  $storeBaseUrl = $this->_storeManager->getStore()->getBaseUrl();
230  $this->_httpClient->setUri($endpointUrl);
231  $this->_httpClient->setParameterPost(
232  [
233  'oauth_consumer_key' => $consumerData['key'],
234  'oauth_consumer_secret' => $consumerData['secret'],
235  'store_base_url' => $storeBaseUrl,
236  'oauth_verifier' => $verifier->getVerifier(),
237  ]
238  );
239  $maxredirects = $this->_dataHelper->getConsumerPostMaxRedirects();
240  $timeout = $this->_dataHelper->getConsumerPostTimeout();
241  $this->_httpClient->setConfig(['maxredirects' => $maxredirects, 'timeout' => $timeout]);
242  $this->_httpClient->request(\Magento\Framework\HTTP\ZendClient::POST);
243  return $verifier->getVerifier();
244  } catch (\Magento\Framework\Exception\LocalizedException $exception) {
245  throw $exception;
246  } catch (\Magento\Framework\Oauth\Exception $exception) {
247  throw $exception;
248  } catch (\Exception $exception) {
249  $this->_logger->critical($exception);
250  throw new \Magento\Framework\Oauth\Exception(
251  __('The attempt to post data to consumer failed due to an unexpected error. Please try again later.')
252  );
253  }
254  }
255 
259  public function deleteConsumer($consumerId)
260  {
261  $consumer = $this->_loadConsumerById($consumerId);
262  $data = $consumer->getData();
263  $consumer->delete();
264  return $data;
265  }
266 
270  public function deleteIntegrationToken($consumerId)
271  {
272  try {
273  $consumer = $this->_consumerFactory->create()->load($consumerId);
274  $existingToken = $this->_tokenProvider->getIntegrationTokenByConsumerId($consumer->getId());
275  $existingToken->delete();
276  return true;
277  } catch (\Exception $e) {
278  return false;
279  }
280  }
281 
289  protected function _loadConsumerById($consumerId)
290  {
291  $consumer = $this->_consumerFactory->create()->load($consumerId);
292  if (!$consumer->getId()) {
293  throw new IntegrationException(
294  __('A consumer with ID "%1" doesn\'t exist. Verify the ID and try again.', $consumerId)
295  );
296  }
297  return $consumer;
298  }
299 }
__construct(\Magento\Store\Model\StoreManagerInterface $storeManager, ConsumerFactory $consumerFactory, TokenFactory $tokenFactory, IntegrationOauthHelper $dataHelper, \Magento\Framework\HTTP\ZendClient $httpClient, \Psr\Log\LoggerInterface $logger, OauthHelper $oauthHelper, TokenProvider $tokenProvider)
$storeManager
__()
Definition: __.php:13
$logger
createAccessToken($consumerId, $clearExistingToken=false)
postToConsumer($consumerId, $endpointUrl)