Плагин "Payment"


Представляем бесплатный плагин «Payment» — плагин позволяющий легко и просто интегрировать в другие плагины функционал приема платежей и оплаты товаров.

Поддерживаются платежные системы:
  • Webmoney
  • LiqPay (кредитки)
  • PayPro (PayPal)
  • Робокасса (Яндекс.Деньги и другие системы)


Плагин предназначен именно для разработчиков других плагинов. В комплекте с плагином идет пример использования в виде плагина «Testpay».

Немного о том как использовать.
Создание платежа:
/**
 * Создаем платеж
 * Последний параметр - делать или нет редирект на страницу оплату в случаи успешного создания платежа
 */
$iError = $this->PluginPayment_Payment_MakePayment ( 'bublik', $iNumber, $fSum, PluginPayment_ModulePayment::PAYMENT_CURRENCY_USD, true );
if ($iError !== 0) {
	$this->Message_AddError ( 'При создании платежа возникла ошибка, смотри логи плагина payment', $this->Lang_Get ( 'error' ) );
}


Подключение к функционалу плагина через наследование:
<?php

/**
 * Переопределяем необходимые методы для осуществления платежей
 *
 */
class PluginTestpay_ModulePayment extends PluginTestpay_Inherit_PluginPayment_ModulePayment {
	
	/**
	 * Инициализация модуля
	 */
	public function Init() {
		parent::Init();
		/**
		 * Добавляем новый тип объекта для платежей
		 */
		$this->AddTargetType('bublik');
	}
	
	/**
	 * Метод проверяет валидность объекта платежа
	 * 
	 * @param int $iTargetId	ID объекта платежа
	 * @param int $iCheckType	Тип проверки объекта, указывает на какой стадии проверяется объект, значение констант PluginPayment_ModulePayment::PAYMENT_TARGET_CHECK_*
	 * 
	 * @return bool	Если валиден возвращаем TRUE, иначе FALSE
	 */
	public function CheckTargetBublik($iTargetId,$iCheckType) {
		/**
		 * У нас все бублики правильные и валидные
		 */
		return TRUE;
	}

	/**
	 * Проверка прав на оплату счета, если метода нет, то считаем платеж разрешенным.
	 * Например, в этом методе можно проверять авторизован ли пользователь и разрешать покупку только авторизованным.
	 * 
	 * @param unknown_type $oPayment
	 * @param unknown_type $oTarget
	 * 
	 * @return bool 
	 */
	public function CheckAccessForPaymentTargetBublik($oPayment, $oTarget) {
		/**
		 * Разрешаем платежи всем
		 */
		return true;
	}
	
	/**
	 * Возвращет информации об объекте покупки
	 * 
	 * @param int $iTargetId	ID объекта платежа
	 * 
	 * @return array	Поддерживаются поля: name - название объекта платежа (отображается на странице оформления платежа), payment_description - описание платежа для платежной системы
	 */
	public function GetTargetInfoBublik($iTargetId) {
		return array('name'=>"Бублик номер {$iTargetId}",'payment_description'=>"Оплата бублика номер {$iTargetId}");
	}
	
	/**
	 * Платеж завершился успешно.
	 * Именно в этом методе необходимо вызывать логики по оработке платежа!
	 * 
	 * @param unknown_type $oPayment
	 * @param unknown_type $oTarget
	 */
	public function MakePaymentSuccessTargetBublik($oPayment,$oTarget) {
		/**
		 * Реализация вашей логики после совершения пользователем оплаты
		 * Факт оплаты подтверждается только в этом методе!
		 */
	}
	
	/**
	 * Информирование об успешности платежа в момент редиректа пользователя обратно на сайт.
	 * В этом методе реализовывать логику по обработке платежа НЕ нужно, т.к. он может вообще не отрабоать (например, пользователь не стал переходит обратно на сайт после платежа)
	 * Здесь вы можете сделать редирект на свою страницу информирующую об успешности платежа и каких то дальнейших действиях
	 * По умолчанию показывается стандартная страница с информацией об успешном платеже
	 * 
	 * @param unknown_type $oPayment
	 * @param unknown_type $oTarget
	 */
	public function ProcessPaymentSuccessTargetBublik($oPayment,$oTarget) {
		
	}
	
