Fi1osof 14 января 2014 1 5
В наш репозиторий выложил новый пакет — EdinayaKassa. Это дополнительный модуль оплаты для нашей сборки ShopModxBox. Таким образом, теперь на сайте можно использовать помимо Робокассы и Единую Кассу.

В самое ближайшее время выйдет новый релиз ShopModxBox с уже установленным и настроенным компонентом EdinayaKassa, но если для тех, у кого уже работает наша сборка, под катом подробно опишу как установить и настроить этот компонент.

Следует иметь ввиду, что данный компонент рассчитывался только для работы с ShopModxBox, так что если вы его хотите использовать отдельно, то он годится скорее только в качестве примера.

Установка и настройка компонента EdinayaKassa.

1. Регистрируемся в ЕдинойКассе.

2. Качаем из нашего репозитория и устанавливаем данный компонент.







3. Создаем документы для работы компонента. Особое внимание сразу же обратите на соответствие ID-шников спецдокументов в настройках. Само собой в настройки надо указывать актуальный ID. Так же имейте ввиду, что кроме валюты, все настройки будут пусты, их надо будет прописать самостоятельно.



3.1 В документ Result прописываем [[!edinayakassa.payResult]]
Шаблон Пустой. Снимаем галочку «Использовать HTML редактор».

3.2 В документы Success и Failure прописываем произвольные сообщения об успешности или не успешности платежа. Шаблон Основной.

Все эти три документа снимаем галочки «Доступен для поиска», чтоы в sitemap.xml не попадали.

4. В шаблон страницы оплаты сразу после {assign var=order value=$result.object[0]} дописываем подключение директории шаблонов модуля и вызов сниппета.
{$modx->smarty->addTemplateDir("{$modx->getOption('core_path')}components/edinayakassa/templates/web/default/")}
{snippet name="edinayakassa.getButton" params="&WMI_PAYMENT_AMOUNT=`{$order.sum}`&order_id=`{$smarty.get.order_id}`"}


Вообще Smarty хороша тем, что шаблоны можно переопределять. К примеру, в сниппете вызывается шаблон edinayakassa/button.tpl
Так как он находится в папке шаблонов самого модуля EdinayaKassa, то нам и приходится указывать Smarty дополнительную директорию шаблонов.
{$modx->smarty->addTemplateDir("{$modx->getOption('core_path')}components/edinayakassa/templates/web/default/")}

Но, если вы создадите шаблон edinayakassa/button.tpl в основной директории шаблонов сайта, то будет использован ваш шаблон. Собственно, тогда можно и не подключать папку шаблонов EdinayaKassa.

5. Надо еще добавить в базу данных еще один платежный сервис (он будет учитываться в биллинге). Для этого заходим через PhpMyAdmin (или кто что использует) в базу данных, и в таблицу modx_billing_paysystems добавляем запись со значением name=EdinayaKassa.



Значение id новой записи указываем в системную настройку edinayakassa.bill_serv_id

Ну и все. Если все правильно сделано, то на странице появится кнопка оплаты через ЕдинуюКассу.


UPD: Выложил пакет на гитхаб. github.com/Fi1osof/EdinayaKassa
5 комментариев
S
Shatalov_Vadim 14 февраля 2014г в 17:49 #
Здравствуйте! Вот такая переписка с тех поддержкой Единой Кассы:

Здравствуйте! номер кошелька 172576054283 на сайте monument-msk.ru/ Для подтверждения того, что я являюсь владельцем сайта, разместил мета-тэг в код главной страницы своего сайта. В третий раз не подтверждается в чем проблема?!

Вот что мне ответили:
Добрый день.

Проблема в следующем — при входе на ваш сайт клиенту (и нам в том числе) отдается страница «Browser Check Page», на которой указанного тега нет.
Подскажите пожалуйста, кто знает в чем может быть проблема?
proxyfabio1
proxyfabio 14 февраля 2014г в 18:04 #
У тебя на сайте возможно стоит скрипт, проверяющий версию браузера клиента, который тем или иным образом подменяет контент страницы.
Fi1osof1
Fi1osof 14 февраля 2014г в 18:07 #
Здравствуйте!
Вот это все с нами вообще никак не связано. Ваш сайт отдает тот контент, который вы в него прописываете.
Вообще, чтобы вот такие задачи не отнимали у вас время (время==деньги), обратите внимание на расценки за поддержку. modxclub.ru/razrabotka-i-podderzhka-sajtov.html
К слову, уже давно бы ваш магазин запустили.
AlexBaks1
AlexBaks 05 марта 2014г в 18:23 #
альтернативный вариант добавления записи платежной системы в таблицу modx_billing_paysystems через consol
обратите внимание, на префикс таблиц modx.

$packageName = 'billing';
$base_path =  $modx->getOption('core_path');
$success = $modx->addPackage($packageName,$base_path.'components/'.$packageName.'/model/','modx_billing_');
echo "\naddPackage " . ($success? 'OK' : 'Failed');
$success = $modx->loadClass('Paysystem');
echo "\nloadClass " . ($success  ? 'OK' : 'Failed');
$obj = $modx->newObject('Paysystem');
$obj->set('name','EdinayaKassa');
$obj->set('comment','Единая касса приема платежей');
if ($obj->save()) echo "<br />Запись успешно добавлена";;
$result = $modx->getCollection('Paysystem');
echo "<br />Содержимое таблици:";
foreach($result as $row){echo '<pre>';print_r($row->toArray());echo '<pre>';}
Fi1osof1
Fi1osof 05 марта 2014г в 19:05 #
Алексей, позволь пару замечаний:

1. Если не получается подключить пакет, то почему не прерывается процесс? Это я про вот это:
echo "\naddPackage " . ($success? 'OK' : 'Failed');
$success = $modx->loadClass('Paysystem');

То есть если !$success, то и loadClass делать нет смысла.
Это же касается и попытки подключения класса — если не удалось подключить класс, то и создавать новый объект нет смысла. К слову, $modx->newObject() и прочие методы в принципе включают в себя метод $modx->loadClass(), так что не надо специально его вызывать заранее.

2. Данный код крайне избыточный, особенно имея ввиду то, что пакет billing имеется в экспеншенах, и выполняется автоматически. Соответственно, его нет смысла подключать через $modx->addPackage().
В итоге, конечный работающий код будет выглядеть вот так:
if(!$object = $modx->newObject('Paysystem', array(
    "name"       => "EdinayaKassa",
    "comment"    => "Единая касса приема платежей",
))){
    print "Не удалось создать новый объект платежной системы";
    return;
}

// else
if(!$object->save()){
    print "Не удалось сохранить новый объект платежной системы";
    return;
}

// else
print "Был создан новый объект платежной системы с id ". $object->id;
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.