Получение токена Яндекс.Деньги

Тема в разделе "PHP", создана пользователем Q_BASIC, 31 июл 2016.

Модераторы: latteo
  1. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    482
    Симпатии:
    1.184
    Приветствую,

    Возникла проблема при получении конечного постоянного токена.

    Получаю временный, сразу делаю запрос к яндексу, со всеми параметрами, получаю ошибку.

    Что не так?
    Код:
    URL: https://money.yandex.ru/oauth/token
    Options:
            Option CURLOPT_URL setted to https://money.yandex.ru/oauth/token
            Option CURLOPT_RETURNTRANSFER setted to 1
            Option CURLOPT_FOLLOWLOCATION setted to 0
            Option CURLOPT_USERAGENT setted to Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36
            Option CURLOPT_HEADERFUNCTION setted to (callback) this::set_headers()
            Option CURLOPT_POST setted to 1
            Option CURLOPT_POSTFIELDS setted to
        Array
        (
            [code] => 8D9B2674DD17BFE7889A2A236014506A795B285E6B6714C1660748C846AB960530F008F5E5FD638478E73EB53568913466B68DE3355B81FFC69F815790467EA81D3F52B986B3D7566C2E3276675C19DE555D92A2E8A0C615D8FA4382885AD8C0897B4121F8A55253084AF04C04DEC6547CAA6931259E85EFB463351DAC4F8F
            [client_id] => A021743C087926212E7C3154E6E3C0D2FCFDDB4EABB60996F9C070D641ED7
            [grant_type] => authorization_code
            [redirect_uri] => http://site.com/admin/yandex/step
        )
    
    
    
    
    Info:
    Array
    (
        [url] => https://money.yandex.ru/oauth/token
        [content_type] => application/json; charset=utf-8
        [http_code] => 200
        [header_size] => 764
        [request_size] => 309
        [filetime] => -1
        [ssl_verify_result] => 0
        [redirect_count] => 0
        [total_time] => 0.116718
        [namelookup_time] => 0.000777
        [connect_time] => 0.008899
        [pretransfer_time] => 0.044942
        [size_upload] => 816
        [size_download] => 27
        [speed_download] => 231
        [speed_upload] => 6991
        [download_content_length] => 27
        [upload_content_length] => 816
        [starttransfer_time] => 0.054672
        [redirect_time] => 0
        [redirect_url] =>
        [primary_ip] => 109.235.165.142
        [certinfo] => Array
            (
            )
    
        [primary_port] => 443
        [local_ip] => 5.101.157.137
        [local_port] => 33753
    )
    
    Headers:
    HTTP/1.1 100 Continue
    
    HTTP/1.1 200 OK
    Date: Sun, 31 Jul 2016 17:29:49 GMT
    Content-Type: application/json; charset=utf-8
    Content-Length: 27
    Connection: keep-alive
    Keep-Alive: timeout=120
    Vary: Accept-Encoding
    Set-Cookie: yandexuid=65446172146996189; Domain=.yandex.ru; Path=/; Expires=Fri, 31 Jul 2026 17:29:49 GMT
    Set-Cookie: ys=ymrefl.FF004B691C072; path=/; domain=.yandex.ru
    Cache-Control: no-store, must-revalidate, max-age=0
    Pragma: no-cache
    Set-Cookie: TS01dd1456=01f3111baf598a0140ffa5285a67d4507f2e4cd36bc04526cd3da58c10fcf0cdbae206f5; Path=/
    Set-Cookie: TS01aa9569=01f3111baf4130524d2c5a006a4e2b0fe294dcfef4de9ad351bb7436e3bfae96cfe55b6c26b2c3dc1a1ef234fd354447fadd3dd5830819ff82099f87c88061635a220fe; path=/; domain=.yandex.ru
    
    
    Response:
    {"error":"invalid_request"}
    

    redirect_uri тот же самый, что и при получении временного токена.

    Доки: https://tech.yandex.ru/money/doc/dg/concepts/About-docpage/
     
    dana77 нравится это.
  2. ZiX

    ZiX Коддинг, Парсинг

    Регистр.:
    9 июл 2011
    Сообщения:
    1.377
    Симпатии:
    584
    1. Для чего вы это делаете?
    2. Код меняете на токен? Не заметил запроса.

    Скачайте например https://www.nulled-mirror.com/threads/260782/
    Там я всё просто и хорошо реализовал. +в сети 100500 готовых классов и функций для работы с вашей задачей.
    Для какой-то cms делаете?
     
    Q_BASIC нравится это.
  3. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    482
    Симпатии:
    1.184
    Надо получать историю счета.

    Там OAuth2.

    1. Даем пользователю страницу с разрешением доступа.
    2. Он разрешает доступ и его перенаправляет к нам с временным токеном.
    3. Сервер, в течении 1 минуты должен с помощью этого токена получить постоянный токен. (отдельный запрос от сервера к яндексу)

    Это сделано, чтобы токен знал только яндекс и непосредственно сайт. И не пользователь, ни какие третье лицо не знали.

    Запрос в спойлере.
     
    dana77 нравится это.
  4. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.611
    Симпатии:
    1.539
    Смотрим хелп для токена - https://tech.yandex.ru/money/doc/dg/reference/obtain-access-token-docpage/
    invalid_request прилетает при не верных или не достаточных данных.
    Из параметров запроса у вас вроде бы всё есть, правда еще в зависимости от настроек может требоваться client_secret - быть может он пропущен.

    На практике часто ловил invalid_request из-за не правильного типа контента: ошибка с кодировкой или заголовками.
    Попробуй принудительно выставить через header "Content-Type: application/x-www-form-urlencoded"
    Попробуй принудительно отсылать client_secret пусть даже пустой.
    Заверни на отладочный прокси и посмотри что именно уходит к яндексу.

    PS теоретически мог бы посоветовать почти оффициальный php SDK https://github.com/nixsolutions/yandex-php-library но у меня сейчас один скрипт через неё работает и библиотекой я не доволен.
     
    Q_BASIC нравится это.
  5. f483796

    f483796 Постоялец

    Регистр.:
    24 фев 2015
    Сообщения:
    49
    Симпатии:
    2
    У меня нормально работает либа от nixsolutions, единственное нужно костылить некоторые моменты, но по стабильности нет замечаний
     
    Q_BASIC нравится это.