Оплата заказа

Оплата заказов в магазине на Shopkeeper.

Рассмотрим 2 самых популярных решения для оплаты.

Paykeeper

По-умолчанию с магазином устанавливается сниппет Paykeeper. Поддерживается система Webmoney (без посредников) и Robokassa. Paykeeper достаточно тесно интегрируется с Shopkeeper: после совершения оплаты заказ в модуле переводится в статус "Оплата получена", а также Paykeeper интегрируется со сниппетом личного кабинета покупателя - SHKUserProfile.

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

Настойки Paykeeper

Установка

По-умолчанию Paykeeper будет установлен из репозитория вместе с магазином. Если этого не произошло, то нужно скачать и установить дистрибутив отдельно.

Установка Paykeeper вручную:

  • В системе управления создать новый сниппет
  • Название сниппета: Paykeeper
  • Описание: Онлайн-оплата покупок
  • Открыть файл сниппета из репозитория, скопировать содержимое и вставить в поле "Код сниппета", сохранить.
  • Скопировать все файлы сниппета в папку assets/snippets/paykeeper/.

Настойки 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>

Теперь после отправки заказа на следующей странице будет появляться кнопка "Оплатить сейчас".

Настройка платежных систем

Настройка ROBOKASSA

  • В личном кабинете в поле "Result URL" введите URL, по которой доступен файл result.php - http://[ваш домен]/assets/snippets/paykeeper/result.php
  • Метод отсылки данных по Result URL - POST.
  • Success URL - страница, которая будет открываться после успешного прохождения платежа.
  • Метод отсылки данных по Success URL - POST
  • Fail URL - страница, которая будет открываться после незавершенного платежа.
  • Метод отсылки данных по Fail URL - POST
  • Введите Пароль #1 и Пароль #2.
  • Откройте файл paykeeper/robokassa/config.php и введите свои данные (логин, пароль 1, пароль 2.).

Настройка WEBMONEY

  • У вас должен быть Аттестат продавца. Откройте сайт http://merchant.webmoney.ru/ и авторизуйтесь
  • Перейдите "Настройки" -> "Web Merchant Interface" -> "R-кошелек" -> "Настроить".
  • Настройки анологичные Robokassa.
  • Откройте файл paykeeper/webmoney/config.php и введите номер R-кошелька ($purse['rub']) и Secret Key.

Шаблоны, чанки и плейсхолдеры

Параметр сниппета Описание Плейсхолдеры в шаблоне Примечание
&WMstartPayTpl Шаблон первой страницы при оплате Webmoney. [+action+] - action для формы;
[+email+] - адрес электронной почты пользователя;
[+payment_button+] - название кнопки;
[+disabled+] - блокировка кнопки, если пользователь незарегистрирован и e-mail не указан (disabled="disabled").
Пример: <b>paykeeper/tpl/WMstartPayTpl.tpl</b>
&RKstartPayTpl Шаблон первой страницы при оплате через Robokassa.
Пример: <b>paykeeper/tpl/RKstartPayTpl.tpl</b>
&WMpayTpl Шаблон страницы второго шага оплаты Webmoney (перед переходом на страницу системы оплаты). [+action+] - action для формы;
[+email_string+] - строка с предупреждением, если указан некорректный e-mail;
[+pay_summ+] - сумма платежа;
[+pay_purse_type+] - тип WM-кошелька для оплаты;
[+h_inputs+] - скрытые текстовые, необходимые для системы оптаты.
Пример: <b>paykeeper/tpl/WMkpayTpl.tpl</b>
&RKpayTpl Шаблон страницы второго шага оплаты Robokassa (перед переходом на страницу системы оплаты). [+action+] - см. выше.
[+email_string+] - см. выше.
[+pay_summ+] - см. выше.
[+pay_currency+] - валюта (руб.)
[+h_inputs+] - см. выше.
Пример: <b>paykeeper/tpl/RKpayTpl.tpl</b>

Параметры сниппета

Параметр Описание и значения Значение по умолчанию Примечание
&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`!]

Yandex.Money

Решение для оплаты при помощи сервиса Яндекс.Деньги.

Доступные платежные методы, если вы работаете как юридическое лицо:

  • Банковские карты - Visa (включая Electron), MasterCard и Maestro любого банка мира
  • Электронные деньги - Яндекс.Деньги, WebMoney и QIWI Wallet
  • Наличные - Более 170 тысяч пунктов оплаты по России
  • Баланс телефона - Билайн, МегаФон и МТС
  • Интернет банкинг - Альфа-Клик, Сбербанк Онлайн, MasterPass и Промсвязьбанк
  • Кредитование

Установка модуля

Установка модуля

Для установки данного модуля необходимо:

  • Распаковать архив и переместить папку assets в папку assets Вашего сайта
  • Перейти в административную панель Evolution CMS
  • Перейти в меню Модули - Управление модулями - Новый модуль и создать новый модуль с названием 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`
&currency=`руб.`
&noJQuery=`1`
!]

[!eForm?
&formid=`shopOrderForm`
&tpl=`shopOrderForm` 
&report=`shopOrderReport`
&vericode=`1`
&ccsender=`1` 
&gotoid=`35` 
&subject=`Новый заказ` 
&eFormOnBeforeMailSent=`populateOrderData` 
&eFormOnMailSent=`sendOrderToManager` !]

Перейти в Модули и щелкнуть по значку рядом с YandexMoney, а затем выбрать пункт "Установить YandexMoney"

Mem: 3.75 mb, MySQL: 0.0022 s, 2 req., PHP: 0.0371 s, all: 0.0393 s, cache.