Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Интеграция сайта с amoCRM
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Интеграция сайта с amoCRM

Страниц (2): [1] 2 »
 

1. Alis - 21 Мая, 2021 - 10:05:39 - перейти к сообщению
Здравствуйте! Возникла необходимость интегрировать сайт с amoCRM. Пыталась сделать сама по документации. В учетной записи crm в разделе "Настройки -> Интеграции" создала интеграцию. В документации взяла вот этот код
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $subdomain = 'test'; //Поддомен нужного аккаунта
  3. $link = 'https://' . $subdomain . '.amocrm.ru/oauth2/access_token'; //Формируем URL для запроса
  4.  
  5. /** Соберем данные для запроса */
  6. $data = [
  7.     'client_id' => 'xxxx',
  8.     'client_secret' => 'xxxx',
  9.     'grant_type' => 'authorization_code',
  10.     'code' => 'xxxxxx',
  11.     'redirect_uri' => 'https://test.ru/',
  12. ];
  13.  
  14. /**
  15.  * Нам необходимо инициировать запрос к серверу.
  16.  * Воспользуемся библиотекой cURL (поставляется в составе PHP).
  17.  * Вы также можете использовать и кроссплатформенную программу cURL, если вы не программируете на PHP.
  18.  */
  19. $curl = curl_init(); //Сохраняем дескриптор сеанса cURL
  20. /** Устанавливаем необходимые опции для сеанса cURL  */
  21. curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);
  22. curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-oAuth-client/1.0');
  23. curl_setopt($curl,CURLOPT_URL, $link);
  24. curl_setopt($curl,CURLOPT_HTTPHEADER,['Content-Type:application/json']);
  25. curl_setopt($curl,CURLOPT_HEADER, false);
  26. curl_setopt($curl,CURLOPT_CUSTOMREQUEST, 'POST');
  27. curl_setopt($curl,CURLOPT_POSTFIELDS, json_encode($data));
  28. curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, 1);
  29. curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, 2);
  30. $out = curl_exec($curl); //Инициируем запрос к API и сохраняем ответ в переменную
  31. $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
  32. curl_close($curl);
  33. /** Теперь мы можем обработать ответ, полученный от сервера. Это пример. Вы можете обработать данные своим способом. */
  34. $code = (int)$code;
  35. $errors = [
  36.     400 => 'Bad request',
  37.     401 => 'Unauthorized',
  38.     403 => 'Forbidden',
  39.     404 => 'Not found',
  40.     500 => 'Internal server error',
  41.     502 => 'Bad gateway',
  42.     503 => 'Service unavailable',
  43. ];
  44.  
  45. try
  46. {
  47.     /** Если код ответа не успешный - возвращаем сообщение об ошибке  */
  48.     if ($code < 200 || $code > 204) {
  49.         throw new Exception(isset($errors[$code]) ? $errors[$code] : 'Undefined error', $code);
  50.     }
  51. }
  52. catch(\Exception $e)
  53. {
  54.     die('Ошибка: ' . $e->getMessage() . PHP_EOL . 'Код ошибки: ' . $e->getCode());
  55. }
  56.  
  57. /**
  58.  * Данные получаем в формате JSON, поэтому, для получения читаемых данных,
  59.  * нам придётся перевести ответ в формат, понятный PHP
  60.  */
  61. $response = json_decode($out, true);
  62.  
  63. $access_token = $response['access_token']; //Access токен
  64. $refresh_token = $response['refresh_token']; //Refresh токен
  65. $token_type = $response['token_type']; //Тип токена
  66. $expires_in = $response['expires_in']; //Через сколько действие токена истекает

вставила значения ключа, id, кода авторизации, имя субдомена , сохранила в json-файл значения из $response, подставила эти значения (переменные) в код для получения нового access token по его истечении (из документации, статься "Пример по шагам"), и в код-пример запроса к методу account - по итогу получила "Ошибка: Unauthorized Код ошибки: 401".
Потом попробовала подключить библиотеку и клиент для интеграции crm с сайтом. Установила их на сайт (сайт на вордпресс, устанавливала в корень сайта), там есть файл example.php, в котором нужно заменить значения ключей на свои - и... Ничего))
Я не являюсь PHP-разработчиком, но, к сожалению, вот возникла необходимость интегрировать сайт. Не понимаю, что делать. Может быть, кто-нибудь сможет объяснить по пунктам, как работать с библиотекой и клиентом (начиная с того, что я, может, вообще не в корень сайта должна была её установить, а в папку темы, например). Помоите, пожалуйста.
2. don.bidon - 21 Мая, 2021 - 15:50:53 - перейти к сообщению
Не логичнее ли обратиться в СП amoCRM?
3. Alis - 21 Мая, 2021 - 16:55:08 - перейти к сообщению
don.bidon пишет:
Не логичнее ли обратиться в СП amoCRM?

Они не консультируют по приватным интеграциям.
4. don.bidon - 22 Мая, 2021 - 02:32:43 - перейти к сообщению
Alis пишет:
Они не консультируют по приватным интеграциям.

