Salesforce.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace OAuth\OAuth2\Service;
  3. use OAuth\OAuth2\Service\AbstractService;
  4. use OAuth\OAuth2\Token\StdOAuth2Token;
  5. use OAuth\Common\Http\Exception\TokenResponseException;
  6. use OAuth\Common\Http\Uri\Uri;
  7. use OAuth\Common\Consumer\CredentialsInterface;
  8. use OAuth\Common\Http\Client\ClientInterface;
  9. use OAuth\Common\Storage\TokenStorageInterface;
  10. use OAuth\Common\Http\Uri\UriInterface;
  11. class Salesforce extends AbstractService
  12. {
  13. /**
  14. * Scopes
  15. *
  16. * @var string
  17. */
  18. const SCOPE_API = 'api',
  19. SCOPE_REFRESH_TOKEN = 'refresh_token';
  20. /**
  21. * {@inheritdoc}
  22. */
  23. public function getAuthorizationEndpoint()
  24. {
  25. return new Uri('https://login.salesforce.com/services/oauth2/authorize');
  26. }
  27. /**
  28. * {@inheritdoc}
  29. */
  30. public function getAccessTokenEndpoint()
  31. {
  32. return new Uri('https://na1.salesforce.com/services/oauth2/token');
  33. }
  34. /**
  35. * {@inheritdoc}
  36. */
  37. protected function parseRequestTokenResponse($responseBody)
  38. {
  39. parse_str($responseBody, $data);
  40. if (null === $data || !is_array($data)) {
  41. throw new TokenResponseException('Unable to parse response.');
  42. } elseif (!isset($data['oauth_callback_confirmed']) || $data['oauth_callback_confirmed'] !== 'true') {
  43. throw new TokenResponseException('Error in retrieving token.');
  44. }
  45. return $this->parseAccessTokenResponse($responseBody);
  46. }
  47. /**
  48. * {@inheritdoc}
  49. */
  50. protected function parseAccessTokenResponse($responseBody)
  51. {
  52. $data = json_decode($responseBody, true);
  53. if (null === $data || !is_array($data)) {
  54. throw new TokenResponseException('Unable to parse response.');
  55. } elseif (isset($data['error'])) {
  56. throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"');
  57. }
  58. $token = new StdOAuth2Token();
  59. $token->setAccessToken($data['access_token']);
  60. // Salesforce tokens evidently never expire...
  61. $token->setEndOfLife(StdOAuth2Token::EOL_NEVER_EXPIRES);
  62. unset($data['access_token']);
  63. if (isset($data['refresh_token'])) {
  64. $token->setRefreshToken($data['refresh_token']);
  65. unset($data['refresh_token']);
  66. }
  67. $token->setExtraParams($data);
  68. return $token;
  69. }
  70. /**
  71. * {@inheritdoc}
  72. */
  73. protected function getExtraOAuthHeaders()
  74. {
  75. return array('Accept' => 'application/json');
  76. }
  77. }