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

Q_BASIC

Хранитель порядка
Регистрация
30 Ноя 2013
Сообщения
516
Реакции
1.240
Приветствую,

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

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

Что не так?
Код:
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 тот же самый, что и при получении временного токена.

Доки: Для просмотра ссылки Войди или Зарегистрируйся
 
Приветствую,

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

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

Что не так?
Код:
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 тот же самый, что и при получении временного токена.

Доки: Для просмотра ссылки Войди или Зарегистрируйся
1. Для чего вы это делаете?
2. Код меняете на токен? Не заметил запроса.

Скачайте например Для просмотра ссылки Войди или Зарегистрируйся
Там я всё просто и хорошо реализовал. +в сети 100500 готовых классов и функций для работы с вашей задачей.
Для какой-то cms делаете?
 
1. Для чего вы это делаете?
2. Код меняете на токен? Не заметил запроса.

Скачайте например Для просмотра ссылки Войди или Зарегистрируйся
Там я всё просто и хорошо реализовал. +в сети 100500 готовых классов и функций для работы с вашей задачей.
Для какой-то cms делаете?
Надо получать историю счета.

Там OAuth2.

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

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

Запрос в спойлере.
 
Смотрим хелп для токена - Для просмотра ссылки Войди или Зарегистрируйся
invalid_request прилетает при не верных или не достаточных данных.
Из параметров запроса у вас вроде бы всё есть, правда еще в зависимости от настроек может требоваться client_secret - быть может он пропущен.

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

PS теоретически мог бы посоветовать почти оффициальный php SDK Для просмотра ссылки Войди или Зарегистрируйся но у меня сейчас один скрипт через неё работает и библиотекой я не доволен.
 
У меня нормально работает либа от nixsolutions, единственное нужно костылить некоторые моменты, но по стабильности нет замечаний
 
Назад
Сверху