amoCRM Provider Π΄Π»Ρ OAuth 2.0 Client
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° OAuth 2.0 Π² amoCRM Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΡΠ΅ΠΊΠΈ PHP League OAuth 2.0 Client., (*1)
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ composer:, (*2)
composer require amocrm/oauth2-amocrm
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ The League's OAuth client, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ AmoCRM\OAuth2\Client\Provider\AmoCRM
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°., (*3)
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠ΄Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ (Authorization Code)
$provider = new AmoCRM([
'clientId' => 'YOUR_CLIENT_ID',
'clientSecret' => 'YOUR_CLIENT_SECRET',
'redirectUri' => 'http://your-redirect-uri',
]);
if (isset($_GET['code']) && $_GET['code']) {
//ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ setBaseDomain ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°.
if (isset($_GET['referer'])) {
$provider->setBaseDomain($_GET['referer']);
}
$token = $provider->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);
//todo ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ access, refresh ΡΠΎΠΊΠ΅Π½Ρ ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ ΠΊ Π°ΠΊΠΊΠ°ΡΠ½ΡΡ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
/** @var \AmoCRM\OAuth2\Client\Provider\AmoCRMResourceOwner $ownerDetails */
$ownerDetails = $provider->getResourceOwner($token);
printf('Hello, %s!', $ownerDetails->getName());
}
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ access ΡΠΎΠΊΠ΅Π½Π°
$provider = new AmoCRM([
'clientId' => 'YOUR_CLIENT_ID',
'clientSecret' => 'YOUR_CLIENT_SECRET',
'redirectUri' => 'http://your-redirect-uri',
]);
//todo ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅Π½Π° ΠΈΠ· Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°
$provider->setBaseDomain($token['baseDomain']);
/**
* ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π°ΠΊΡΠΈΠ²Π΅Π½ Π»ΠΈ ΡΠΎΠΊΠ΅Π½ ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ Π·Π°ΠΏΡΠΎΡ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΡΠΎΠΊΠ΅Π½
*/
if (time() >= $token['expires']) {
/**
* ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΎΠΊΠ΅Π½ ΠΏΠΎ ΡΠ΅ΡΡΠ΅ΡΡ
*/
try {
$accessToken = $provider->getAccessToken(new League\OAuth2\Client\Grant\RefreshToken(), [
'refresh_token' => $token['refreshToken'],
]);
//todo ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠ΅ access, refresh ΡΠΎΠΊΠ΅Π½Ρ ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ ΠΊ Π°ΠΊΠΊΠ°ΡΠ½ΡΡ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
} catch (Exception $e) {
die((string)$e);
}
}
//todo ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ Π·Π°ΠΏΡΠΎΡ
ΠΠ½ΠΎΠΏΠΊΠ° Π½Π° ΡΠ°ΠΉΡ
ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Π½Π° ΡΠ°ΠΉΡ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ., (*4)
<div class="button"></div>
<script
class="amocrm_oauth"
charset="utf-8"
data-client-id="xxxxxx-client-id-xxxxxx"
data-title="ΠΠΎΠ±Π°Π²ΠΈΡΡ Π² amoCRM"
data-compact="false"
data-class-name="className"
data-color="red"
data-state="random string"
src="https://www.amocrm.ru/auth/button.js"
></script>
ΠΡΠΈΠΌΠ΅Ρ
Π ΡΠ°ΠΌΠΊΠ°Ρ
Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠ°ΠΉΠ» example.php, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΡΠΎΡΡΠ΅ΠΉΡΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ, ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½Π°, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ².
ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° Π² ΡΠ°ΠΉΠ»Π΅, Π° ΡΠ°ΠΊΠΆΠ΅ Redirect URI Π² ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π²Π΅Π΄ΡΡΠΈΠΉ Π½Π° Π²ΡΠ·ΠΎΠ² ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π½Π° Π²Π°ΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅.
ΠΠ°Π»ΡΡΠ΅ Π΄Π»Ρ ΡΠ΅ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ example.php, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π°Π²ΡΠΎΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² amoCRM.
ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠΎΠ² Π²Ρ ΡΠ²ΠΈΠ΄Π΅ΡΠ΅ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΊΡΠ°Π½Π΅.
ΠΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ GET ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ - request=1, ΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ Π·Π°ΠΏΡΠΎΡ Π·Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎΠ± Π°ΠΊΠΊΠ°ΡΠ½ΡΠ΅ Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½Π½ΡΠΌ ΡΠ°Π½Π΅Π΅ ΡΠΎΠΊΠ΅Π½ΠΎΠΌ., (*5)