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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Интеграция сайта с amoCRM

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Alis
Отправлено: 21 Мая, 2021 - 10:05:39
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Май 2021  


Помог: 0 раз(а)




Здравствуйте! Возникла необходимость интегрировать сайт с 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-разработчиком, но, к сожалению, вот возникла необходимость интегрировать сайт. Не понимаю, что делать. Может быть, кто-нибудь сможет объяснить по пунктам, как работать с библиотекой и клиентом (начиная с того, что я, может, вообще не в корень сайта должна была её установить, а в папку темы, например). Помоите, пожалуйста.
 
 Top
don.bidon
Отправлено: 21 Мая, 2021 - 15:50:53
Post Id


Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Март 2019  


Помог: 2 раз(а)




Не логичнее ли обратиться в СП amoCRM?

(Отредактировано автором: 21 Мая, 2021 - 15:51:20)

 
 Top
Alis
Отправлено: 21 Мая, 2021 - 16:55:08
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Май 2021  


Помог: 0 раз(а)




don.bidon пишет:
Не логичнее ли обратиться в СП amoCRM?

Они не консультируют по приватным интеграциям.
 
 Top
don.bidon
Отправлено: 22 Мая, 2021 - 02:32:43
Post Id


Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Март 2019  


Помог: 2 раз(а)




Alis пишет:
Они не консультируют по приватным интеграциям.

Примите сочувствие. Не знаю, что такое "приватная интеграция", но, по моим понятиям, если денег за продукт (в данном случае amoCRM) заплачено, обязаны консультировать.
 
 Top
Vladimir Kheifets
Отправлено: 22 Мая, 2021 - 07:16:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




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


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


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Май 2021  


Помог: 0 раз(а)




don.bidon пишет:
Alis пишет:
Они не консультируют по приватным интеграциям.

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

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



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Alis пишет:
Vladimir Kheifets, здравствуйте! При попытке использовать access token из $response в следующем запросе.

Есть возможность посмотреть через их сайт Ваш астуальный access token и.т.д?
Вы уверены в том, что работаете с актульной документацией?
Если Вы видите ошибку 401, то это значит, что в запросе неверные данные.
Могли бы Вы показать код следующевого запроса?
Удачи!

(Отредактировано автором: 23 Мая, 2021 - 18:32:28)

 
 Top
Alis
Отправлено: 24 Мая, 2021 - 09:00:34
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Май 2021  


Помог: 0 раз(а)




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. }
 
 Top
Vladimir Kheifets
Отправлено: 24 Мая, 2021 - 09:16:48
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




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(м.б. неверно задан поддомен нужного аккаунта)
Удачи!
 
 Top
Alis
Отправлено: 24 Мая, 2021 - 09:21:54
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Май 2021  


Помог: 0 раз(а)




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.
Поддомен задан верно, просто для форума я его заменила на звездочки.
 
 Top
Vladimir Kheifets
Отправлено: 24 Мая, 2021 - 10:38:54
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




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'?
 
 Top
Alis
Отправлено: 24 Мая, 2021 - 10:47:58
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Май 2021  


Помог: 0 раз(а)




Vladimir Kheifets пишет:

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


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



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




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

Значит token система не акцептирует.
Попробуйте проверить $data['expires_in'] м.б. token устрел и нужно повторить первый запрос, если это возможно.
p.s.Вообще-то, если Вы сами выбрали amoCRM, то может быть стоит от неё отказаться
из-за отсутствия тех поддержки.

(Отредактировано автором: 24 Мая, 2021 - 13:11:07)

 
 Top
Alis
Отправлено: 24 Мая, 2021 - 15:20:28
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Май 2021  


Помог: 0 раз(а)




Vladimir Kheifets пишет:
Попробуйте проверить $data['expires_in'] м.б. token устрел и нужно повторить первый запрос, если это возможно.

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

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

Увы. Не я.
 
 Top
Vladimir Kheifets
Отправлено: 24 Мая, 2021 - 15:33:13
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Alis пишет:
Vladimir Kheifets пишет:
Попробуйте проверить $data['expires_in'] м.б. token устрел и нужно повторить первый запрос, если это возможно.

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

Возможно, что int(86400) означает 24часа x 60 мин x 60 сек = 86400 т.е. token был актуален один день. Когда был сделан первый запрос с сохранением данных?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB