API Яндекс.Денег API для приложений 19.10.2014
←
→
Транскрипция содержимого страницы
Если ваш браузер не отображает страницу правильно, пожалуйста, читайте содержимое страницы ниже
API Яндекс.Денег API для приложений 19.10.2014
API Яндекс.Денег. API для приложений. Версия 1.8 Дата сборки документа: 19.10.2014. Этот документ является составной частью технической документации Яндекса. Сайт справки к сервисам Яндекса: http://help.yandex.ru © 2008—2014 ООО «ЯНДЕКС». Все права защищены. Предупреждение об исключительных правах Яндексу (а также указанному им правообладателю) принадлежат исключительные права на все результаты интеллектуальной деятельности и приравненные к ним средства индивидуализации, используемые при разработке, поддержке и эксплуатации сервиса API Яндекс.Денег. К таким результатам могут относиться, но не ограничиваясь указанными, программы для ЭВМ, базы данных, изображения, тексты, другие произведения, а также изобретения, полезные модели, товарные знаки, знаки обслуживания, коммерческие обозначения и фирменные наименования. Эти права охраняются в соответствии с Гражданским кодексом РФ и международным правом. Вы можете использовать сервис API Яндекс.Денег или его составные части только в рамках полномочий, предоставленных вам Пользовательским соглашением сервиса API Яндекс.Денег или специального соглашения. Нарушение требований по защите исключительных прав правообладателя влечет за собой дисциплинарную, гражданско-правовую, административную или уголовную ответственность в соответствии с российским законодательством. Контактная информация ООО «ЯНДЕКС» http://www.yandex.ru Тел.: +7 495 739 7000 Email: pr@yandex-team.ru Главный офис: 119021, Россия, г. Москва, ул. Льва Толстого, д. 16
Содержание ............................................................................................................................................................................................................... 4 Авторизация приложения .............................................................................................................................................................. 6 Регистрация приложения .......................................................................................................................................................... 8 Запрос авторизации .................................................................................................................................................................... 8 Получение токена .................................................................................................................................................................... 11 Получение дополнительного токена ...................................................................................................................................... 13 Отзыв токена ............................................................................................................................................................................ 15 Права на выполнение операций .............................................................................................................................................. 16 Описание протокола ...................................................................................................................................................................... 20 Формат запроса ........................................................................................................................................................................ 20 Формат ответа .......................................................................................................................................................................... 21 Типы данных ............................................................................................................................................................................ 22 Информация о счете пользователя ............................................................................................................................................. 24 Метод account-info ................................................................................................................................................................... 24 Метод operation-history ............................................................................................................................................................ 26 Метод operation-details ............................................................................................................................................................. 30 Платежи из кошелька Яндекс.Денег .......................................................................................................................................... 34 Метод request-payment ............................................................................................................................................................. 34 Метод process-payment ............................................................................................................................................................ 41 Метод incoming-transfer-accept ............................................................................................................................................... 47 Метод incoming-transfer-reject ................................................................................................................................................. 48 Платежи с банковских карт без авторизации .......................................................................................................................... 50 Метод instance-id ...................................................................................................................................................................... 54 Метод request-external-payment ............................................................................................................................................... 55 Метод process-external-payment .............................................................................................................................................. 57 Уведомления о событиях .............................................................................................................................................................. 61 Уведомление о входящем переводе ....................................................................................................................................... 61 Предметный указатель .................................................................................................................................................................... 65 API Яндекс.Денег API для приложений
API для приложений 4 API для приложений — это инструмент, который позволяет использовать практически все функции нашего сервиса. Что можно делать с помощью API: • принимать платежи — и магазинам, и частным пользователям. Списывать деньги можно с любой банковской карты или из кошелька; • получать информацию о пользователях — проверять баланс, историю и детали операций; • получать HTTP-уведомления — для автоматической обработки переводов; • реализовать безакцептные платежи. По умолчанию — из кошелька пользователя, по договору — с банковской карты. С чего начать 1. Зарегистрируйте свое приложение в API Яндекс.Денег. 2. Прочитайте документацию 3. Добавьте в приложение новый платежный функционал. Для быстрого старта используйте наши SDK — PHP, Java, Android, ObjC, Python, NodeJS, Ruby, iOS. 4. Начните принимать платежи с банковских карт или из электронных кошельков. О платежах с банковских карт Страница, где пользователь указывает данные карты, находится на нашей стороне — у Яндекс.Денег есть сертификат PCI DSS. Как всё работает: 1. Пользователь выбирает в вашем приложении способ оплаты — банковскую карту. 2. Вы отправляете его на страницу ввода данных (на нашей стороне). В процессе платежа банк может потребовать дополнительное подтверждение (3-D Secure), тогда мы попросим пользователя ввести пароль. 3. После проверки банком вы списываете деньги, пользователь возвращается в приложение и видит страницу с информацией о платеже. О платежах из кошельков Вам нужно только один раз получить у пользователя разрешение на доступ к кошельку (стандартный OAuth). Как это происходит: 1. Приложение запрашивает права, которые вам нужны. Например, проводить регулярные безакцепт- ные платежи. 2. Пользователь попадает на наш сайт и подтверждает доступ для приложения. 3. Готово: можно списывать деньги и запрашивать данные без участия пользователя. API для приложений используют AVITO.ru Mamba Xsolla Фотострана Дзен Мани API Яндекс.Денег API для приложений
API для приложений 5 Остались вопросы? Напишите нам: api@money.yandex.ru API Яндекс.Денег API для приложений
6 Авторизация приложения Чтобы ваше приложение могло работать со счетом пользователя в Яндекс.Деньгах, ему необходимо пройти авторизацию. Протокол OAuth2 позволяет сделать авторизацию безопасной и удобной. При OAuth2-авторизации при- ложению не нужно запрашивать у пользователя его логин и пароль. Вместо этого пользователь выдает приложению разрешение работать со своим счетом в рамках ограничений разрешенных пользователем. Авторизация приложений в Яндекс.Деньгах соответствует спецификациям: • The OAuth 2.0 Authorization Framework • The OAuth 2.0 Authorization Framework: Bearer Token Usage Схема взаимодействия пользователя и приложения с OAuth-сервером Яндекс.Денег представлена на диаграмме: Действия разработчика 1. Разработчик регистрирует свое приложение в Яндекс.Деньгах. Согласно протоколу OAuth2, это фаза Registration Request. Сервис «Яндекс.Деньги» выдает разра- ботчику client_id — идентификатор приложения, тип string. 2. Разработчик встраивает в код приложения полученный client_id, объявляя его константой. Далее приложение распространяется любым удобным способом. В течение жизненного цикла приложения client_id не изменяется. API Яндекс.Денег API для приложений
7 Сценарий авторизации приложения пользователем 1. Пользователь инициирует авторизацию приложения для управления своим счетом. 2. Приложение отправляет запрос Authorization Request на сервер Яндекс.Денег. 3. Яндекс.Деньги перенаправляют пользователя на страницу авторизации. 4. Пользователь вводит свой логин и пароль, просматривает список запрашиваемых прав и подтвер- ждает, либо отклоняет запрос авторизации. 5. Приложение получает ответ Authorization Response в виде HTTP Redirect со временным токеном для получения доступа или кодом ошибки. 6. Приложение, используя полученный временный токен доступа, отправляет запрос на получение токена авторизации (Access Token Request) 7. Ответ содержит токен авторизации (access_token). 8. Приложение сообщает пользователю результат авторизации. Удостоверение подлинности приложения по секретному слову Сервис Яндекс.Денег предоставляет дополнительную возможность удостовериться в том, что токен ав- торизации будет получен именно из вашего приложения. Для этого, при получении токена авторизации (вызов /oauth/token), приложение передает секретное сло- во (client_secret), известное только приложению. Примечание: Защита на основе секретного слова будет эффективна лишь в том случае, если запрос на получение токена авторизации отправляется от сервера приложения, минуя устройство или браузер пользователя. Требования безопасности 1. Все сетевые взаимодействия производятся только по HTTPS. 2. Приложение должно проверять корректность SSL-сертификата сервера и немедленно прекращать сессию в случае неуспеха проверки, чтобы не допустить утечку данных авторизации. 3. Не храните токен авторизации в открытом виде, в том числе в виде cookies. 4. Никогда не используйте токен авторизации в параметрах запросов (GET, POST, и пр.). 5. Секретное слово никогда не должно проходить через устройство или браузер пользователя. 6. Секретное слово не должно использоваться в иных запросах, кроме запроса на получение токена. API Яндекс.Денег API для приложений
8 Регистрация приложения Для регистрации вашего приложения в Яндекс.Деньгах выполните следующие шаги: 1. Перейдите на страницу Регистрация приложения. Для входа потребуется ввести вашу платежную авторизацию. 2. Укажите параметры приложения: description Название вашего приложения, например 'Мобильный магазин'. logo Логотип вашего приложения. application_uri Ссылка на веб-страницу приложения или сайт разработчика. redirect_uri URI для передачи результата авторизации приложения (см. описание redirect_uri в стандар- те The OAuth 2.0 Authorization Protocol). Использовать проверку подлинности приложения Укажите, хотите ли вы использовать секретное слово для проверки подлинности приложения (см. описание client_secret в стандарте The OAuth 2.0 Authorization Framework). 3. Нажмите кнопку Подтвердить. Откроется страница Данные приложения, где будут указаны название вашего приложения, его идентификатор (client_id) и, если выбрана соответствующая опция, сгенерированное се- кретное слово (client_secret). Осторожно! Разработчик приложения не должен открыто публиковать где-либо свой client_id. Утечка client_id может спровоцировать "фишинговые атаки", то есть выпуск приложений или сайтов, получающих токены авторизации от вашего имени. При этом Яндекс.Деньги будут считать что по- лучают запросы от вашего приложения. Противодействовать этому можно при помощи использования секретного слова (client_secret), известного только разработчику приложения. Разработчик приложения должен обеспечить конфиденциальность секретного слова (client_secret). Запрос авторизации Приложение отправляет запрос Authorization Request на сервер Яндекс.Денег, используя браузер опе- рационной системы. Совет: Для отправки запроса рекомендуется использовать метод POST — эквивалент HTML form submit и кодировку UTF-8. Формат запроса: API Яндекс.Денег API для приложений
9 POST /oauth/authorize HTTP/1.1 Host: m.sp-money.yandex.ru (для мобильных устройств) или sp-money.yandex.ru (для остальных устройств) Content-Type: application/x-www-form-urlencoded Content-Length: client_id=&response_type=code &redirect_uri=&scope=&instance_name= Пример параметров запроса: client_id=092763469236489593523464667 response_type=code redirect_uri=https://client.example.com/cb scope=account-info operation-history Пример запроса: POST /oauth/authorize HTTP/1.1 Host: sp-money.yandex.ru Content-Type: application/x-www-form-urlencoded Content-Length: 154 client_id=092763469236489593523464667&response_type=code&redirect_uri=https%3A %2F%2Fclient%2Eexample%2Ecom%2Fcb&scope=account%2Dinfo%20operation%2Dhistory Параметры запроса: Параметр Тип Описание client_id string Идентификатор приложения, полученный при регистрации. response_type string Фиксированное значение: code. redirect_uri string URI, на который OAuth сервер пере- дает результат авторизации. Значение этого параметра при по- символьном сравнении должно быть идентично значению redirect_uri, указанному при ре- гистрации приложения. При сравне- нии не учитываются индивидуаль- ные параметры приложения, кото- рые могут быть добавлены в конец строки URI. scope string Список запрашиваемых прав. Разделитель элементов списка — пробел. Элементы списка чувствительны к регистру. instance_name string Идентификатор экземпляра авторизации в приложении. Необязательный параметр. Позволяет получить несколько авторизаций для одного приложения. Примечание: Запрещается отправлять запрос (открывать страницу) непосредственно из приложения, поскольку по правилам платежной системы логин, пароль и платежный пароль пользователя допускается вводить только на страницах сервиса «Яндекс.Деньги». По запросу авторизации пользователь перенаправляется на страницы авторизации Яндекс.Денег. По- льзователь вводит свой логин и пароль, просматривает список запрашиваемых прав и лимиты на пла- тежи, подтверждает либо отклоняет запрос авторизации приложения. API Яндекс.Денег API для приложений
10 Результат авторизации возвращается как HTTP 302 Redirect. Приложение должно обработать ответ HTTP Redirect. Внимание! Одно приложение может получить только одну авторизацию для одного пользователя. Повторная ав- торизация (с тем же значением параметра client_id) аннулирует выданные ранее разрешения. Существует возможность получить несколько авторизаций для одного пользователя: для этого необхо- димо указать параметр instance_name. Повторная авторизация в этом случае учитывает оба пара- метра — client_id и instance_name. В качестве instance_name рекомендуется использовать уникальный идентификатор пользователя в при- ложении, например его логин. Параметры перенаправления с результатом авторизации: Параметр Тип Описание code string Временный токен (authorization code), подлежащий обмену на постоянный токен авторизации. Присутствует если пользователь подтвердил авторизацию приложения. error string Код ошибки. Присутствует в случае ошибки или отказа в авторизации пользователем. error_description string Дополнительное текстовое пояснение ошибки. Возможные ошибки: Значение поля error Описание Поведение сервиса invalid_request В запросе отсутствуют обязательные Страница с текстом ошибки. параметры, либо параметры имеют некорректные или недопустимые значения. invalid_scope Параметр scope отсутствует, либо Страница с текстом ошибки. имеет некорректное значение или имеет логические противоречия. unauthorized_client Неверное значение параметра Страница с текстом ошибки. client_id, либо приложение не имеет право запрашивать авторизацию (например его client_id заблокирован Яндекс.Деньгами). access_denied Пользователь отклонил запрос Перенаправление в приложение авторизации приложения. с кодом ошибки. Пример ответа Яндекс.Денег при успешной авторизации: HTTP/1.1 302 Found Location: https://client.example.com/cb?code=i1WsRn1uB1ehfbb37 Ответ Яндекс.Денег при отказе в авторизации: HTTP/1.1 302 Found Location: https://client.example.com/cb?error=access_denied API Яндекс.Денег API для приложений
11 Примечание: Временный токен (значение поля code ответа) подлежит немедленному обмену на токен авторизации. Время действия этого токена мало (менее 1 минуты). Приложение должно получить и обработать ответ сервера Яндекс.Денег и немедленно самостоятельно обменять временный токен на токен авторизации. Если приложению не удалось получить ответ сервера, временный токен утерян, либо срок его действия истек, необходимо повторить процедуру авторизации. См. также Получение токена Отзыв токена Авторизация приложения Регистрация приложения Получение токена Если авторизация завершилась успехом, приложение должно немедленно обменять временный токен на токен авторизации. Для этого необходимо отправить запрос, содержащий временный токен, на OAuth- сервер Яндекс.Денег. Запрос должен быть отправлен методом POST. Формат запроса: POST /oauth/token HTTP/1.1 Host: m.sp-money.yandex.ru (для мобильных устройств) или sp-money.yandex.ru (для остальных устройств) Content-Type: application/x-www-form-urlencoded Content-Length: code=&client_id=&grant_type=authorization_code&redirect_uri= Пример запроса без проверки подлинности: POST /oauth/token HTTP/1.1 Host: sp-money.yandex.ru Content-Type: application/x-www-form-urlencoded Content-Length: 145 code=i1WsRn1uB1ehfbb37&client_id=092763469236489593523464667&grant_type=authoriz ation_code&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb Пример запроса с проверкой подлинности по секретному слову: POST /oauth/token HTTP/1.1 Host: sp-money.yandex.ru Content-Type: application/x-www-form-urlencoded Content-Length: 179 code=i1WsRn1uB1ehfbb37&client_id=092763469236489593523464667&grant_type=authoriz ation_code&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom %2Fcb&client_secret=my_secret_word Параметры запроса: Параметр Тип Описание code string Временный токен (authorization code). API Яндекс.Денег API для приложений
12 client_id string Идентификатор приложения, полученный при регистрации. grant_type string Фиксированное значение: authorization_code. redirect_uri string URI, на который OAuth-сервер пере- дает результат авторизации. Значе- ние этого параметра при посимволь- ном сравнении должно быть иден- тично значению redirect_uri, ранее переданному в запросе authorize. client_secret string Секретное слово для проверки под- линности приложения. Указывается, если сервис зарегистрирован с про- веркой подлинности. В ответ на запрос сервер Яндекс.Денег возвращает токен авторизации (access_token), который явл- яется симметричным секретом приложения и дает право проводить операции со счетом пользователя. Токен возвращается в виде JSON-документа, который (в зависимости от результата обмена) может со- держать одно из следующих полей: Параметр Тип Описание access_token string Токен авторизации. Присутствует в случае успеха. error string Код ошибки. Присутствует в случае ошибки. Возможные ошибки: Значение поля error Описание invalid_request Обязательные параметры запроса отсутствуют или имеют некорректные или недопустимые значения. unauthorized_client Неверное значение параметра client_id или client_secret, либо приложение не имеет права запрашивать авторизацию (например, его client_id заблокирован Яндекс.Деньгами). invalid_grant В выдаче access_token отказано. Временный токен не выдавался Яндекс.Деньгами, либо просрочен, либо по этому временному токену уже выдан access_token (повторный запрос токена авторизации с тем же временным токеном). Пример ответа при успешном обмене временного токена: HTTP/1.1 200 OK Content-Type: application/json Content-Length: 96 Cache-Control: no-store { "access_token":"SlAV32hkhjhkkefhkjGHGSDcbndbjhfSHDFhjdbfvbdsjfhbvfsjhjdfbvdfhjhj khkwfervnrjKG" } Пример ответа при ошибке: HTTP/1.1 400 Bad Request Content-Type: application/json Content-Length: 25 Cache-Control: no-store { "error":"invalid_grant" } API Яндекс.Денег API для приложений
13 Совет: Использовать временный токен можно только один раз. Если приложению не удалось получить ответ сервера за время жизни временного токена, процедуру авторизации следует повторить сначала. Примечание: Полученный access_token является симметричным секретом авторизации, поэтому разработчик приложения должен предпринять меры по его защите: хранить токен в зашифрованном виде, предоста- влять доступ к нему только после авторизации пользователя в приложении. Например, токен авториза- ции может быть зашифрован с помощью алгоритма 3DES, где ключ шифрования — 4-х значный ПИН код. Внимание! Срок действия токена 3 года. По истечении этого времени, токен автоматически аннулируется. См. также Запрос авторизации Отзыв токена Авторизация приложения Регистрация приложения Получение дополнительного токена Однажды получив разрешение (токен) на выполнение различных операций, вы можете получить до- полнительные токены на одно или несколько разрешений из scope исходного токена. Это может понадобится, если вы, например, шифруете основной токен на пароль или пин-код в прило- жении, а вам нужно в виджете отображать баланс пользователя. Для доступа к сервису через виджет вам понадобится токен, который не будет зашифрован на пароль или пин-код, но при этом не будет содержать платежных разрешений. В этом случае вы можете получить дополнительный токен к вашему основному с подмножеством раз- решений исходного токена. Например, у вас есть access_token со scope = account-info payment-p2p. Вы можете сде- лать запрос дополнительного токена со scope = account-info. Таким образом можно будет по- лучать aux_token и в нашем примере баланс пользователя без дополнительных действий по расшиф- ровке основного токена. Параметры запроса: Параметр Тип Описание scope string Список запрашиваемых прав. Разде- литель элементов списка — пробел. Элементы списка чувствительны к регистру. Допустимо указывать следующие права: account-info, operation-history и operation-details. В ответ на запрос сервер Яндекс.Денег возвращает дополнительный токен (aux_token). API Яндекс.Денег API для приложений
14 Токен возвращается в виде JSON-документа, который (в зависимости от результата обмена) может со- держать одно из следующих полей: Параметр Тип Описание aux_token string Дополнительный токен авторизации, присутствует в случае успеха. error string Код ошибки. Присутствует в случае ошибки. Формат запроса: POST /api/token-aux HTTP/1.1 Host: money.yandex.ru (или m.money.yandex.ru) Accept-Encoding: gzip Accept-Language: Authorization: Bearer Content-Type: application/x-www-form-urlencoded Content-Length: scope= Пример запроса: POST /api/token-aux HTTP/1.1 Host: money.yandex.ru Accept-Encoding: gzip Accept-Language: ru Authorization: Bearer 41001417296262.39C64C899C736595ED47820C1EF245A2508A092F99FEFCB44728465618F8F06A2 1329ACB5E33BB69222CBF334F50CD21D9D04285FE60161B55 Content-Type: application/x-www-form-urlencoded Content-Length: 31 scope=account-info Пример ответа при успехе: HTTP/1.1 200 OK Content-Type: application/json Content-Length: 589 Cache-Control: no-store {"aux_token":"aux. 41001417296262.39C64C899C736595ED47820C1EF245A2508A092F99FEFCB44728465618F8F06A2 1329ACB5E33BB69222CBF334F50CD21D9D04285FE60161B55 CC461FBC5E7F75673B4B57211581B83C6B572F9E999EF180A45AEB42A0E2B730D88A503DA2098579 4589633FC88EB7B28835603EAA46C3A0F5E4F072F3C30C1F03325C654B583F"} Пример ответа при ошибке: HTTP/1.1 400 Bad Request Content-Type: application/json Content-Length: 25 Cache-Control: no-store {"error":"invalid_grant"} Возможные ошибки: Значение поля error Описание invalid_scope Параметр scope отсутствует, либо имеет некорректное значение или имеет логические противоречия. invalid_grant Неверное значение параметра client_id или client_secret, либо приложение не имеет права запрашивать авторизацию (например, его client_id заблокирован Яндекс.Деньгами). API Яндекс.Денег API для приложений
15 invalid_grant В выдаче aux_token отказано. Возможные причины: • основной токен недействителен • запрашивается дополнительный токен по дополнительному токену См. также Запрос авторизации Отзыв токена Получение токена Авторизация приложения Регистрация приложения Отзыв токена Приложение может отозвать полученный токен авторизации. При этом все права, выданные этому то- кену, будут отменены. Для этого отправьте запрос на OAuth-сервер Яндекс.Денег, имеющий HTTP-заголовок Authorization, содержащий отзываемый токен. Методу revoke можно указать один из токенов: основной или дополнительный. Если указан основной токен — отзывается основной токен и все дополнительные. Если указан дополнительный токен — от- зывается только дополнительный токен. Если указан дополнительный токен и параметр запроса revoke-all=true то отзывается основной токен и все дополнительные. Параметры запроса: Параметр Тип Описание revoke-all boolean Отозвать основной токен и все до- полнительные. Необязательный параметр, по умол- чанию false. Запрос должен быть отправлен методом POST. Пример запроса: POST /api/revoke HTTP/1.1 Host: money.yandex.ru Authorization: Bearer 01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF Content-Length: 0 В ответ сервер Яндекс.Денег возвращает один из следующих HTTP-кодов: HTTP-код ответа Описание 200 OK Токен успешно отозван. 400 Bad Request Формат HTTP-запроса не соответствует протоколу. Воз- можные причины: запрос невозможно разобрать, HTTP- заголовок Authorization отсутствует, либо имеет некорректное значение. 401 Unauthorized Указанный токен не существует, либо уже отозван. Пример успешного ответа: HTTP/1.1 200 OK Content-Length: 0 Пример ответа при ошибке: API Яндекс.Денег API для приложений
16 HTTP/1.1 400 Bad Request Content-Length: 0 См. также Запрос авторизации Получение токена Получение дополнительного токена Авторизация приложения Регистрация приложения Права на выполнение операций При вызове операций протокола необходимо передавать токен авторизации, который обладает соответ- ствующими правами. Список прав запрашивается как значение параметра scope вызова authorize OAuth2-авторизации приложения пользователем, права перечисляются через пробел. Список возможных прав: Название права Описание account-info Получение информации о состоянии счета, см. метод account-info. operation-history Просмотр истории операций, см. метод operation- history. operation-details Просмотр деталей операции, см. метод operation-details. incoming-transfers Прием/отмена входящих переводов с кодом протекции и до востребования. payment Возможность осуществлять платежи в конкретный магазин или переводить средства на конкретный счет пользователя, см. методы request-payment и process- payment. payment-shop Возможность осуществлять платежи во все доступные для API магазины, см. методы request-payment и process- payment. payment-p2p Возможность переводить средства на любые счета, номера телефонов, email-адреса других пользователей, см. методы request-payment и process-payment money-source Доступные методы проведения платежа, см. методы request-payment и process-payment. Подробнее см. Право money-source. Ограничение: В рамках scope нельзя одновременно использовать: • право payment-p2p и права payment.to-account • право payment-shop и права payment.to-pattern API Яндекс.Денег API для приложений
17 Совет: Некоторые права требуют указания строковых значений, которые могут содержать символы, нарушаю- щие синтаксис scope. Для таких символов следует применять backslash escaping согласно формату JSON. Например: \" \\ Ограничения, применяемые к правам К выдаваемым правам могут применяться ограничения. Ограничения задаются следующим образом: имя_права.destination.limit Ограничения, накладываемые на права: Условие destination (получатель платежа) Применяется к правам: payment. В качестве значения допустимо указывать только одно из следующих условий: • to-pattern(patternId) — ограничивает возможность провести платеж только по заданному patternId; • to-account(to) — ограничивает возможность перевода средств только на счет определенного пользователя. В качестве идентификатора получателя допустимо указывать номер счета, номер привязанного к счету получателя мобильного телефона или email-адрес пользователя. Параметры ограничения: Параметр Описание to Идентификатор счета получателя перевода, номер счета, привязанный к счету телефон или email. Обязательный параметр. Совет: Номер мобильного телефона как идентификатор получателя перевода. Если пользователь, получатель перевода, имеет привязанный к счету мобильный телефон, то в каче- стве идентификатора получателя платежа можно вместо номера счета использовать номер привязан- ного мобильного телефона. Указанный номер телефона должен соответствовать формату ITU-T E.164 Numbering plan of the international telephone service Для России: полный номер, начинающийся с 7 без знака '+'. Например: 79219990099 Совет: Формат email. Возможные варианты формата email-адреса описаны в википедии. Помните, что в email-адресе могут быть символы, нарушающие синтаксис scope, например двойная кавычка. Для таких символов следует применять backslash escaping согласно формату JSON. Например: \" \ \ Пример для определения получателя перевода по номеру счета: .to-account("41001XXXXXXXX") API Яндекс.Денег API для приложений
18 Пример для определения получателя перевода по номеру привязанного мобильного телефона: .to-account("79219990099") Пример определения получателя перевода по email: .to-account("username@yandex.ru") Условие limit (лимит платежа) limit(duration,sum) Применяется к правам: payment, payment-shop, payment-p2p. Ограничение указывается последним. Формат: • limit(duration,sum) — Ограничение общей суммы платежей за период времени. • limit(,sum) — Делегирование права выполнить одноразовый платеж на фиксированную сумму. Параметры: Параметр Значение duration Период времени, в сутках. Если параметр отсутствует, то платеж по данному разрешению может быть проведен только один раз. sum Общая сумма платежей за период duration в валюте счета пользователя. Совет: Условие limit можно использовать для делегирования одноразовых платежей. Срок жизни разрешения равен сроку жизни токена. Пользователь не может изменить сумму платежа. Ограничение: В рамках одного scope разрешается указывать либо только платежи за период, либо только одноразовые платежи. Ограничение: Если в scope указано требование одноразового платежа, то, совместно с правом payment, допускается указывать только права money-source и account-info, остальные права запрещены. Ограничение: Вне зависимости от значений запрошенных лимитов, к платежам могут применяться ограничения, установленные сервисом «Яндекс.Деньги» для различных видов транзакций. Пример: ограничение платежа 100 руб 50 коп. в сутки, пользователь может изменять сумму. .limit(1,100.50) Пример: одноразовый платеж на 1000 руб, пользователь не может изменить сумму. .limit(,1000) API Яндекс.Денег API для приложений
19 Значение по умолчанию: limit(1,3000) — 3000 рублей в сутки, пользователь может изменять сумму. Право money-source Указание сервису «Яндекс.Деньги», какие методы платежа поддерживаются приложением. Формат: money-source(список_методов_платежа) Запрашиваемый метод проведения платежа: • wallet — платежи со счета в Яндекс.Деньгах; • card — с привязанной к счету банковской карты пользователя. По умолчанию: wallet. Ограничение: Использование банковской карты невозможно для перевода средств на счета других пользователей. Пример для платежа с привязанной банковской карты и со счета: money-source("wallet","card") Пример для платежа только с привязанной банковской карты: money-source("card") Пример для платежа только со счета: money-source("wallet") Примеры значений параметра scope Разрешен просмотр истории платежей: account-info operation-history operation-details Разрешен просмотр остатка на счете и платежи в магазин 123 на сумму не более 1000 рублей в неделю: account-info payment.to-pattern("123").limit(7,1000) Разрешены переводы на счет XXXX, но не более 500 рублей в две недели: payment.to-account("XXXX").limit(14,500) Разрешен одноразовый перевод на счет, которому привязан телефон ZZZ, на сумму 500 рублей: payment.to-account("ZZZ","phone").limit(,500) Разрешены платежи с привязанной банковской карты в магазин 123 на сумму 1000 рублей в неделю: payment.to-pattern("123").limit(7,1000) money-source("wallet","card") API Яндекс.Денег API для приложений
20 Описание протокола • Формат запроса • Формат ответа • Права на выполнение операций • Типы данных Формат запроса Запросы осуществляются посредством протокола HTTP 1.1 с использованием SSL (HTTPS), на адрес: https://money.yandex.ru/api/ Авторизация запросов осуществляется согласно стандарту The OAuth 2.0 Authorization Framework: Bearer Token Usage. HTTP запросы должны содержать заголовок: Authorization: Bearer Примечание: Указанный токен должен иметь права на исполнение запрашиваемого метода с заданным набором параметров. Требования безопасности: 1. Все сетевые взаимодействия производятся только по HTTPS. 2. Приложение должно проверять корректность SSL-сертификата сервера. Если SSL-сертификат не прошел проверку, необходимо немедленно прекратить сессию, чтобы не допустить утечку данных авторизации. 3. Не храните токен авторизации в открытом виде, в том числе в виде cookies. 4. Никогда не используйте токен авторизации в параметрах запросов (GET, POST, и пр.). Для передачи параметров запроса используется следующий формат: • каждый параметр указывается парой ключ/значение в виде параметра POST-запроса; • MIME-тип: application/x-www-form-urlencoded; • кодировка символов: UTF-8. Пример запроса: API Яндекс.Денег API для приложений
21 POST /api/request-payment HTTP/1.1 Host: money.yandex.ru Content-Type: application/x-www-form-urlencoded Authorization: Bearer 01234567890ABCDEF01234567890 param1=value1¶m2=value2¶m3=value3 См. также Формат ответа Права на выполнение операций Типы данных Формат ответа Ответ сервиса представляет собой JSON-документ в кодировке UTF-8, см. The application/json Media Type for JavaScript Object Notation (JSON) и официальный сайт JSON. Содержимое документа зависит от результата выполнения запроса. Пример ответа в случае успешного выполнения: HTTP/1.1 200 OK Content-Type: application/json Content-Length: 51 Expires: Thu, 01 Dec 1994 16:00:00 GMT Cache-Control: no-cache { "param1":"value1", "param2":"value2" } В ответе платежных методов присутствуют HTTP-заголовки, запрещающие прокси-серверам и локаль- ным браузерам кэшировать содержимое. Совет: В ответе могут также присутствовать поля, не описанные в настоящем протоколе. Приложению следует их игнорировать. При отказе в авторизации сервер отвечает HTTP кодом 4xx. Возможные причины отказа: • запрос невозможно разобрать; • в запросе отсутствует HTTP-заголовок Authorization; • в заголовке Authorization указан несуществующий, некорректный или просроченный токен; • запрошена операция, на которую у токена нет прав. Ответ содержит заголовок WWW-Authenticate (согласно стандарту The OAuth 2.0 Authorization Framework: Bearer Token Usage). При отказе в авторизации запроса в ответе присутствуют следующие поля: Поле Описание error Код причины отказа в авторизации. error_description Дополнительное текстовое описание причины отказа. Коды причины отказа в авторизации: HTTP-код ответа Значение поля error Описание API Яндекс.Денег API для приложений
22 400 invalid_request Формат HTTP запроса не соответствует протоколу. Запрос невозможно разобрать, либо заголовок Authorization отсутствует, либо имеет некорректное значение. 401 invalid_token Указан несуществующий, просроченный, или отозванный токен. 403 insufficient_scope Запрошена операция, на которую у токена нет прав. Пример ответа при отсутствующем заголовке: HTTP/1.1 400 Bad Request WWW-Authenticate: Bearer error="invalid_request" Пример ответа при просроченном токене: HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer error="invalid_token", error_description="The access token has expired" Пример ответа в случае отсутствия у токена необходимых прав: HTTP/1.1 403 Forbidden WWW-Authenticate: Bearer error="insufficient_scope", error_description="Платеж запрещен параметрами авторизации приложения" В случае общей технической ошибки сервер возвращает HTTP код 500 Internal Server Error. Приложению следует повторить запрос через некоторое время с теми же параметрами. См. также Формат запроса Права на выполнение операций Типы данных Типы данных Тип данных протокола Соответствующий JSON-тип Описание string string Текстовая строка в кодировке UTF-8. amount number Сумма. Число с фиксированной точкой, две цифры после точки. boolean boolean Логическое значение: true, false. int number 32-битное знаковое целое число. long number 64-битное знаковое целое число. object object Вложенный объект JSON. array array Массив объектов JSON. datetime string Временная метка согласно стандарту RFC3339 в следующем формате YYYY-MM-DDThh:mm:ss.fZZZZZ (см. расшифровку ниже). API Яндекс.Денег API для приложений
23 Расшифровка формата datetime: • YYYY — год, всегда 4 цифры; • MM — месяц, всегда 2 цифры (01=Январь, и т. д.); • DD — день месяца, точно 2 цифры (от 01 до 31); • T — латинский символ «T», должен быть в верхнем регистре; • hh — часы, всегда 2 цифры (24-часовой формат, от 00 до 23); • mm — минуты, всегда 2 цифры (от 00 до 59); • ss — секунды, всегда 2 цифры (от 00 до 59); • f — дробная часть секунды (до шести цифр), может отсутствовать, в этом случае следует опускать и точку-разделитель; • ZZZZZ — Описатель временной зоны, обязательный параметр. Может принимать значения: • Z – UTC, символ "Z" должен быть в верхнем регистре; • +hh:mm или -hh:mm – смещение относительно UTC (показывает, что указано локальное время, которое опережает или отстает от UTC на указанное число часов и минут). Пример: 2011-07-01T19:00:00.000+04:00 — 19 часов 1 июля 2011 года, часовой пояс Europe/ Moscow (UTC+04:00). См. также Date and Time on the Internet: Timestamps Формат запроса Формат ответа Права на выполнение операций API Яндекс.Денег API для приложений
24 Информация о счете пользователя • Метод account-info • Метод operation-history • Метод operation-details Метод account-info Описание Получение информации о состоянии счета пользователя. Требуемые права токена: account-info Входные параметры Отсутствуют Возвращает В случае успеха возвращает JSON-документ со следующим содержимым: Параметр Тип Описание account string Номер счета пользователя. balance amount Баланс счета пользователя. currency string Код валюты счета пользователя. Всегда 643 (рубль РФ по стандарту ISO 4217). account_status string Статус пользователя. Возможные значения: • anonymous — анонимный счет • named — именной счет • identified — идентифицированный счет account_type string Тип счета пользователя. Возможные значения: • personal — счет пользователя в Яндекс.Деньгах • professional — профессиональный счет в Яндекс.Деньгах avatar object Ссылка на аватар пользователя. Если аватарка пользователя не установлена, параметр отсутствует. balance_details object Расширенная информация о балансе. По умолчанию этот блок отсутствует. Блок появляется если сейчас или когда либо ранее были: • зачисления в очереди • задолженности • блокировки средств Подробности. cards_linked array Информация о привязанных банковских картах. API Яндекс.Денег API для приложений
25 Параметр Тип Описание Если к счету не привязано ни одной карты то параметр отсутствует. Если к счету привязана хотя бы одна карта, параметр содержит спи- сок данных о привязанных картах. services_additional array Список подключенных дополнительных сервисов: • link_alfabank — если подключена услуга "Связь с банком Альфа-Клик" , установлено значение alfabank в профиле пользователя • link_openbank — если подключена услуга "Связь с банком Открытие" , установлено значение open в профиле пользователя Если ни одной подключенной услуги нет, то параметр отсутствует. Параметры объекта avatar: Параметр Тип Описание url string Ссылка на аватар пользователя. ts datetime Timestamp последнего изменения аватарки. Параметры объекта balance_details: Параметр Тип Описание total amount Общий баланс счета. available amount Сумма доступная для расходных операций. deposition_pending amount Сумма средств стоящих в очереди пополнений. Если зачислений в очереди нет то параметр отсутствует. blocked amount Сумма заблокированных средств по решению исполнительных органов. Если заблокированных средств нет то параметр отсутствует. debt amount Сумма задолженности (отрицательного остатка на счете). Если задолженности нет то параметр отсутствует. Параметры объекта cards_linked: Параметр Тип Описание pan_fragment string Маскированный номер карты. type string Тип карты. Может отсутствовать, если неизвестен. Возможные значения: • VISA • MasterCard • AmericanExpress • JCB Пример запроса: POST /api/account-info HTTP/1.1 Host: money.yandex.ru Authorization: Bearer 01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF Content-Type: application/x-www-form-urlencoded Content-Length: 0 Пример ответа: API Яндекс.Денег API для приложений
26 { "account":"4100123456789", "balance":1000.00, "currency":"643", "account_status":"anonymous", "account_type":"personal", "avatar":{ "url":"http://avatars.yandex.net/get-yamoney-profile/yamoney-profile-30633298/ normal", "ts":"2013-03-13T20:43:00.000+04:00" }, "cards_linked":[ { "pan_fragment":"510000******9999", "type" : "MasterCard" } ], "services_additional":[ "link_alfabank" ] } Метод operation-history Описание Метод позволяет просматривать историю операций (полностью или частично) в постраничном режиме. Записи истории выдаются в обратном хронологическом порядке: от последних к более ранним. Требуемые права токена: operation-history. Входные параметры Параметр Тип Описание type string Перечень типов операций (см. таблицу), которые требуется отобразить. Типы операций перечисляются через пробел. Если параметр отсутствует, выводятся все операции. label string Отбор платежей по значению метки. Выбираются платежи, у которых указано заданное значение параметра label вызова request-payment. from datetime Вывести операции ОТ момента времени (операции более поздние или равные from). Если параметр отсутствует, выводятся все операции. till datetime Вывести операции ДО момента времени (операции более ранние чем till). Если параметр отсутствует, выводятся все операции. start_record string Если параметр присутствует то будут отображены операции, начиная с номера start_record. Операции нумеруются с 0. (см. замечание). records int Количество запрашиваемых записей истории операций. Допустимые значения: от 1 до 100, по умолчанию 30. details boolean Показывать подробные детали операции. По умолчанию false. Для отображения деталей операции требуется наличие права operation-details. Типы операций: Тип Описание deposition Пополнение счета (приход). payment Платежи со счета (расход). API Яндекс.Денег API для приложений
27 Тип Описание incoming-transfers- Непринятые входящие P2P-переводы любого типа. unaccepted Совет: Логика отбора записей истории. Отбор записей истории осуществляется по условиям: • тип операции • метка платежа • интервал времени Все условия аддитивны, каждое условие вносит дополнительное ограничение. Правила выборки данных по интервалу времени: 1. Если заданы оба условия from и till, то отбор записей осуществляется за интервал времени рав- ному или больше from и менее till. 2. Если заданы оба условия from и till, то отбор записей осуществляется за интервал времени рав- ному или больше from и менее till. 3. Если задано только условие till, осуществляется отбор всех записей со временем меньше till. 4. Если оба условия условия from и till отсутствуют, записи выбираются без ограничения по вре- мени. Если история содержит большое количество операций, список операций выдается постранично. По умолчанию выдается первая страница истории. Если есть хотя бы одна последующая страница, то в ответе присутствует параметр next_record, определяющий порядковый номер её первой записи. Чтобы получить следующую страницу, повторите запрос с теми же параметрами, добавив параметр start_record и указав в нем порядковый номер первой записи следующей страницы, полученный ранее из параметра next_record. Чтобы получить большую выборку записей в интервале времени необходимо сформировать запрос с ус- ловиями from и till, получить первую страницу истории, затем формировать запросы последующих страниц истории с теми же значениями параметров from и till, а также параметром start_record, значение которого было получено из параметра next_record ответа предыдущей страницы истории. Возвращает Метод возвращает следующие параметры: Параметр Тип Описание error string Код ошибки. Присутствует при ошибке выполнения запроса. next_record string Порядковый номер первой записи на следующей странице истории операций. Присутствует в случае наличия следующей страницы истории (см. замечание). operations array Список операций. Параметры операции: Параметр Тип Описание operation_id string Идентификатор операции. API Яндекс.Денег API для приложений
28 Параметр Тип Описание status string Статус платежа (перевода). Может принимать следующие значения: • success — платеж завершен успешно; • refused — платеж отвергнут получателем или отменен отправителем; • in_progress — платеж не завершен, перевод не принят получателем или ожидает ввода кода протекции. datetime datetime Дата и время совершения операции. title string Краткое описание операции (название магазина или источник пополнения). pattern_id string Идентификатор шаблона, по которому совершен платеж. Присутствует только для платежей. direction string Направление движения средств. Может принимать значения: • in (приход); • out (расход). amount amount Сумма операции. label string Метка платежа. Присутствует для входящих и исходящих переводов другим пользователям Яндекс.Денег, у которых был указан параметр label вызова request-payment. type string Тип операции. Возможные типы операций: Тип Описание payment-shop Исходящий платеж в магазин outgoing-transfer Исходящий P2P-перевод любого типа deposition Зачисление incoming-transfer Входящий перевод или перевод до востребования. Необходимость вызова incoming-transfer-accept/ incoming-transfer-reject определяется по полю status=in_progress. incoming-transfer-protected Входящий перевод с кодом протекции. Необходимость вызова incoming-transfer-accept/ incoming-transfer-reject определяется по полю status=in_progress. Совет: Если значение входного параметра details установлено в true, в ответе будут также присутствовать выходные параметры операции operation-details. Код ошибки выполнения операции: Код Описание illegal_param_type Неверное значение параметра type. illegal_param_start_record Неверное значение параметра start_record. illegal_param_records Неверное значение параметра records. illegal_param_label Неверное значение параметра label. illegal_param_from Неверное значение параметра from. illegal_param_till Неверное значение параметра till. API Яндекс.Денег API для приложений
29 все прочие значения Техническая ошибка, повторите вызов операции позднее. Примечание: Если история содержит большое количество операций, список операций выдается постранично. По умолчанию выдается первая страница истории. Если есть хотя бы одна последующая страница, то в ответе присутствует параметр next_record, определяющий порядковый номер ее первой записи. Чтобы получить следующую страницу, повторите запрос с теми же параметрами, добавив параметр start_record и указав в нем порядковый номер первой записи следующей страницы, полученный ранее из параметра next_record. Запрос полной истории Пример запроса полной истории: POST /api/operation-history HTTP/1.1 Host: money.yandex.ru Authorization: Bearer 01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF Content-Type: application/x-www-form-urlencoded Content-Length: 9 records=3 Пример запроса последующих страниц истории платежей: POST /api/operation-history HTTP/1.1 Host: money.yandex.ru Authorization: Bearer 01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF Content-Type: application/x-www-form-urlencoded Content-Length: 40 type=payment&records=20&start_record=120 Пример ответа полной истории: { "next_record" : "4", operations : [ { "operation_id" : "1234567", "status" : "success", "pattern_id" : "2904", "direction" : "out", "amount" : 500.00, "datetime" : "2011-07-11T20:43:00.000+03:00", "title" : "Оплата ADSL-доступа компании XXX", "type" : "payment-shop" }, { "operation_id" : "1234568", "status" : "success", "pattern_id" : "2901", "direction" : "out", "amount" : 300.00, "datetime" : "2011-07-10T20:43:00.000+03:00", "title" : "Прямое пополнение счета телефона YYY", "type" : "payment-shop" }, { API Яндекс.Денег API для приложений
30 "operation_id" : "1234569", "status" : "success", "direction" : "in", "amount" : 1000.00, "datetime" : "2011-07-10T20:40:00.000+03:00", "title" : "Банк ZZZ, пополнение", "type" : "deposit" } ] } Пример ответа с подробными деталями операции при платеже в магазин: { "next_record" : "2", operations : [ { "operation_id" : "1234567", "status" : "success", "pattern_id" : "2904", "direction" : "out", "amount" : 500.00, "datetime" : "2011-07-11T20:43:00.000+04:00", "title" : "Оплата ADSL-доступа компании XXX", "details" : "Предоплата услуг ADSL доступа в интернет компании XXX\nНомер лицевого счета абонента: \n1234567/89\nЗачисленная сумма: 500.00\nНомер транзакции: 2000002967767", "type" : "payment-shop" } ] } Пример ответа с подробными деталями операции для исходящего перевода другому пользователю: { "next_record" : "2", operations : [ { "operation_id" : "1234567", "status" : "success", "pattern_id" : "p2p", "direction" : "out", "amount" : 50.25, "datetime" : "2011-07-11T20:43:00.000+04:00", "title" : "Перевод на счет 4100123456789", "recipient" : "4100123456789", "recipient_type" : "account", "message" : "Купите бублики", "comment" : "Перевод пользователю Яндекс.Денег", "codepro" : false, "details" : "Счет получателя:\n4100123456789\nСумма к получению: 50,00 руб.", "type" : "outgoing-transfer" } ] } Пример ответа при неверно заданном параметре: { "error" : "illegal_param_type" } Метод operation-details Описание Позволяет получить детальную информацию об операции из истории. Требуемые права токена: operation-details. API Яндекс.Денег API для приложений
Вы также можете почитать