Примите сочувствие. Не знаю, что такое "приватная интеграция", но, по моим понятиям, если денег за продукт (в данном случае amoCRM) заплачено, обязаны консультировать.
5. Vladimir Kheifets - 22 Мая, 2021 - 07:16:52 - перейти к сообщению
Alis пишет:
Здравствуйте! Возникла необходимость интегрировать сайт с amoCRM.
вставила значения ключа, id, кода авторизации, имя субдомена , сохранила в json-файл значения из $response, подставила эти значения (переменные) в код для получения нового access token по его истечении (из документации, статься "Пример по шагам"), и в код-пример запроса к методу account - по итогу получила "Ошибка: Unauthorized Код ошибки: 401". та.


Добрый день!
Вы написали :"сохранила в json-файл значения из $response".
Из этого следует, что код, который Вы показали, вернул $response без ошибки ошибки: 401.
Уточните, пожалуйста, когда у Вы увидили эту ошибку.
Может быть при попытке использовать access token из $response в следующем запросе
или при повтоном запуске кода, который Вы показали, с неактуальными данными?
Удачи!
6. Alis - 23 Мая, 2021 - 13:25:34 - перейти к сообщению
don.bidon пишет:
Alis пишет:
Они не консультируют по приватным интеграциям.

Примите сочувствие. Не знаю, что такое "приватная интеграция", но, по моим понятиям, если денег за продукт (в данном случае amoCRM) заплачено, обязаны консультировать.

Спасибо за сочувствие))
Приватная интеграция - интеграция в рамках одного аккаунта. Есть еще публичная - которой впоследствии сможет воспользоваться любой пользователь системы.
(Добавление)
Vladimir Kheifets, здравствуйте! При попытке использовать access token из $response в следующем запросе.
7. Vladimir Kheifets - 23 Мая, 2021 - 18:31:48 - перейти к сообщению
Alis пишет:
Vladimir Kheifets, здравствуйте! При попытке использовать access token из $response в следующем запросе.

Есть возможность посмотреть через их сайт Ваш астуальный access token и.т.д?
Вы уверены в том, что работаете с актульной документацией?
Если Вы видите ошибку 401, то это значит, что в запросе неверные данные.
Могли бы Вы показать код следующевого запроса?
Удачи!
8. Alis - 24 Мая, 2021 - 09:00:34 - перейти к сообщению
Vladimir Kheifets пишет:
Есть возможность посмотреть через их сайт Ваш астуальный access token и.т.д?
- нет.
Vladimir Kheifets пишет:
Вы уверены в том, что работаете с актульной документацией?
- да.
Vladimir Kheifets пишет:
Могли бы Вы показать код следующевого запроса?

PHP:
скопировать код в буфер обмена
  1. $subdomain = '***'; //Поддомен нужного аккаунта
  2. $link = 'https://' . $subdomain . '.amocrm.ru/api/v2/account'; //Формируем URL для запроса
  3. /** Получаем access_token из вашего хранилища */
  4. /** Получаем access_token из вашего хранилища */
  5. $data = json_decode(file_get_contents(__DIR__ . '/php/data.json'), true);
  6.  
  7. /** Формируем заголовки */
  8. $headers = [
  9.     'Authorization: Bearer ' . $data['access_token']
  10. ];
  11. /**
  12.  * Нам необходимо инициировать запрос к серверу.
  13.  * Воспользуемся библиотекой cURL (поставляется в составе PHP).
  14.  * Вы также можете использовать и кроссплатформенную программу cURL, если вы не программируете на PHP.
  15.  */
  16. $curl = curl_init(); //Сохраняем дескриптор сеанса cURL
  17. /** Устанавливаем необходимые опции для сеанса cURL  */
  18. curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);
  19. curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-oAuth-client/1.0');
  20. curl_setopt($curl,CURLOPT_URL, $link);
  21. curl_setopt($curl,CURLOPT_HTTPHEADER, $headers);
  22. curl_setopt($curl,CURLOPT_HEADER, false);
  23. curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, 1);
  24. curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, 2);
  25. $out = curl_exec($curl); //Инициируем запрос к API и сохраняем ответ в переменную
  26. $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
  27. curl_close($curl);
  28. /** Теперь мы можем обработать ответ, полученный от сервера. Это пример. Вы можете обработать данные своим способом. */
  29. $code = (int)$code;
  30. $errors = [
  31.         400 => 'Bad request',
  32.         401 => 'Unauthorized',
  33.         403 => 'Forbidden',
  34.         404 => 'Not found',
  35.         500 => 'Internal server error',
  36.         502 => 'Bad gateway',
  37.         503 => 'Service unavailable',
  38. ];
  39.  
  40. try
  41. {
  42.         /** Если код ответа не успешный - возвращаем сообщение об ошибке  */
  43.         if ($code < 200 || $code > 204) {
  44.                 throw new Exception(isset($errors[$code]) ? $errors[$code] : 'Undefined error', $code);
  45.         }
  46. }
  47. catch(\Exception $e)
  48. {
  49.         die('Ошибка: ' . $e->getMessage() . PHP_EOL . 'Код ошибки: ' . $e->getCode());
  50. }
