Ошибка при генерации токена в 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 ответов

  • 1
    info@ravencode.ru Разработчик 23 августа 2015 06:29 #

    Читай внимательнее:

    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>


    • +1
      ITFrogs ITFrogs Эксперт Разработчик 23 августа 2015 07:06 #

      А это здесь причем?

      code мы уже получили, теперь обращаемся за access_token. Мы должны передать code, получить токен. Я спрашиваю зачем просить code в post?

      • +2
        info@ravencode.ru info@ravencode.ru Разработчик 23 августа 2015 07:16 #

        Потому что так безопаснее, важные данные вообще редко когда GET'ом передаются. Если хочешь более глубокого понимания, то почитай спецификацию по OAuth 2.

        • +1
          ITFrogs ITFrogs Эксперт Разработчик 23 августа 2015 07:27 #

          Все соцсети принимают code через GET, а вебасисту так безопаснее.

          Конечно это их дело, но, на мой взгляд, они усложнили задачу. Используя get, легче разобраться.

          Собственно я разобрался, больше вопросов нет. Но и решения нет. Те, кто будет разбираться после меня, наткнутся на те же грабли.

          • +1
            info@ravencode.ru info@ravencode.ru Разработчик 23 августа 2015 07:56 #

            Конечно плохо что они явно этот момент не указали, но почему нет решения не понял - разве сложно передать данные POST'ом ?

            • +1
              ITFrogs ITFrogs Эксперт Разработчик 23 августа 2015 08:39 #

              Нет. Не сложно. Но становится сложнее тестировать.

              И то, что в доке вообще не указано, что надо передавать code - это само по себе ошибка. Не каждый будет ковыряться в системных классах.

            • +1
              ITFrogs ITFrogs Эксперт Разработчик 23 августа 2015 11:52 #

              Кстати, а не так уж и просто. Хотел получить токен при помощи file_get_contents(), а он конвертирует все & в &

              Вебасист & не понимает. Или мой браузер не понимает. А curl не хочется для такой простой задачи применять.

  • 1
    ITFrogs Эксперт Разработчик 23 августа 2015 09:33 #

    Этот топик нужно переименовать в "Ошибки документации по работе с 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

    Мы просто получаем токен, и никуда не перенаправляемся.

    • +1
      info@ravencode.ru info@ravencode.ru Разработчик 23 августа 2015 10:39 #

      Мы просто получаем токен, и никуда не перенаправляемся

      В доках написано перенаправление только в случае ошибки

      • +1
        ITFrogs ITFrogs Эксперт Разработчик 23 августа 2015 11:46 #

        Странно. Получили еррор, обработали его, перешли сами куда надо или не перешли..

        • +1
          info@ravencode.ru info@ravencode.ru Разработчик 23 августа 2015 12:07 #

          Обычное дело - практически все модули оплаты имеют схожий принцип.

          • +1
            ITFrogs ITFrogs Эксперт Разработчик 23 августа 2015 12:13 #

            подскажите как решить проблему с & amp; в file_get_contents()

            • +1
              info@ravencode.ru info@ravencode.ru Разработчик 23 августа 2015 12:38 #

              а htmlspecialchars_decode не срабатывает?

              • +1
                ITFrogs ITFrogs Эксперт Разработчик 23 августа 2015 13:35 #

                Не срабатывает. Надоело мучаться, сделал через curl. Заодно и выяснил что все, кроме формата требуется передавать через post.

                Возможно дело в xdebug. Он иногда мешает работе с контентом на девелоперских серверах.

                • +1
                  info@ravencode.ru info@ravencode.ru Разработчик 23 августа 2015 14:08 #

                  Curl конечно лучше, но на некоторых бюджетных хостах недоступен (

                  Я rfc спецификации хреново помню поэтому обычно перебираю urldecode \ rawurldecode \ base64_decode

                  • 0
                    ITFrogs ITFrogs Эксперт Разработчик 23 августа 2015 14:23 #

                    Хрен с ним. Прописал curl в requirements.php. Все равно плагин распространяется бесплатно. Врядли я получу претензию насчет того, что чел купил плагин, а он не работает :)

                    • +1
                      info@ravencode.ru info@ravencode.ru Разработчик 23 августа 2015 14:58 #

                      А что за софтина будет? Кстати curl уже прописан у инсталлера т.ч. можно не указывать.

                      • +1
                        ITFrogs ITFrogs Эксперт Разработчик 23 августа 2015 15:06 #

                        Полезная инфа. Спасибо.

                        Заметки о клиенте

                        https://www.webasyst.ru/store/plugin/shop/customer...

                        Хочу добавить работу со сторонними базами клиентов.

                        что-то тут ссылки у меня никак не вставляются :(


                        • +1
                          info@ravencode.ru info@ravencode.ru Разработчик 23 августа 2015 15:31 #

                          Те базы покупателей что я встречал требуют разместить у себя на сайте баннер, так что вместо этих api можно сделать в плагине фронтенд контроллер с отображением этих баннеров и соответствующей инфы.

                          • +1
                            ITFrogs ITFrogs Эксперт Разработчик 23 августа 2015 15:39 #

                            Так вот же я и делаю сервер, чтобы там размещать всякие баннеры и прочую фигню. Юзеры плагина будут запрашивать данные у сервера, а он будет перезапрашивать эти данные по базам. И волки целы и овцы сыты и пастуху вечная память.

                            • +1
                              info@ravencode.ru info@ravencode.ru Разработчик 23 августа 2015 19:52 #

                              Такой вариант будет медленнее, да и зачем свой хост лишний раз загружать? Проще сделать вариант с доп.страницей и блокировать её для поисковиков (robots.txt)

                              • +1
                                ITFrogs ITFrogs Эксперт Разработчик 24 августа 2015 06:16 #

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

                                Антон, если не сложно, свяжитесь со мной через covoxx@gmail.com

                                Есть пара вопросов не для всеобщего обозрения.

  • 1
    ITFrogs Эксперт Разработчик 23 августа 2015 09:51 #

    Вот еще в доке ошибка:

    <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, как описано в доке. И, если формат не задан явно, то, по умолчанию токена мы не получим.

  • 0
    Музыченко Александр Викторович 24 августа 2015 05:42 # Решение

    Топик надо переименовать в "научите меня php, я не умею пользовать гуглом"
    При всём уважении...

    • 0
      ITFrogs ITFrogs Эксперт Разработчик 24 августа 2015 06:05 #

      Накосячили в доке и отправляете в гугл? Лучше поменьше хамите, и побольше работайте.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите