xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Модуль Commerce Yandex.Money P2P — оплата заказов с помощью Яндекc.Деньги

Опубликовано в

Описание

Модуль Commerce Yandex.Money P2P добавляет в Drupal Commerce новый способ оплаты с помощью Яндекс.Деньги.

Модуль использует Яндекс.Деньги API и работает по схеме p2p (перевод с кошелька на кошелёк). Эта схема подходит для небольших магазинов и не требует заключения договора с яндексом, однако кошельки между которыми происходит перевод должны быть идентифицированы.

Комиссия при переводе составляет 0.5%, но не менее 1 копейки. Комиссия взимается либо с владельца магазина (покупатель будет оплачивать сумму указанную в заказе, но на кошелёк будет приходить на 0.5% меньше), либо с покупателя (покупатель будет оплачивать сумму указанную в заказе + 0.5%, и на кошелёк будет приходить нужная сумма).

Установка и настройки

Установка стандартная — распаковать в sites/all/modules, включить.

Дальше идём на страницу https://sp-money.yandex.ru/myservices/new.xml и регистрируем новое приложение:

Форма регистрации нового приложения в Яндекс.Деньги

Название вашего приложения — название магазина.
Адрес вашего сайта — URL магазина.
Redirect URI — URL магазина + commerce/yandex-money/authorization.
Использовать проверку подлинности приложения — Нет

После регистрации выдадут Идентификатор приложения (Client ID).

Переходим на страницу способа оплаты Yandex.Money (admin/commerce/config/payment-methods/manage/commerce_payment_commerce_yandex_money) и открываем действие Enable payment method: Yandex.Money.

В поле Client ID прописываем выданный идентификатор приложения, а в Purse number номер кошелька, на который будут приходит деньги. Сохраняем.

Profit.

Демо.

Написанное актуально для Commerce Yandex.Money 7.x-1.x-dev
Похожие записи

Комментарии RSS

Можно сделать без использования API и пугающего экрана для покупателя.
Если интересно, могу рассказать как.

Ну, Вячеслав Сергеевич, сказали А, говорите Б ;)

В качестве потенциального импрувмента модуля: можно токен получать не каждый раз при покупке, а сохранять его для пользователя и когда он повторно придет раз в магазин (если придет), не показывать ему больше запрос прав.

у нас сейчас есть так называемые кнопки и формы:
https://money.yandex.ru/embed/quickpay/shop.xml и
https://money.yandex.ru/embed/quickpay/small.xml

в модуле можно использовать не сами формы, разумеется, а их параметры.

описание можно посмотреть тут http://yadi.sk/d/SMh5GIF17d_C

Вячеслав Сергеевич, ничего себе, а мы думали, Яндекс такое не разрешает :) здесь и с карты можно будет оплачивать, на сколько я понимаю

Платёж идёт также через p2p транзакцию, а для них платёж с карты пока не возможен, но в целом, для организации разовых платежей это гораздо удобнее, чем реализация API, как мне кажется.
API больше подходит для организации подписок или когда пользователь в одном и том же магазине совершает покупки по 10 раз на дню. Например внутриигровая валюта, предметы. Хотя как геймер я этого не одобряю =)

Платёж идёт также через p2p транзакцию, а для них платёж с карты пока не возможен

тогда я зря обрадовалась.

и пугающего экрана для покупателя.

какой экран пугающий?) все привыкли, что нужно подтвердить перевод на странице яндекс.денег

сравним:
это через API http://yadi.sk/d/E4mEoOQT7i2m
это через правильно настроенные параметры формы http://yadi.sk/d/mOptj5aV7i1G

В качестве потенциального импрувмента модуля: можно токен получать не каждый раз при покупке, а сохранять его для пользователя и когда он повторно придет раз в магазин (если придет), не показывать ему больше запрос прав.

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

у нас сейчас есть так называемые кнопки и формы:
https://money.yandex.ru/embed/quickpay/shop.xml и
https://money.yandex.ru/embed/quickpay/small.xml

