Обучающие материалы | Nwicode CMS

Подключение платёжной системы

Модуль для пополнения баланса модуля Wallet через платежную систему.

Функция "Кошелёк" - внутренний баланс пользователя, может быть интегрирована с любой платёжной системой. Пользователи смогут расплачиваться за товары и услуги с внутреннего счёта.

Пример модуля платёжной системы Яндекс.Касса  Github  или RBK.money вы можете посмотреть на Github


Рассмотрим структуру модуля на примере платёжной системы Яндекс.Касса:

Yandex for WALLET module

Модуль для пополнения баланса модуля Wallet через платежную систему Yandex.

/assets/payment_form.phtml - форма для настроек системы, которая выводится в "Кошельке" в секции настройки. В этой форме указываются служебные данные для взаимодействия с платежной системой.

Чтобы "Кошелек" нашел данный модуль, необходимо добавить код данного модуля в таблицу платежных систем "Кошелька" (/resources/db/data/install_code.php):

$datas = [
    [
        'title' => 'Yandex', //Название платежной системы
        'model' => 'WalletYandexPS_Model_PaymentMethodsYandex', //Основной класс модели
        'type' => 'url', //Тип - переход на внешний ресурс, form - ссылка на форму (нереализовано пока)
        'state_name' => 't', //неактивно, но тут планируется название state для перехода в него для совершения оплаты
        'url' => 'walletyandexps/mobile_walletyandex/find', //url откуда брать данные с настройками
        'code' => 'WalletYandexPS', //уникальный код, по которому осуществляется поиск. Должен совпадать с названием папки модуля
    ]
];

Настройки таблицы данного модуля находятся в WalletYandexPS/resources/db/schema/wallet_payment_systems_yandex.php, поля wallet_payment_systems_yandex_id и wallet_id обязательны, остальные поля для служебных данных.

/resources/translations/default/ - там находятся файлы локализации. По умолчанию используется default, но можно и другие локали (ru,en, tr & etc). Фразы, которые должны быть выведены в приложении необходимо так же поместить в mobile.csv.list.

WalletYandexPS/controllers/ контроллеры для работы модуля. AdminController.php для административной части, Mobile/YandexController.php для мобильной части.

С AdminController.php все просто, там получение, обновление и добавление данных в настроечную таблицу.

Mobile/YandexController.php должен содержать метод createformAction() - в данном метода необходимо сформировать ссылку на оплату, и вернуть в такой структуре:

$data['payment_url']=$response->confirmation->confirmation_url;
$data['success']=true;

если платеж создан, либо

$data['success']=false;

если произошла ошибка. Обратите внимание, что при создании платежа создается объект

					$history = new Wallet_Model_PaymentHistory();
					$history
						->setWalletId($wallet->getId())
						->setWalletCustomerId($params['wallet_customer_id'])
						->setSumm($params['amount'])
						->setCode('yandex')
						->setComplete(0)
						->save();

а при получении подтверждения от платежной системы в этот объект дописывается $history->setPaymentUrl($response->confirmation->confirmation_url)->setData('payment_id',$response->id)->save(); либо $history->setComplete(-1)->save(); в случае неудачи. Именно $history->getId() передается в платежную систему для последущей идентификации оплаты при получении калбека с уведомлением об оплате от платежной системы.

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

						$history->setComplete(1)->save();
						$wallet_customer->addTransaction($history->getSumm(),"Yandex - ".__("Deposit funds in the wallet"),'in',0,$wallet_customer->getId());

либо в неусешный статус

$history->setComplete(-1)->save();

При любом результате, идет переадресация на адрес

						$this->_redirect('walletyandexps/mobile_yandex/result', array(
							'value_id' => $params['value_id'],
							'wallet_id' => $params['wallet_id'],
							'wallet_customer_id' => $params['wallet_customer_id'],
							'status' => 1, //но с разным статусом
						));	

Мобильная часть (ionic + angular) находится в /resources/var/apps/modules/walletyandexps/. Обратите внимание на подключения этих файлов в корневом init.php.

walletyandexps/factories/walletyandexps.js - factory для взаимодействия с мобильной и серверной части. Данная factory подключается в контроллере.

/resources/var/apps/modules/walletyandexps/factories/walletyandexps.js - контроллер, отвечающий за мобильную часть. Обратите внимание на подключение factory из предыдущего раздела.

Данный контроллер имеет два state:

App.config(function($stateProvider, HomepageLayoutProvider) {

    $stateProvider.state('walletyandex-payment', {
        url: BASE_PATH+"/walletyandexps/mobile_walletyandex/find/value_id/:value_id/wallet_id/:wallet_id/wallet_customer_id/:wallet_customer_id/amount/:amount",
        controller: 'WalletYandexPSController',
        templateUrl: "modules/walletyandexps/templates/l1/payment.html"
    });
    $stateProvider.state('walletyandex-payment-result', {
        url: BASE_PATH+"/walletyandexps/mobile_yandex/result/value_id/:value_id/wallet_id/:wallet_id/wallet_customer_id/:wallet_customer_id/status/:status",
        controller: 'WalletYandexPSResultController',
        templateUrl: "modules/walletyandexps/templates/l1/payment.html"
    });	

})

Первый state, это контроллер WalletYandexPSController - он имеет адрес /walletyandexps/mobile_walletyandex/find/value_id:value_id/. Метод find в ядре системы является базовым, поэтому этот контроллер считается контроллером по умолчани. Данный контроллер запускает создание платежа (через factory), получает ответ и в зависимости от ответа переадресовывает на URL оплаты, либо обрабатывает ошибку.

Обратите внимание, что контроллер WalletYandexPSResultController своим адресом совпадает с адресом и переданными в него параметрами из редиректа в Mobile/YandexController.php.

То есть, при срабатывании редиректа пользователя из платежной системы к нам на адресс /walletyandexps/mobile_yandex/return, проверяются платеж, совершаются все необходимые с ним действия, после чего происходит редирект на адрес /walletyandexps/mobile_yandex/result, в результате чего запускается AngularJS контроллер мобильной части WalletYandexPSResultController, который закрывает форму в приложении, выводит сообщение об успехе/неудачи и переходит в главное окно.

/resources/var/apps/modules/walletyandexps/templates/l1/payment.html - это шаблон мобильной части. Он совмещен в один, просто показывается разный контент в зависимости от состояния переменных.

Вернуться

Есть вопросы — спрашивайте!

Наши специалисты помогут Вам и окажут бесплатную консультацию

Документация

Новости 1 - 20 из 52
Начало | Пред. | 1 2 3 | След. | Конец