Оплата заказов в магазине на Shopkeeper.
Рассмотрим 2 самых популярных решения для оплаты.
По-умолчанию с магазином устанавливается сниппет Paykeeper. Поддерживается система Webmoney (без посредников) и Robokassa. Paykeeper достаточно тесно интегрируется с Shopkeeper: после совершения оплаты заказ в модуле переводится в статус "Оплата получена", а также Paykeeper интегрируется со сниппетом личного кабинета покупателя - SHKUserProfile.
Из дополнительных опций можно отметить, что производить оплату возможно как сразу после отправки заказа, так и после подтверждения заказа менеджером. Есть опция "повторить заказ".
По-умолчанию Paykeeper будет установлен из репозитория вместе с магазином. Если этого не произошло, то нужно скачать и установить дистрибутив отдельно.
Paykeeper
assets/snippets/paykeeper/
.В системе управления открыть для редактирования страницу, которая открывается после оформления заказа (&gotoid
в eForm).
Вставить в поле "Содержимое ресурса" или в шаблон страницы вызов сниппета:
[!Paykeeper!]
Проверьте чтобы на странице оформления заказа в вызове сниппета eForm был указан параметр &gotoid.
Пример:
[!eForm?
&gotoid=`15`
&formid=`shopOrderForm`
&tpl=`shopOrderForm`
&report=`shopOrderReport`
&subject=`Новый заказ`
&eFormOnBeforeMailSent=`populateOrderData`
&eFormOnMailSent=`sendOrderToManager`
!]
где 15 - это ID страницы, которая будет открываться после отправки заказа.
В шаблоне формы должен быть выпадающий список (select) для выбора метода оплаты.
Пример:
<select name="payment" >
<option value="При получении">При получении</option>
<option value="webmoney">WebMoney</option>
<option value="robokassa">Другие электронные деньги</option>
</select>
Теперь после отправки заказа на следующей странице будет появляться кнопка "Оплатить сейчас".
result.php
- http://[ваш домен]/assets/snippets/paykeeper/result.php
paykeeper/robokassa/config.php
и введите свои данные (логин, пароль 1, пароль 2.).paykeeper/webmoney/config.php
и введите номер R-кошелька ($purse['rub']
) и Secret Key.Параметр сниппета | Описание | Плейсхолдеры в шаблоне | Примечание |
---|---|---|---|
&WMstartPayTpl | Шаблон первой страницы при оплате Webmoney. |
[+action+] - action для формы; [+email+] - адрес электронной почты пользователя; [+payment_button+] - название кнопки; [+disabled+] - блокировка кнопки, если пользователь незарегистрирован и e-mail не указан (disabled="disabled"). |
Пример: paykeeper/tpl/WMstartPayTpl.tpl |
&RKstartPayTpl | Шаблон первой страницы при оплате через Robokassa. | Пример: paykeeper/tpl/RKstartPayTpl.tpl | |
&WMpayTpl | Шаблон страницы второго шага оплаты Webmoney (перед переходом на страницу системы оплаты). |
[+action+] - action для формы; [+email_string+] - строка с предупреждением, если указан некорректный e-mail; [+pay_summ+] - сумма платежа; [+pay_purse_type+] - тип WM-кошелька для оплаты; [+h_inputs+] - скрытые текстовые, необходимые для системы оптаты. |
Пример: paykeeper/tpl/WMkpayTpl.tpl |
&RKpayTpl | Шаблон страницы второго шага оплаты Robokassa (перед переходом на страницу системы оплаты). |
[+action+] - см. выше. [+email_string+] - см. выше. [+pay_summ+] - см. выше. [+pay_currency+] - валюта (руб.) [+h_inputs+] - см. выше. |
Пример: paykeeper/tpl/RKpayTpl.tpl |
Параметр | Описание и значения | Значение по умолчанию | Примечание |
---|---|---|---|
&lang | язык | Язык системы управления | В настоящее время доступны языки: `russian` (папка paykeeper/lang/) |
&paymentDesc | Описание платежа | `Оплата покупки в интернет-магазине` | |
&paymentButton | Название кнопки на первой странице | `Оплатить сейчас` | |
&resultURL | URL страницы "Result URL" | `http://[ваш сайт]/assets/snippets/paykeeper/result.php` | Не обязательный параметр. Можно применять для Webmoney. |
&payment_method | Метод оплаты `webmoney`, `robokassa` |
$_SESSION['shk_payment_method'] | |
&payment_orderid | ID заказа | $_SESSION['shk_order_id'] | |
&payment_userid | ID пользователя | $_SESSION['shk_order_user_id'] | |
&payment_useremail | E-mail пользователя | $_SESSION['shk_order_user_email'] | |
&payment_value | Сумма оплаты | $_SESSION['shk_order_price'] | |
&payment_currency | Валюта оплаты | $_SESSION['shk_currency'] | |
&payment_reserve | Зарезервировать товар для оплаты `true`, `false` |
`false` | Оплата производится после того как статус заказа переводится в "Принят к оплате". Новый параметр в версии 1.5. |
&WMstartPayTpl | Имя чанка с шаблоном первой страницы при оплате Webmoney | `@FILE:assets/snippets/paykeeper/tpl/WMstartPayTpl.tpl` | Если чанки хранятся в файлах, можно указать путь с командой "@FILE:". Если чанки созданы в системе управления, то указывается только имя чанка (например &WMstartPayTpl=`WMstartPay`) |
&WMpayTpl | Имя чанка с шаблоном страницы второго шага оплаты Webmoney (перед переходом на страницу системы оплаты) | `@FILE:assets/snippets/paykeeper/tpl/WMkpayTpl.tpl` | |
&RKstartPayTpl | Имя чанка с шаблоном первой страницы при оплате через Robokassa | `@FILE:assets/snippets/paykeeper/tpl/RKstartPayTpl.tpl` | |
&RKpayTpl | Имя чанка с шаблоном страницы второго шага оплаты Robokassa (перед переходом на страницу системы оплаты) | `@FILE:assets/snippets/paykeeper/tpl/RKpayTpl.tpl` | |
&payTest | Тестовый режим оплаты. Возможные значения: `true`, `false`. | `false` |
Если сниппет вызывается без параметров, значения суммы оплаты, ID заказа и т.д. берется из сессий, которые создаются сниппетом Shopkeeper после сохранения заказа.
Сниппет можно вызывать из других сниппетов через функцию $modx->runSnippet().
В данной версии (1.x) для WebMoney поддерживается оплата только WMR (рубли). Сниппет тесторовался только с кодировкой сайта UTF-8, т.к. она является рекомендуемой для Evolution CMS. C другой кодировкой корректная работа не гарантируется.
Примеры вызова Paykeeper:
Оплата после отправки заказа
[!Paykeeper!]
Резервирование (оплата после подтверждения менеджером)
[!Paykeeper? &payment_reserve=`true`!]
Оплата отдельного заказа
[!Paykeeper?
&payment_method=`webmoney`
&payment_orderid=`2`
&payment_value=`100`
&payment_currency=`WMR`!]
Решение для оплаты при помощи сервиса Яндекс.Деньги.
Доступные платежные методы, если вы работаете как юридическое лицо:
Для установки данного модуля необходимо:
assets
в папку assets
Вашего сайтаМодули
- Управление модулями
- Новый модуль
и создать новый модуль с названием YandexMoney
YandexMoney
следующий код:
include '../assets/snippets/yandexmoney/yandexmoney.class.php';
$dbname = $modx->db->config['dbase']; //имя базы данных $dbprefix = $modx->db->config['table_prefix']; //префикс таблиц $mod_table = $dbprefix."yandexmoney"; //таблица модуля $theme = $modx->config['manager_theme']; //тема админки $basePath = $modx->config['base_path']; //путь до сайта на сервере
$action = isset($_POST['action']) ? $_POST['action']:'';
switch($action) {
//Установка модуля (создание таблицы в БД) case 'install': $sql = "CREATE TABLE $mod_table (id INT(11) NOT NULL AUTO_INCREMENT, config LONGTEXT, PRIMARY KEY (id))"; $modx->db->query($sql);
$sql = "INSERT INTO $mod_table (id, config) VALUES (1, '')"; $modx->db->query($sql);
header("Location: $_SERVER[REQUEST_URI]"); break;
//Удаление таблицы модуля case "uninstall": $sql = "DROP TABLE $mod_table"; $modx->db->query($sql); header("Location: $_SERVER[REQUEST_URI]"); break;
//Обновление записи в БД case 'save': $fields = array( 'config' => serialize($_POST['config']) ); $ym_stat = new yamoney_statistics($_POST['config']); $query = $modx->db->update($fields, $mod_table, 'id = 1'); header("Location: $_SERVER[REQUEST_URI]"); break;
//Перезагрузка страницы (сброс $_POST) case 'reload': header("Location: $_SERVER[REQUEST_URI]"); break;
//Страница модуля default: echo Yandexmoney::adminHeadHtml($theme);; if (!Yandexmoney::isInstalled($dbname, $mod_table)){ //если таблицы не существует, выводим кнопку "Установить модуль" echo Yandexmoney::adminInstallHtml(); }else{ $data_query = $modx->db->select("*", $mod_table, "", "id ASC", ""); $row = $modx->db->getRow($data_query); $config = unserialize($row['config']);
$ym = new Yandexmoney($config);
echo $ym->adminModuleHtml();
}
break;
}
Перейти в меню `Элементы` - `Сниппеты` и создать новый сниппет с названием `YandexMoney`.
Вставить следующий код:
<?php $dbname = $modx->db->config['dbase']; //имя базы данных $dbprefix = $modx->db->config['table_prefix']; //префикс таблиц $mod_table = $dbprefix."yandexmoney"; //таблица модуля $theme = $modx->config['manager_theme']; //тема админки $basePath = $modx->config['base_path']; //путь до сайта на сервере if(!defined('YANDEXMONEY_PATH')) { define('YANDEXMONEY_PATH', MODX_BASE_PATH."assets/snippets/yandexmoney/"); } require_once YANDEXMONEY_PATH.'yandexmoney.class.php';
$data_query = $modx->db->select("*", $mod_table, "", "id ASC", ""); $row = $modx->db->getRow($data_query); $config = unserialize($row['config']); $ym = new Yandexmoney($config); if ($_POST['payment']){ $ym->pay_method = $_POST['payment']; } if ($action == 'showMethods') { return $ym->getSelectHtml(); } ?>
Перейти в меню `Элементы - Управление файлами` и в файл `assests/snippets/shopkeeper/shopkeeper.inc.php` вставить следующий код:
if(!function_exists('sendOrderToManager')){ function sendOrderToManager(&$fields){ global $modx, $shkconf;
if(!class_exists('Shopkeeper')) require_once MODX_BASE_PATH."assets/snippets/shopkeeper/class.shopkeeper.php";
if(!defined('YANDEXMONEY_PATH')) define('YANDEXMONEY_PATH', MODX_BASE_PATH."assets/snippets/yandexmoney/");
if(!function_exists('YandexMoneyForm')) require_once YANDEXMONEY_PATH.'yandexmoney.class.php';
$shopCart = new Shopkeeper($modx, $shkconf);
$shopCart->sendOrderToManager($fields);
YandexMoneyForm($fields);
return true;
}
}
Перейти в меню `Элементы - Чанки` и создать новый чанк с названием `YandexMoney`
Вставить в код чанка `YandexMoney` следующий код:
[[YandexMoney?&action=showMethods
]]
Пример с вставленной строкой `[[YandexMoney?&action=`showMethods`]]`:
В коде страницы с формой заказа необходимо вставить следующий код:
[[YandexMoney? &action=beforeCart
]]
Пример с вставленной строкой `[[YandexMoney? &action=`beforeCart`]]`:
[[YandexMoney?
&action=beforeCart
]]
[!Shopkeeper?
&cartType=full
&priceTV=price
&orderFormPage=34
¤cy=руб.
&noJQuery=1
!]
[!eForm?
&formid=shopOrderForm
&tpl=shopOrderForm
&report=shopOrderReport
&vericode=1
&ccsender=1
&gotoid=35
&subject=Новый заказ
&eFormOnBeforeMailSent=populateOrderData
&eFormOnMailSent=sendOrderToManager
!]
Перейти в `Модули` и щелкнуть по значку рядом с `YandexMoney`, а затем выбрать пункт "Установить YandexMoney"