-
Notifications
You must be signed in to change notification settings - Fork 67
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Получение информации об организациях пользователя #29
base: master
Are you sure you want to change the base?
Conversation
return "http://esia.gosuslugi.ru/{$scope}?org_oid={$orgId}"; | ||
}, $scopes); | ||
|
||
$this->refreshToken($scopes); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А для чего обновлять токен при запросе организации?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Для того, чтобы передать скоуп вида http://esia.gosuslugi.ru/org_inn?org_oid=#ид_организации_который_нам_заранее_не_известен#
этот идентификатор мы получаем только после получения списка организаций. И если мы не обновим токен, то мы не можем запросить инн(например) организации, потому что скоуп org_inn не передан при первом обращении. При обновлении токена, мы передаем новые скоупы, по которум уже сможем получить данные организации.
Как я и написал выше, если идентификатор заранее известен, то можно обойтись и одним запросом, без обновления токена. Но этот случай очень редкий.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Странно, а разве пользователь не должен дать согласие на получение данных из другого скоупа, нежели был изначально запрошен при получение токена? Есть ссылка на документацию где можно почитать об этом?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да, странно. Если передать скоуп вида http://esia.gosuslugi.ru/org_inn?org_oid=123
при первом запросе на получение авторизационного кода, то да, запрос на согласие предоставления инн организации появится. Но org_oid
мы получаем только после того как запросим скоуп usr_org
. Так что тут или еще раз сделать редирект на $portalUrl
, но уже со скоупами организаций. Или вот таким способом.
Документация вот https://digital.gov.ru/ru/activity/directions/13/#section-docs
Методические рекомендации ... Раздел В.3
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да, пробовал. Там возвращаются не все данные, а только этот набор из списка. Другие данные вытащить не получалось.
$orgId = $matches[1]; | ||
|
||
$scopes = array_map(function ($scope) use ($orgId) { | ||
return "http://esia.gosuslugi.ru/{$scope}?org_oid={$orgId}"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут наверно должно было использовано свойство $portalUrl
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Нет, валидный скоуп именно такой, должен начинаться с http://esia.gosuslugi.ru/
Если мы будем передавать $portalUrl
, то на тестовом стенде ЕСИА это не сработает, потому как там $portalUrl
отличается.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Может вынести в константу?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да, можно.
А как лучше назвать, ESIA_URL ?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Можно думаю SCOPE_DOMAIN
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Или SCOPE_URL
Ну и не плохо было бы покрыть тестами методы |
Раньше информацию можно было получить одним запросом. Теперь нужно использовать два запроса. В первом запросе получаем идентификаторы организаций, а во втором уже непосредственно данные. Конечно, если заранее знать идентификатор организации, можно обойтись и одним запросом.
На тестовых аккаунтах работает без ошибок, на боевых пока проверить не смог.