Ошибка при генерации токена в API Есть решение
Читаем доку
https://www.webasyst.ru/developers/docs/api/api-ba...
Your server will make a request for
<code>ACCOUNT_URL/api.php/token?client_id=CLIENT_ID&grant_type=authorization_code&redirect_uri=REDIRECT_URI&format=FORMAT</code>
идем в соответствующий контроллер webasystApiToken.controller.php
Там мы узнаем, что требуется дополнительный параметр code
$code = waRequest::post('code');
Спрашивается зачем здесь post? Если получить code и вставить его в ссылку для получения токена, то мы гарантированно получаем отказ. Нужно get или request.
Или как мы должны отправлять code в post? И зачем?
<code></code>
26 ответов
Читай внимательнее:
Redirect users who wish to authenticate to
<code>http://ACCOUNT_URL/api.php/auth?client_id=CLIENT_I...code&scope=SCOPE&redirect_uri=REDIRECT_URI&format=FORMAT</code>
If a user accepts, they will be redirected back to
<code>REDIRECT_URL?code=CODE</code>
otherwise
<code>REDIRECT_URL?error=access_denied</code>
А это здесь причем?
code мы уже получили, теперь обращаемся за access_token. Мы должны передать code, получить токен. Я спрашиваю зачем просить code в post?
Потому что так безопаснее, важные данные вообще редко когда GET'ом передаются. Если хочешь более глубокого понимания, то почитай спецификацию по OAuth 2.
Все соцсети принимают code через GET, а вебасисту так безопаснее.
Конечно это их дело, но, на мой взгляд, они усложнили задачу. Используя get, легче разобраться.
Собственно я разобрался, больше вопросов нет. Но и решения нет. Те, кто будет разбираться после меня, наткнутся на те же грабли.
Конечно плохо что они явно этот момент не указали, но почему нет решения не понял - разве сложно передать данные POST'ом ?
Нет. Не сложно. Но становится сложнее тестировать.
И то, что в доке вообще не указано, что надо передавать code - это само по себе ошибка. Не каждый будет ковыряться в системных классах.
Кстати, а не так уж и просто. Хотел получить токен при помощи file_get_contents(), а он конвертирует все & в &
Вебасист & не понимает. Или мой браузер не понимает. А curl не хочется для такой простой задачи применять.
Этот топик нужно переименовать в "Ошибки документации по работе с WA API"
Еще одна ошибка помимо того, что не указано, что нужен code
ACCOUNT_URL/api.php/token?client_id=CLIENT_ID&grant_type=authorization_code&redirect_uri=REDIRECT_URI&format=FORMAT
В этом запросе совершенно не нужно &redirect_uri=REDIRECT_URI
Мы просто получаем токен, и никуда не перенаправляемся.
Мы просто получаем токен, и никуда не перенаправляемся
В доках написано перенаправление только в случае ошибки
Странно. Получили еррор, обработали его, перешли сами куда надо или не перешли..
Обычное дело - практически все модули оплаты имеют схожий принцип.
подскажите как решить проблему с & amp; в file_get_contents()
а htmlspecialchars_decode не срабатывает?
Не срабатывает. Надоело мучаться, сделал через curl. Заодно и выяснил что все, кроме формата требуется передавать через post.
Возможно дело в xdebug. Он иногда мешает работе с контентом на девелоперских серверах.
Curl конечно лучше, но на некоторых бюджетных хостах недоступен (
Я rfc спецификации хреново помню поэтому обычно перебираю urldecode \ rawurldecode \ base64_decode
Хрен с ним. Прописал curl в requirements.php. Все равно плагин распространяется бесплатно. Врядли я получу претензию насчет того, что чел купил плагин, а он не работает :)
А что за софтина будет? Кстати curl уже прописан у инсталлера т.ч. можно не указывать.
Полезная инфа. Спасибо.
Заметки о клиенте
https://www.webasyst.ru/store/plugin/shop/customer...
Хочу добавить работу со сторонними базами клиентов.
что-то тут ссылки у меня никак не вставляются :(
Те базы покупателей что я встречал требуют разместить у себя на сайте баннер, так что вместо этих api можно сделать в плагине фронтенд контроллер с отображением этих баннеров и соответствующей инфы.
Так вот же я и делаю сервер, чтобы там размещать всякие баннеры и прочую фигню. Юзеры плагина будут запрашивать данные у сервера, а он будет перезапрашивать эти данные по базам. И волки целы и овцы сыты и пастуху вечная память.
Такой вариант будет медленнее, да и зачем свой хост лишний раз загружать? Проще сделать вариант с доп.страницей и блокировать её для поисковиков (robots.txt)
У меня свои аргументы за то, чтобы делать как я делаю. Тем более, что я делаю это на заказ и не бесплатно.
Антон, если не сложно, свяжитесь со мной через covoxx@gmail.com
Есть пара вопросов не для всеобщего обозрения.
Вот еще в доке ошибка:
<code>ACCOUNT_URL/api.php/auth?client_id=CLIENT_ID&client_name=CLIENT_NAME&response_type=code&scope=SCOPE&redirect_uri=REDIRECT_URI&format=FORMAT</code>
&format=FORMAT в этом запросе совершенно не нужен. А в запросе на получение токена в webasystApiToken.controller.php забыли предусмотреть формат по умолчанию json, как описано в доке. И, если формат не задан явно, то, по умолчанию токена мы не получим.
Формат тут нужен т.к. параметры из этого запроса переадресуются дальше
Топик надо переименовать в "научите меня php, я не умею пользовать гуглом"
При всём уважении...
Накосячили в доке и отправляете в гугл? Лучше поменьше хамите, и побольше работайте.