	/**
	 * Информирование о несостоявшемся платеже в момент редиректа пользователя обратно на сайт.
	 * Здесь вы можете сделать редирект на свою страницу информирующую о несостоявшемся платеже и каких то дальнейших действиях
	 * По умолчанию показывается стандартная страница с ошибкой платежа
	 * 
	 * @param unknown_type $oPayment
	 * @param unknown_type $oTarget
	 */
	public function ProcessPaymentFailTargetBublik($oPayment,$oTarget) {
		
	}
}
?>


Как видно из примера подключение к функционалу происходит путем добавления call-back методов в наследуемый класс.
В конец названия метода подставляется имя типа подключенного объекта платежа, в нашем примере это «Bublik». Всё остальное плагин делает сам.

49 комментариев

avatar
спасибо! отличный плагин!!!
avatar
Огромное вам спасибо за все и за данный плагин в частности.
avatar
а где можно подробнее о приёме через PayPal узнать. на сайте PayPro не нашёл информации. или я не туда смотрю?
avatar
и вообще, насколько я правильно понимаю PayPro — это коммерческий сервис, скорее видимо для компаний. Т.е. другими словами хотелось бы изящное решение приёма через PayPal
avatar
На этой странице www.payproglobal.com/ru/seller_support.aspx есть ссылки на доки.
В России принимать и выводить со своего аккаунта в PayPal проблемно, через PayPro никаких проблем нет.
avatar
Нигде не нашёл про обналичивание из PayPro. Что касается PayPal, то он уже 2-й месяц как умеет принимать для России и ряда других стран СНГ.
avatar
это была утка. есть пруф?
avatar
сначала была утка, а потом всё заработало. зайдите в свой аккаунт и увидите баланс. соб-но платежи на пэйпал приходят — проверяли, получали
avatar
расплачивать со своего акка — без проблем, а вот обналичить только через амеровский банк. пока ещё вопрос не изучен по обналичиванию
avatar
Есть вывод на webmoney, выводят раз в месяц
avatar
отлично! думаю, что это хороший задел для создания новых плагинов. «Кошелек» напрягал своей платностью и закрытостью.
avatar
А почему Яндекс-деньги нельзя напрямую сделать? Для чего Робокассу использовать?
avatar
Ставка была на прием платежей физлицами, Яндекс-Деньги работают только с юрлицами
avatar
Спасибо, исчерпываюше.
avatar
Спасибо! Благодяря нему открываются перспективы для других плагинов основываясь на нем.
avatar
а где это все прописывать, что-бы плагин заработал. С шаблоном социал норм работает?
avatar
сам по себе плагин никак не проявляет себя. Это просто инструмент для создания новых плагинов.
avatar
:(
avatar
плохо, это его самому надо вписывать в систему?
avatar
что вы от данного плагина хотите?
avatar
:)та я просто не внимательно прочел к нему описание, я думал это уже рабочий плагин платежных систем.
avatar
Скажите, а какие адреса вписывать в мерчанте при настройке кошельков (result, success, fail)?
И можно ли добавить кошелек wmb (белорусские рубли)?
avatar
В экшене плагина можно посмотреть все урлы в методе RegisterEvent()
И можно ли добавить кошелек wmb (белорусские рубли)?
нужно сделать по аналогии в UAH, добавить новый тип валюты и прописать в методе GetAvailablePaymentType
avatar
Спасибо, разобрался.

Есть еще вопрос: после удачного платежа осуществляется переход на ...payment/wm/success/… где по идее (смотрю в шаблоны плагина) должно выводиться «Платеж успешно проведен. Номер платежа: 3», но почему-то выводится пустая страница.

Смотрю на страницу файербагом: вижу, что не подключаются текстовки (див payment_content и заголовок выводятся пустыми). На странице fail — тоже самое. Не подскажете в чем здесь может быть проблема?
avatar
Там ошибка в шаблонах.
Нужно заменить
{$aLang.plugin.payment_success}
на
{$aLang.plugin.payment.payment_success}
avatar
На странице ...payment/wm/success/… — «Ошибка при выполнении платежа», копать в сторону плагина работающего с пэйментом (Advertisement)?
avatar
плагин записывает ошибки в логи в /logs/
avatar
Вот что в логах: [2012-04-03 14:29:24][30076][5917][ERROR][Payment error: 19 NULL]
При этом платеж по плагину Advertisement проходит (появляется заявка на утверждение), как я понимаю, проблема в плагине Advertisement?
avatar
расшифровка номеров ошибок в названии констант в файле Payment.class.php
avatar
const PAYMENT_ERROR_WM_SUCCESS_NUMBER=19;
но мне это толком ничего не говорит, кроме того, что произошла ошибка при оплате
avatar
Вопрос снят: в настройках мерчанта необходимо было отметить пункты «Передавать параметры в предварительном запросе» и «Позволять использовать URL, передаваемые в форме».
avatar
Paypal, очень важная и глобальная система оплаты, и надежней всех остальных. Почему автор делает акцент на запутанные платежные системы России, не понимаю!!!
avatar
я сразу извиняюсь, но на мой топик о добавлении ещё одной платежной системы в плагин так никто и не откликнулся. (Qiwi через SOAP, да я знаю что есть прием через робокассу, но их комиссии вгоняют в депрессию)

