Яндекс.Деньги. Управление счетами из 1С

Опубликовал Ivan Khorkov (vano-ekt) в раздел Программирование - Практика программирования

Пример использования API Яндекс.Денег в 1С. В публикации используются http-сервисы для получения токена OAuth 2.0 авторизации.

upd. 2015-08-20

Для 8.3.6 качайте конфигурацию ym_8_3_6.cf. В ней исключен общий модуль работы с JSON, вызовы методов заменены на нативные.

API Яндекс.Денег — это инструмент, который позволяет использовать практически все функции этого сервиса.

Что можно делать с помощью API:

  • принимать платежи — и магазинам, и частным пользователям. Списывать деньги можно с любой банковской карты или из кошелька;
  • получать информацию о пользователях — проверять баланс, историю и детали операций; 
  • получать HTTP-уведомления — для автоматической обработки переводов;
  • реализовать безакцептные платежи. По умолчанию — из кошелька пользователя, по договору — с банковской карты.

Конфигурация

Конфигурация позволяет хранить данные о счетах в сервисе Яндекс.Деньги, проходить авторизацию приложения для каждого счета. Настроена работа пары методов API - просмотр информации о состоянии счета пользователя и просмотр истории операций.

Мысль о создании механизма управления кошельками Яндекс.Денег из 1С  посещала меня года два назад . Единственное, что сдерживало это сделать - процедура получения access_token с элементами "костылей", например, при помощи скрипта на php.

При помощи http-сервисов в платформе 8.3 процедуру получения токена  можно полностью выполнить средствами 1С

Регистрация приложения

Для работы с сервисом необходимо иметь учетную запись в Яндекс и номер счета в Яндекс.Деньги. Регистрация по ссылке

https://money.yandex.ru/

После регистрации счета вы получаете доступ к операциям  - пополнять счет,  производить оплату товаров и услуг, принимать платежи и переводы.

Для сбора средств, получения оплаты ваших за ваши услуги/товары существуют удобные инструменты - формы, фреймы, кнопки и т.д.

https://money.yandex.ru/embed/quickpay/small.xml

https://money.yandex.ru/embed/quickpay/shop.xml

Помимо этого у Яндекс.Денег существует интерфейс программирования приложений(API)

Чтобы приступить к использованию API зарегистрируем новое приложение по этой ссылке

Вводим СМС для входа

На странице регистрации приложения указываем

  • Название приложения (по  вашему усмотрению)
  • Адрес вашего сайта (URL или IP веб-сервера, где будет  опубликована БД 1С)
  • Редирект URI
  • Использовать проверку подлиности приложения (для большей безопасности  наша БД использует client_secret)

Шаблон Редирект URI  (для совместимости с нашей системой на 1С) - http://mysite.ru/pay/hs/ym/НомерКошелька/ , где

  • mysite.ru - адрес сервера
  • pay - имя публикации
  • hs - служебная часть адреса, указывающая на работу hs 1c
  • ym - имя http-сервиса в 1С
  • НомерКошелька - номер счета Яндекс.Денег

При настройке своих приложений вам потребуется указать адрес используемого веб-сервера и номер счета. Если публикуете базу под другим названием, то замените имя публикации pay на выбранное вами. Остальные части Редирект URI оставляйте как есть.

Нажимаем "Подтвердить". Оказываемся на форме ввода СМС, снова нажимаем  "Подтвердить", на указанный при регистрации в Яндекс мобильный телефон приходит СМС, указываем код СМС и заканчиваем регистрацию.

По окончании процедуры регистрации нам выдаются

  • Идентификатор приложения
  • OAuth2 client_secret

Сохраняем Номер кошелька,  значения Редирект URI,  Идентификатор приложения,  client_secret . Они потребуются для получения постоянного токена в дальнейшем, который понадобиться для доступа к API

Настройка 1С

Для работы потребуется платформа 1С:Предприятие 8.3 (конфигурация разрабатывалась на релизе 8.3.5.1119)

Чтобы получить access_token мы должны предварительно настроить веб-сервер и опубликовать на нем http-сервис ЯндексДеньги.

Загружаем базу из архива ym-is.dt. Публикуем на веб-сервере

Вводим в справочник Кошельки новый элемент

Для запуска процедуры получения access_token вызываем обработку "Авторизация приложения"

Указываем кошелек, и жмем кнопку "Отправить запрос на авторизацию"

При этом на клиенте откроется веб-страница с  запросом доступа приложения.

После подтверждения доступа происходит редирект на адрес нашего http-сервиса, и при успехе в соответствующий элемент справочника Кошельки записывается реквизит access_token, а на экране появляется сообщение о получении токена.

Срок действия токена на текущий момент составляет 3 года. По истечении этого срока необходимо будет повторно пройти процедуру его получения

Получив  access_token , можно обращаться к методам API.