в модуле можно использовать не сами формы, разумеется, а их параметры.

здесь проблема в том, что уведомлений о платежах через формы нет

здесь проблема в том, что уведомлений о платежах через формы нет

конечно же есть и описано в документе, который я приложил:

2.5 Получение информации о поступлении платежа
Для получения информации о входящем платеже необходимо подключить и настроить http-уведомления. В рамках сервиса http-уведомлений вы сможете получать данные о сумме платежа и значения поля label, что поможет идентифицировать платёж.

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

данный вывод сделан на основании того, что http-уведомления отсылаются на адрес 1 сервера?

да

можно сделать релей, который указать в качестве приёмщика хттп-уведомлений и он будет разбирать какое уведомление в какой магазин отправить, а разбирать он будет по параметру label. например первые 2 цифры параметра можно отдать под идентификатор магазина.
01ххххххх в магазин 1
02ххххххх в магазин 2
где ххххххх это номер заказа

кстати, сейчас в процессе платежа через платёжные формы у пользователя на нашей стороне можно запросить контактные данные. вот вопрос - насколько это актуально для магазинов? или в большинстве случаев контактные данные запрашиваются на сайте самого магазина и эта функциональность не нужна?

для Commerce не актуально

для Commerce не актуально

Понятно, спасибо.

а как Вам решение с привязкой нескольких магазинов к 1 кошельку через разбор label?

мне кажется это костыль) но если кому-нибудь будет нужна оплата именно через форму, а не api, то сделаю

а часто бывает нужда к 1 счёту несколько магазинов привязывать? в каких случаях?
кстати, чтобы запрос доступа по токену через API не выглядел таким страшным, необходимо использовать проверку подлинности сервиса http://api.yandex.ru/money/doc/dg/tasks/register-client.xml

мне кажется это костыль)

однозначно

чтобы запрос доступа по токену через API не выглядел таким страшным, необходимо использовать проверку подлинности сервиса http://api.yandex.ru/money/doc/dg/tasks/register-client.xml

и на сколько он будет «нестрашным»?
это можно наверно прикрутить, что думаешь xandeadx?

кстати, вывесили документацию в клуб http://clubs.ya.ru/moneyapi/replies.xml?item_no=1624, чтобы всё по официальному :)

А для Ubercart не планируется модуль аналогичный?

нет

Нужно еще иметь ввиду, что при смене доменного имени, а иногда почему-то при переезде на другой хостинг, нужно будет переподключать кошелек, иначе Яндекс при переходе сообщит об ошибке. Пустяк, конечно, но пугает не хило)

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

При установке модуля Commerce Yandex.Money требуются дополнительные модули:Commerce и Commerce Payment. Не могу никак их найти для друпала 7. Может кто-нибудь поможет.

На демо-сайте тоже не получается осуществить платеж. После ввода платежного пароля перенаправляет обратно к checkout и показывает вот это: http://fotki.yandex.ru/users/vsgladyshev/view/807724/

Итог: Elizete при создании приложения поставила галку "Использовать проверку подлинности приложения" вот тут https://sp-money.yandex.ru/myservices/new.xml и был выдан client_secret
Модуль Commerce Yandex.Money по словам Elizete не использует.
В результате к нам приходил запрос без client_secret от приложения, для которого при создании был запрошен client_secret. Соответственно мы этот запрос отбивали.
Решение:
Если в модуле действительно не предусмотрено поле под ввод client_secret, то нужно перевыпустить приложение, но уже с не нажатой галкой "Использовать проверку подлинности приложения". Если соответствующее поле в модуле есть, то нужно заполнить его. Client_secret можно узнать в настройках приложения: Управление кошельком-Мои приложения-Настроить

Если в модуле действительно не предусмотрено поле под ввод client_secret, то нужно перевыпустить приложение, но уже с не нажатой галкой "Использовать проверку подлинности приложения".

