Плагин "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 комментариев
В России принимать и выводить со своего аккаунта в PayPal проблемно, через PayPro никаких проблем нет.
И можно ли добавить кошелек wmb (белорусские рубли)?
нужно сделать по аналогии в UAH, добавить новый тип валюты и прописать в методе GetAvailablePaymentType
Есть еще вопрос: после удачного платежа осуществляется переход на ...payment/wm/success/… где по идее (смотрю в шаблоны плагина) должно выводиться «Платеж успешно проведен. Номер платежа: 3», но почему-то выводится пустая страница.
Смотрю на страницу файербагом: вижу, что не подключаются текстовки (див payment_content и заголовок выводятся пустыми). На странице fail — тоже самое. Не подскажете в чем здесь может быть проблема?
Нужно заменить на
При этом платеж по плагину Advertisement проходит (появляется заявка на утверждение), как я понимаю, проблема в плагине Advertisement?
но мне это толком ничего не говорит, кроме того, что произошла ошибка при оплате
Не планируете ли вы расширение перечня платежных систем?
Многим пригодится наверняка.
Дальше интереснее
В логах вашего модуля: [Payment error: 49 '112843720'] — при проверке уведомления о платеже.
[Payment error: 54 '112843720'] — при проверке успешного проведения платежа.
[Payment error: 59 '112843720'] — при проверке отказа от платежа.
Вроде бы InvId передается и модуль его видит, но почему тогда вылазит ошибка в логах?
В настройках магазина везде стоят POST запросы.
не помню как дела с тестированием в робокассе, но, например, в webmoney можно указать тестовый режим и производить оплату с сайта — деньги списываться с кошелька не будут, а проводки будут выполняться. У робокассы должно быть что-то подробное.
1. Параметры, передаваемые на Result Url (OutSum, InvId, SignatureValue)
2. Происходит опрос /payment/robox/success/
3. Происходит опрос /payment/robox/fail/
Ошибки в логах при всех трех запросах, камнем преткновения становится — InvId, из-за него модуль не производи проверку остальных параметров, а сразу пишет ошибку. Хотя он прекрасно его получает из POST запроса…
Я правильно понял?