Примечание. Переход на Redirect-URI после подтверждения доступа приложения происходит редиректом, а токен передается в заголовке запроса. Это означает, что веб-сервер не обязан  быть виден извне.  Он может быть внутренним и даже локальным.

Работа с API

Обработка "Работа с кошельком" демонстрирует работу с методами API account-info и operation-history.

Подробное описание этих  и других  методов можно найти в документации по ссылке ниже.

Разработка

Технически работа с  программным интерфейсом сервиса Яндекс.Деньги выглядит как обмен http-пакетами, клиент отправляет запрос с параметрами.  Полученный ответ  содержит JSON-документ. Отправка/получение пакетов происходит по защищенному соединению(ssl). Идентификация клиента обеспечивается передачей токена в заголовке  запроса.

В БД 1С из примера можно хранить несколько учетных записей (счетов). После ввода регистрационных данных  по каждому необходимо запустить процедуру авторизации для получения токена. При этом пользователю необходимо подтвердить права доступа на сайте Яндекс.Денег. После этого происходит передача в hs 1С временного кода авторизации(code, срок действия менее минуты, только для получения токена). Процедура hs , используя временный код, идентификатор приложения и секретное слово (client_secret)  тут же запрашивает постоянный код (access_token, срок действия 3 года, для работы с API),

Токен сохраняется в элементе справочника.

В шаблоне http-сервиса содержится параметр {НомерКошелька}, поэтому один сервис может обслуживать несколько счетов. При новой регистрации приложения Редирект URI должен оканчиваться на номер счета. Это позволит http-сервису определить любой счет и сохранить для него токен.

В общем модуле уже реализована заготовка и пример работы с методами AP. Для добавления  новых методов потребуется просто передать их названия и параметры в функцию, которая возвратит ответ в виде Соответствия.

 Ссылки:

Документация к API Яндекс.Деньги



UPD 

Из Заметок из зазеркалья стало ясно, что платформу скоро научат формату JSON, поэтому общий модуль JSON можно будет выпилить за ненадобностью

UPD

Добавлена версия для Платформы 8.3.6+ (в связи с поддержкой в ней JSON)

Скачать файлы

Наименование Файл Версия Размер
Работа с Яндекс.Деньги
.dt 48,83Kb
10.12.16
40
.dt 48,83Kb 40 Скачать
Работа с Яндекс.Деньги 8.3.6+
.cf 27,72Kb
10.12.16
13
.cf 27,72Kb 13 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Константин Юрин (kostyaomsk) 67 26.09.14 17:45 Сейчас в теме
На первый взгляд тоже интересная вещь для интеграции с вебом.
2. Ivan Khorkov (vano-ekt) 811 26.09.14 23:03 Сейчас в теме
(1) сервис ЯД сейчас позволяет принимать оплату как с кошельков системы, так и с любых карт VISA/MasterCard. Так что сейчас ЯД - весьма удобный способ приема оплаты за товары/услуги.
Для приема платежей достаточно разместить форму на сайте, и в поле "комментарий" проставлять номер договора или заказа. Для покупателей это будет выглядеть как обычная оплата банковской картой, а для продавца - простой механизм приема платежа. При этом комиссия ЯД вполне адекватна - по-моему 0.5% от суммы платежа.
3. forum1c8 (bookodor) 08.10.14 11:04 Сейчас в теме
Обработка -вещь. Наконец-то я прикручу к своему сайту Яндекс-кошелёк.
Инструкция ЯДа не совсем good. А тут как наглядный пример очень помогло.
4. Алексей Белоусов (AllexSoft) 23.10.14 10:38 Сейчас в теме
Отдельное спасибо за оформление и понятность статьи. Плюс однозначно
5. shoy Андрей ais (shoy) 19 30.10.14 10:54 Сейчас в теме
Очень интересно!
А с qiwi можно так же поступить?
6. Ivan Khorkov (vano-ekt) 811 30.10.14 13:21 Сейчас в теме
у них вроде есть рест, но нафиг они нужны: https://ishop.qiwi.com/public/connect.action
7. Андрей Максимов (гыук320) 18 19.01.15 16:06 Сейчас в теме
При авторизации кошелька из базы
после ввода пароля из смс
браузер выдает ошибку

Forbidden
You don't have permission to access /pay/hs/ym/410012811969121/ on this server.

В чем может быть дело подскажите пожалуйста?
8. Ivan Khorkov (vano-ekt) 811 19.01.15 17:42 Сейчас в теме
9. Константин Юрин (kostyaomsk) 67 14.07.15 17:48 Сейчас в теме
Верно заметили, Яндекс.Деньги набирает все большую популярность. Создавал примитивную обработку по сбору квитанций по почте и формированию платежек в УТ 11.1. Сейчас вижу, что API-доступ для подобных задач гораздо мощнее, но и сложнее - один только парсинг электронной почты в HTML повод для исправлений при изменении формата квитанций.