Вячеслав что именно скрывается под операцией "перевыпустить приложение", как и где чуть более в деталях? Когда добавлял приложение то изначально галку выставил, потом пробовал ее обезГалить но такой возможности интерфейс яндекса. денег в настройках приложения не предоставлял. Так же добавленное приложение нет возможности удалить. Че делать?

Создайте новое приложение БЕЗ этой галки! Перенастройте способ оплаты (admin/commerce/config/payment-methods/manage/commerce_payment_commerce_yandex_money)

Создайте новое приложение БЕЗ этой галки! Перенастройте способ оплаты (admin/commerce/config/payment-methods/manage/commerce_payment_commerce_yandex_money)

та пробовал уже так конечно... но все тот же результат.
Че то закешилось не чей то стороне - надо продебагить и посмотреть параметры запроса
Хочется почистить приложения... удалить их, но почему то такой возможности нет.
Че писать в сапорт просьбу на удаление приложений?

Первое приложение зарегистрировала с галкой - закономерный отказ в доступе. Затем еще несколько без галки - все равно отказ в доступе. Спустя несколько дней зарегистрировала новое без галки, на все тот же кошелек - и платеж прошел. *разводит руками*

Хочется почистить приложения... удалить их, но почему то такой возможности нет.

Вот да, очень пригодилась бы возможность удалить ненужные приложения.

xandeadx, спасибо за модуль!
Вячеслав, спасибо за помощь!

Спустя несколько дней зарегистрировала новое без галки

Ну вот... у меня как раз несколько дней прошло, мож и у меня наконец "разведет руками" и сработает :)

Однако это настораживает... когда причина неСтабильности в тумане. Седня не работает, завтра заработал... а после завтра иди гадай.

Всем спасибо за коммы :)))

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

Ндя... в конечном итоге конечно сам яндекс сапорт это лажа, так как порой разговаривать не с кем.
"invalid_request" это нонсенс - что нельзя прямо сказать по какой причине и на каком именно параметре запрос отлоняется? Отсылают к разработчику, без никакой абсолютно конкретной инфы и в результате разработчику ничего не остается сказать как пингнуть в ответ "общайтесь с яндекс.сапорт" :)

Насчет "обгаливания" и "обезгаливания" тут уже говорил: Перерегистрация мож сработает, мож нет...это тож от яндекса зависит и непонятно почему приложение добавленное незя если не удалить то хотя бы отключить?
Опыт показывает что если у тебя к кошелю привязанны несколько приложений и одно из них облажилось хоть раз в запросе, ввиду неправельных настроек то остальные НЭ ПАШУТ. Это так сказать опытным путем выведенно.
Пока не создал новый акаунт и зарегил там приложение - одно единное как береза в поле, то модуль работать не начал. Во дела, а ежли у тебя несколько магазинов на разных платформах, то для каждого создавай акаунт в яндексе.... с его спец. приложением? :)

и последнее... GlobalRedirect.

Redirect URI — URL магазина + commerce/yandex-money/authorization

если версия Комерца руссифицированна и модуль GlobalRedirect активизирован и есть проблемы типо "invalid_request" то советую в регистрации приложения попробовать след:
Redirect URI — URL магазина + ru/commerce/yandex-money/authorization

яндексу спасибо конечно что он есть и за то что обязуется ответить в течение 30 дней. Эка тормоз :)

xandeadx, спасибо за модуль!

Итог: Elizete при создании приложения поставила галку "Использовать проверку подлинности приложения"......
Решение:
Если в модуле действительно не предусмотрено поле под ввод client_secret, то нужно перевыпустить приложение, но уже с не нажатой галкой "Использовать проверку подлинности приложения". Если соответствующее поле в модуле есть, то нужно заполнить его. Client_secret можно узнать в настройках приложения: Управление кошельком-Мои приложения-Настроить