9. Vladimir Kheifets - 24 Мая, 2021 - 09:16:48 - перейти к сообщению
Alis пишет:
Vladimir Kheifets пишет:
Есть возможность посмотреть через их сайт Ваш астуальный access token и.т.д?
- нет.
Vladimir Kheifets пишет:
Вы уверены в том, что работаете с актульной документацией?
- да.
Vladimir Kheifets пишет:
Могли бы Вы показать код следующевого запроса?

PHP:
скопировать код в буфер обмена
  1. $subdomain = '***'; //Поддомен нужного аккаунта
  2. $link = 'https://' . $subdomain . '.amocrm.ru/api/v2/account'; //Формируем URL для запроса
  3. /** Получаем access_token из вашего хранилища */
  4. $data = json_decode(file_get_contents(__DIR__ . '/php/data.json'), true);
  5. -------------
  6. -------------
  7.  

Добрый день!
В первой часть кода Вы не показали сохранение данных в файле __DIR__ . '/php/data.json'
Вам нужно убедится в том, что этот файл существует и в нём есть access_token
Также нужно проверить переменную $link(м.б. неверно задан поддомен нужного аккаунта)
Удачи!
10. Alis - 24 Мая, 2021 - 09:21:54 - перейти к сообщению
Vladimir Kheifets пишет:
сохранение данных в файле __DIR__ . '/php/data.json'

PHP:
скопировать код в буфер обмена
  1. $response = json_decode($out, true);
  2.  
  3.  
  4. $resp  = file_put_contents('php/data.json',json_encode($response));
  5. $str = file_get_contents('php/data.json');
  6. $json = json_decode($str, true);
  7. $token = $json['refresh_token'];

Файл существует, в нем есть access_token и refresh_token.
Поддомен задан верно, просто для форума я его заменила на звездочки.
11. Vladimir Kheifets - 24 Мая, 2021 - 10:38:54 - перейти к сообщению
Alis пишет:
Vladimir Kheifets пишет:
сохранение данных в файле __DIR__ . '/php/data.json'

PHP:
скопировать код в буфер обмена
  1. $response = json_decode($out, true);
  2.  
  3.  
  4. $resp  = file_put_contents('php/data.json',json_encode($response));
  5. $str = file_get_contents('php/data.json');
  6. $json = json_decode($str, true);
  7. $token = $json['refresh_token'];

Файл существует, в нем есть access_token и refresh_token.
Поддомен задан верно, просто для форума я его заменила на звездочки.

М.б. здесь:
'Authorization: Bearer ' . $data['access_token']
должно быть:
"Authorization: Bearer $token"; т.е. 'refresh_token', а не 'access_token'?
12. Alis - 24 Мая, 2021 - 10:47:58 - перейти к сообщению
Vladimir Kheifets пишет:

М.б. здесь:
'Authorization: Bearer ' . $data['access_token']
должно быть:
"Authorization: Bearer $token"; т.е. 'refresh_token', а не 'access_token'?


В документации написано /** Получаем access_token из вашего хранилища */.
На всякий случай попробовала заменить access_token на refresh_token - ошибка та же. (Ошибка: Unauthorized Код ошибки: 401)
13. Vladimir Kheifets - 24 Мая, 2021 - 13:10:29 - перейти к сообщению
Alis пишет:
В документации написано /** Получаем access_token из вашего хранилища */.
На всякий случай попробовала заменить access_token на refresh_token - ошибка та же. (Ошибка: Unauthorized Код ошибки: 401)

Значит token система не акцептирует.
Попробуйте проверить $data['expires_in'] м.б. token устрел и нужно повторить первый запрос, если это возможно.
p.s.Вообще-то, если Вы сами выбрали amoCRM, то может быть стоит от неё отказаться
из-за отсутствия тех поддержки.
14. Alis - 24 Мая, 2021 - 15:20:28 - перейти к сообщению
Vladimir Kheifets пишет:
Попробуйте проверить $data['expires_in'] м.б. token устрел и нужно повторить первый запрос, если это возможно.

Выводится:
int(86400)

Vladimir Kheifets пишет:
p.s.Вообще-то, если Вы сами выбрали amoCRM, то может быть стоит от неё отказаться
из-за отсутствия тех поддержки.

Увы. Не я.
15. Vladimir Kheifets - 24 Мая, 2021 - 15:33:13 - перейти к сообщению
Alis пишет:
Vladimir Kheifets пишет:
Попробуйте проверить $data['expires_in'] м.б. token устрел и нужно повторить первый запрос, если это возможно.

Выводится:
int(86400)

Возможно, что int(86400) означает 24часа x 60 мин x 60 сек = 86400 т.е. token был актуален один день. Когда был сделан первый запрос с сохранением данных?

 

Powered by ExBB FM 1.0 RC1