Не планируете ли вы расширение перечня платежных систем?
avatar
в ближайших планах нет
avatar
Давайте с Яндекс.Кошельком их интегрируем!

Многим пригодится наверняка.
avatar
Для приема платежей по WebMoney должен ли я быть авторизованным продавцом в системе WM, или достаточно формального аттестата?
avatar
Для приема платежей по WebMoney должен ли я быть авторизованным продавцом в системе WM
да
avatar
А персонального аттестата недостаточно или исключительно аттестат продавца нужен? Там же разница только в суммах вроде.
avatar
Ау, ответьте пожалуйста, кто в курсе вопроса?
avatar
Для начала приема платежей в не тестовом режиме Вам осталось получить аттестат продавца в соответствии с инструкцией и посетить страницу

Аттестат продавца является одной из форм персонального аттестата и обладает всеми его возможностями без ограничений.

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

Лимитированный режим позволяет перевести кошелек в сервисе Merchant WebMoney Transfer из тестового в рабочий режим, без регистрации кошельков в каталоге MegaStock и получения аттестата продавца.
Данных лимитов достаточно, чтобы начать использовать сервис в рабочем режиме, посмотреть как он работает на реальных платежах от сторонних пользователей системы, начать принимать небольшие, нерегулярные или некоммерческие платежи, подарки, пожертвования и т.п.
Дальше интереснее
avatar
Спасибо большое, посмотрел, лимитированный режим для меня вполне достаточен пока.
avatar
Тестирую ваш плагин на сайте, активировал только платежную систему от Робокассы, запросы приходят с их тестового сервера. Не знаю как определить, все ли нормально настроено и работает?
В логах вашего модуля: [Payment error: 49 '112843720'] — при проверке уведомления о платеже.
[Payment error: 54 '112843720'] — при проверке успешного проведения платежа.
[Payment error: 59 '112843720'] — при проверке отказа от платежа.

Вроде бы InvId передается и модуль его видит, но почему тогда вылазит ошибка в логах?
В настройках магазина везде стоят POST запросы.
avatar
InvId должен совпадать с id из таблицы в prefix_payment
avatar
Так запросы с тестового сайта Робокассы не заносятся в базу. Проверил сейчас — она пустая.
avatar
плагин может обрабатывать только те запросы, которые сам создает
не помню как дела с тестированием в робокассе, но, например, в webmoney можно указать тестовый режим и производить оплату с сайта — деньги списываться с кошелька не будут, а проводки будут выполняться. У робокассы должно быть что-то подробное.
avatar
У них тестовый сервер, который генерирует запросы трех видов:
1. Параметры, передаваемые на Result Url (OutSum, InvId, SignatureValue)
2. Происходит опрос /payment/robox/success/
3. Происходит опрос /payment/robox/fail/

Ошибки в логах при всех трех запросах, камнем преткновения становится — InvId, из-за него модуль не производи проверку остальных параметров, а сразу пишет ошибку. Хотя он прекрасно его получает из POST запроса…
avatar
Прошу прощения, возможно я затупил. Для проверки работоспособности модуля, требуется дополнительный плагин, например «Кошелек» от extravert. Тогда он будет генерировать записи в базе данных payments и соответственно будет происходит сверка этих данных с тестовым сервером Робокассы.
Я правильно понял?
avatar
В комплекте плагина есть тестовый плагин, который позволяет покупать «бублики». Но еще раз повторю — плагин сможет принять запросы success/fail только если они содержат корректные параметры/данные (данные, которые прописывает плагин в своей БД). У робокассы, помимо тестового сервера, был еще тестовый режим процессинга (уточните об этом у поддержки)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.