Нет. При сценарии с "галочкой", параметр client_secret предъявляется на стадии генерации токена, в то время как яндекс отклоняет запрос на стадии авторизации. Опытным путем вписав в код модуля сгенерированный яндексом client_secret не дало положительного результата. Ответ был тот же - invalid_request.
П.С. где то в другом месте прочитал умную инфу что чаще всего причина отклонения авторизации скрытая под "invalid_request" является не сопоставимость параметра redirect_uri ... ну а про GlobalRedirect уже написал выше

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

хотелось бы также, чтобы модуль поддерживал client_secret. с ним надёжнее всё-таки.

Перестал работать перевод. Переводит на страницу оплаты хорошо, после ввода платежного пароля появляется страница с ошибками This XML file does not appear to have any style information associated with it. The document tree is shown below. Снизу идёт громадная страница с кодом. Это временное явление на Яндексе или это связано с самим кошельком, непонятно?

пока непонятно

Вы бы не могли подтвердить, что выдаётся ошибка?

проверил на демо-сайте, ошибка была

Ясно, значит, действительно что-то не так, сталкивались ли с подобной ошибкой раньше? Просто начал использовать данный модуль буквально около 2 недель, поэтому пока что имею мало опыта с ним.

Снова заработало ) Спасибо за комментарии, а то было совсем непонятно, что же происходило.

кстати, Яндекс реализовал возможность указания урла возврата в случае успеха

@Гладышев Вячеслав Сергеевич, помогите с вопросом по api, задавал здесь - http://clubs.ya.ru/moneyapi/replies.xml?item_no=3902 но два месяца не могу пройти премодерацию, если надо, то могу продублировать по почте

@xandeadx Я в Я.Деньгах уже не работаю, как раз месяца 2, но помочь попробую - попросил, чтобы пост открыли и вышли с Вами на связь.

@Гладышев Вячеслав Сергеевич, спасибо большое!

Здравствуйте,
Возможно ли создать аналогичный модуль (или добавить функционал к этому), чтобы было возможно с банковских карт принимать платежи?

только через яндекс кассу

Насколько понял, есть api и для этого случая, также видел сайты, где физические лица принимают платежи через карты https://tech.yandex.ru/money/doc/dg/reference/request-external-payment-d...

Здравствуйте,
Получается, что всё же через api нельзя реализовать перевод с банковских карт на ЯндексДеньги без ЯндексКассы? Есть вопрос, а возможно ли через универсальную форму https://money.yandex.ru/embed/quickpay/shop.xml разработать модуль, который возвращает параметры об успешном поступлении средств и чтобы товар был продан на сайте конкретно этому пользователю? Вроде бы можно, если правильно понимаю? https://tech.yandex.ru/money/doc/dg/reference/notification-p2p-incoming-...

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

Не подскажете, может быть возможно как-то связать универсальную форму с Commerce?

не в курсе

Здравствуйте,
Есть ли у Вас возможность заняться разработкой подобного модуля? (за отдельную плату)

Деньги с карт может принимать и физлицо на счет в Я.Деньгах. Для этого есть соответствующие инструменты money.yandex.ru/embed/smallshop/

Есть ли у Вас возможность заняться разработкой подобного модуля?

зачем если всё уже разработано?

Что зачем? Был задан вопрос: как принимать с карт. Вы ответили, что нужно по договору подключаться. на самом деле не нужно.

@Гладышев Вячеслав Сергеевич, комментарий не вам

Да, ступил чего то ;) с Новым годом!

Как понимаю, там только универсальная форма, а чтобы покупать товары через Commerce и чтобы можно было платить через кредитные карты в автоматическом режиме, такого нету? Если есть, можно ссылку на модуль? Не мог такой найти. Все относятся либо к ЯндексКассе (юр.лицо или ИП) или только возможность перевода на Яндекс кошелёк.

т.е. с Яндекс кошелька на Яндекс кошелёк

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

Оу, кому нужна оплата картам, сами Яндексом уже реализован модуль https://github.com/yandex-money/yandex-money-cms-drupal

Не могу найти. А как сделать, чтобы комиссию платил покупатель?

Планируется ли порт на Drupal 8 / Commerce 2?

В данный момент нет.

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании