обновлен readme, синтаксис array заменен на короткий + правки

This commit is contained in:
detre30 2018-04-09 11:59:26 +03:00
parent 65ec3770b6
commit 8abb4fd1e9
17 changed files with 131 additions and 51 deletions

View File

@ -19,6 +19,7 @@ dymov_rbkmoney_1_1.tgz
3. Далее нужно заполнить необходимые поля для корректной работы модуля.
Сделать это можно через админку в настройках модуля (http://ваш_сайт/netcat/admin)
Настройки­>Управление модулями, клик по названию модуля (не шестеренка).
Поля настройки модуля описаны ниже.
  После заполнения полей нажмите кнопку сохранить в конце страницы.
4. Перейдите в настройки модуля Интернет-магазин (Настройки­>Интернет­магазин),
в меню слева выберите пункт Настройки->Оплата.
@ -34,4 +35,45 @@ dymov_rbkmoney_1_1.tgz
Для того, чтоб задать интервал выполнения скрипта нажмите на шестеренку напротив записи со ссылкой /netcat/modules/rbkmoney/recurrentCron.php
Для того, чтоб запустить скрипт вручную нажмите на ссылку /netcat/modules/rbkmoney/recurrentCron.php, которая находится в этом разделе.
Настройка окончена, теперь при оплате товаров среди способов оплаты будет выводится RBKmoney
Настройка модуля
1) API ключ - его необходимо взять в кабинете RBKmoney нажав по кнопке "перейти в магазин" и выбрав пункт API ключ
в меню слева
2) ID магазина - также берется в кабинете в пункте "Детали магазина"
3) Страница успешной оплаты - это страница, на которую пользователь будет направляться после оплаты.
Страницу необходимо создать в неткате самостоятельно, и здесь указать полную
ссылку вида http://вашсайт.рф/ссылка-на-страницу
4) Тип списания средств - укажите "мгновенное списание" чтобы средства у пользователя списывались сразу
(недостаток в том, что возврат списанных средств - действие платное),
"холд" чтобы стредства блокировались на карте и списывались только после подтверждения
(возможно сделать во вкладке "Транзакции" модуля или в кабинете)
5) Списание средств по окончанию срока холдирования - если вы ничего не сделаете на протяжении ## дней
(период блокирования средств), то деньги спишутся в пользу магазина или вернутся назад плательщику
в зависимости от этой настройки. Работает при выбранном в п.4 значении "Холд"
6) Статус инвойса при холде - данная опция указывает в какой статус переводить инвойс в неткате при
инициализации холда средств. Работает при выбранном в п.4 значении "Холд".
Если там указано "Принят" - то статус инвойса после инициализации холда средств переводится в "Принят".
При подтверждении холда (окончательном списании средств в пользу магазина) статус инвойса
переводится в "Оплачен".
7) Отображение кардхолдера в форме оплаты - отображать или нет в форме ввода данных карты строку "Владелец карты".
8) Затенять карточный cvv код - затенять ли (забивать звездочками) вводимый параметр CVV на форме
ввода данных карты или не затенять и отображать вводимые цифры
9) Фискализация по 54-ФЗ - выберите "Использовать" если вы пользуетесь решением по фискализации от RBKmoney
Принцип работы рекуррентных товаров
1) Во вкладке "товары для регулярных платежей" необходимо указать артикулы тех товаров, которые будут
работать как "подписки на регулярные платежи", а также настроить регулярные задачи согласно инструкции выше.
2) После покупки такого товара-подписки (не важно есть ли в корзине еще обычные товары или нет)
с пользователя списываются средства в размере стоимости этого товара. Далее происходят регулярные
списания по расписанию, указанному вами в настройках выше. При каждом регулярном списании во вкладке
"Транзакции" появится новая транзакция, соответствующая данной регулярной оплате,
в неткате появится инвойс, соответствующий этому списанию.
3) В момент первой оплаты товара-подписки конкретным пользователем сумма подписки для дальнейших списаний фиксируется.
Если вы отредактируете стоимость товара-подписки, это не скажется на суммах, на которые подписались
пользователи до этого, с них продолжат списываться зафиксированные ранее суммы.
4) Если в момент списания на карте не было денег, или возникла иная проблема - повторных попыток списания
этой регулярной оплаты не будет, но, когда наступит время следующего списания - оно также будет проведено один раз.
5) Удалить подписки на регулярные списания и просмотреть текущие можно во вкладке "Регулярные платежи" модуля.
6) Контроля уникальности подписок нет. Один и тот же пользователь может несколько раз подписаться
на один и тот же товар-подписку, и средства с него будут списываться несколько раз за период.

View File

@ -83,4 +83,6 @@ define('SHADING_CVV', 'Shading card cvv code');
define('RECURRENT_PAYMENT', 'Recurrent payment');
define('RBKMONEY_RESPONSE_NOT_RECEIVED', 'Response from RBKmoney is not received');
define('REDIRECT_TO_PAYMENT_PAGE', 'Now you will be redirected to the payment page.');
define('CLICK_BUTTON_PAY', 'If this does not happen - click on the button "Pay"');
define('CLICK_BUTTON_PAY', 'If this does not happen - click on the button "Pay"');
define('ERROR_MESSAGE_PHP_VERSION', 'The module requires PHP 5.5 or higher');
define('ERROR_MESSAGE_CURL', 'The module requires curl');

View File

@ -7,12 +7,13 @@
/netcat/modules/rbkmoney/page_settings.php
/netcat/modules/rbkmoney/page_transactions.php
/netcat/modules/rbkmoney/recurrentCron.php
/netcat/modules/rbkmoney/function.inc.php
/netcat/modules/rbkmoney/settings.php
/netcat/modules/rbkmoney/ru.lang.php
/netcat/modules/rbkmoney/en.lang.php
/netcat/modules/rbkmoney/ui_config.php
/netcat/modules/rbkmoney/url_routes.js
/netcat/modules/payment/classes/system/rbkmoney.php
/netcat/modules/rbkmoney/rbkmoney.php
/netcat/modules/rbkmoney/src/Api/ContactInfo.php
/netcat/modules/rbkmoney/src/Api/Customers/CreateCustomer/Request/CreateCustomerRequest.php
/netcat/modules/rbkmoney/src/Api/Customers/CreateCustomer/Response/CreateCustomerResponse.php

View File

@ -0,0 +1,5 @@
<?php
nc_core::get_object()->event->add_listener(nc_event::AFTER_MODULES_LOADED, function() {
include 'rbkmoney.php';
});

View File

@ -5,10 +5,29 @@ $modulePath = $_SERVER['DOCUMENT_ROOT'] . '/rbkmoney/';
include_once($_SERVER['DOCUMENT_ROOT'] . '/vars.inc.php');
include_once($ROOT_FOLDER . 'connect_io.php');
include_once(__DIR__ . "/$lang.lang.php");
include_once(__DIR__ . "/netcat/modules/rbkmoney/settings.php");
function CheckAbilityOfInstallation()
{
return array('Success'=>1);
// Используем такой синтаксис для корректной выдачи ошибки при не соответствующей версии PHP
$result = array('Success' => 1);
if (PHP_VERSION_ID < MINIMAL_PHP_VERSION) {
$result['Success'] = 0;
$result['ErrorMessage'] = ERROR_MESSAGE_PHP_VERSION;
}
if (!function_exists('curl_version')) {
$result['Success'] = 0;
if (!empty($result['ErrorMessage'])) {
$result['ErrorMessage'] = PHP_EOL . ERROR_MESSAGE_CURL;
} else {
$result['ErrorMessage'] = ERROR_MESSAGE_CURL;
}
}
return $result;
}
function InstallThisModule()
@ -16,7 +35,7 @@ function InstallThisModule()
global $nc_core;
$nc_core->db->query("INSERT INTO `Classificator_PaymentSystem` (`PaymentSystem_Name`, `PaymentSystem_Priority`, `Value`, `Checked`)
VALUES ('RBKmoney', '1', 'nc_payment_system_rbkmoney', '1')"
VALUES ('RBKmoney', '1', 'rbkmoney', '1')"
);
$nc_core->db->query("CREATE TABLE `RBKmoney_Recurrent_Items` (
@ -74,5 +93,5 @@ function InstallThisModule()
('successUrl', 'http://example.ru', 'rbkmoney')"
);
return array('Success'=>1);
return array('Success' => 1);
}

View File

@ -130,7 +130,7 @@ class RbkMoneyAdmin
public function transactions_save()
{
//
// заглушка для проверки существования метода
}
/**
@ -230,7 +230,7 @@ class RbkMoneyAdmin
}
} catch (WrongDataException $exception) {
echo $exception->getMessage();
die;
exit;
}
if ($fromTime->getTimestamp() > $toTime->getTimestamp()) {
$fromTime = new DateTime('today');
@ -282,7 +282,7 @@ class RbkMoneyAdmin
$domain = nc_core('catalogue')->get_current('Domain');
$rbkMoneyPath = nc_core('catalogue')->get_url_by_host_name($domain) . nc_module_path('rbkmoney');
$pagePath = $rbkMoneyPath . 'admin.php?view=transactions&page=(:num)';
$date = "&date_from={$fromTime->format('d.m.Y')}&date_to={$toTime->format('d.m.Y')}";
$date = "&date_from={$fromTime->format(TRANSACTION_DATE_FORMAT)}&date_to={$toTime->format(TRANSACTION_DATE_FORMAT)}";
$paginator = new Paginator($payments->totalCount, $limit, $page, "$pagePath?$date");
@ -373,7 +373,7 @@ class RbkMoneyAdmin
'user_name' => $user['Login'],
'user' => "/netcat/admin/user/index.php?phase=4&UserID={$customer['user_id']}",
'status' => $payment->status,
'amount' => $payment->amount, 2,
'amount' => $payment->amount,
'name' => $payment->name,
'date' => $payment->date,
];
@ -394,7 +394,7 @@ class RbkMoneyAdmin
public function recurrent_save()
{
//
// заглушка для проверки существования метода
}
/**

View File

@ -31,7 +31,7 @@ $UI_CONFIG = new ui_config_module_rbkmoney($view, '');
$methodShow = $view . '_show';
$methodSave = $view . '_save';
if (!is_callable(array($rbkMoneyAdmin, $methodShow)) || !is_callable(array($rbkMoneyAdmin, $methodSave))) {
if (!is_callable([$rbkMoneyAdmin, $methodShow]) || !is_callable([$rbkMoneyAdmin, $methodSave])) {
nc_print_status('Incorrect view: '. htmlspecialchars($view), 'error');
exit;
}
@ -71,8 +71,6 @@ if ('transactions' === $view) {
$dateFrom = new DateTime($date_from);
}
$dateTo = new DateTime();
if (empty($date_to)) {
$dateTo = new DateTime();
$dateTo->setTime(23, 59, 59);

View File

@ -136,7 +136,7 @@ class Customers
$contactInfo->setPhone($contact);
}
$metadata = new Metadata(array(
$metadata = new Metadata([
'shop' => nc_core('catalogue')->get_current('Domain'),
'userId' => $userId,
'firstInvoiceId' => $invoiceResponse->id,
@ -144,7 +144,7 @@ class Customers
'cms_version' => $this->ncCore->get_full_version_number(),
'module' => MODULE_NAME_SETTING,
'module_version' => MODULE_VERSION_SETTING,
));
]);
$createCustomer = new CreateCustomerRequest(
$this->settings['shopId'],
@ -157,9 +157,9 @@ class Customers
$this->saveCustomer($customer->customer, $userId);
$response = $this->getCustomer($userId);
$response += array(
$response += [
'hash' => $customer->payload,
);
];
return $response;
}
@ -208,7 +208,7 @@ class Customers
$userId,
CreateInvoiceResponse $invoiceResponse
) {
$articles = array();
$articles = [];
$resultCustomer = null;
/**
@ -223,7 +223,7 @@ class Customers
$article = $this->getArticle($item->get('source_component_id'), $item->get('source_item_id'));
$articles[$item->get('item_price')] = $article;
$items[$article] = array(
$items[$article] = [
'amount' => $item->get('item_price'),
'name' => $item->get('name'),
'message_id' => $item->get('source_component_id'),
@ -233,7 +233,7 @@ class Customers
'date' => new DateTime(),
'status' => RECURRENT_UNREADY_STATUS,
'invoice_id' => $invoice->get_id(),
);
];
}
$intersections = array_intersect($articles, $this->getRecurrentItems());
@ -264,7 +264,7 @@ class Customers
*/
public function setRecurrentReadyStatuses(nc_payment_invoice $invoice)
{
$articles = array();
$articles = [];
/**
* @var $item nc_payment_invoice_item

View File

@ -0,0 +1,5 @@
<?php
nc_core::get_object()->event->add_listener(nc_event::AFTER_MODULES_LOADED, function() {
include 'rbkmoney.php';
});

View File

@ -12,9 +12,9 @@
} ?>
</div>
</form>
<?php $UI_CONFIG->actionButtons[] = array(
<?php $UI_CONFIG->actionButtons[] = [
'id' => 'submit',
'caption' => SAVE,
'action' => "mainView.submitIframeForm('recurrent')"
);
];
?>

View File

@ -34,9 +34,9 @@
</table>
</div>
</form>
<?php $UI_CONFIG->actionButtons[] = array(
<?php $UI_CONFIG->actionButtons[] = [
'id' => 'submit',
'caption' => SAVE,
'action' => "mainView.submitIframeForm('MainSettingsForm')",
);
];
?>

View File

@ -2,11 +2,11 @@
<input type="hidden" name="view" value="transactions">
<div style="display: inline-block;">
<label style="display: block; margin-bottom: 2px;"><? echo RBK_MONEY_DATE_FILTER . ' ' . RBK_MONEY_DATE_FILTER_FROM; ?></label>
<input size="8" style="margin-top: 0;" type="text" name="date_from" value="<?php echo htmlspecialchars($fromTime->format('d.m.Y')); ?>"/>
<input size="8" style="margin-top: 0;" type="text" name="date_from" value="<?php echo htmlspecialchars($fromTime->format(TRANSACTION_DATE_FORMAT)); ?>"/>
</div>
<div style="display: inline-block;">
<label style="display: block; margin-bottom: 2px;"><?php echo RBK_MONEY_DATE_FILTER_TO; ?></label>
<input size="8" style="margin-top: 0;" type="text" name="date_to" value="<?php echo htmlspecialchars($toTime->format('d.m.Y')); ?>"/>
<input size="8" style="margin-top: 0;" type="text" name="date_to" value="<?php echo htmlspecialchars($toTime->format(TRANSACTION_DATE_FORMAT)); ?>"/>
</div>
<button type="submit" style="height: 30px"><?php echo RBK_MONEY_FILTER_SUBMIT; ?></button>
<script>
@ -40,8 +40,8 @@
$button = '<form action="admin.php">
<input type="hidden" name="view" value="transactions">
<input type="hidden" name="act" value="capturePayment">
<input type="hidden" name="date_from" value="'.$fromTime->format('d.m.Y').'">
<input type="hidden" name="date_to" value="'.$toTime->format('d.m.Y').'">
<input type="hidden" name="date_from" value="'.$fromTime->format(TRANSACTION_DATE_FORMAT).'">
<input type="hidden" name="date_to" value="'.$toTime->format(TRANSACTION_DATE_FORMAT).'">
<input type="hidden" name="invoiceId" value="'.$transaction['invoiceId'].'">
<input type="hidden" name="paymentId" value="'.$transaction['paymentId'].'">
<button type="submit" style="height: 30px">' . CONFIRM_PAYMENT . '</button>
@ -49,8 +49,8 @@
$button .= '<form action="admin.php">
<input type="hidden" name="view" value="transactions">
<input type="hidden" name="act" value="cancelPayment">
<input type="hidden" name="date_from" value="'.$fromTime->format('d.m.Y').'">
<input type="hidden" name="date_to" value="'.$toTime->format('d.m.Y').'">
<input type="hidden" name="date_from" value="'.$fromTime->format(TRANSACTION_DATE_FORMAT).'">
<input type="hidden" name="date_to" value="'.$toTime->format(TRANSACTION_DATE_FORMAT).'">
<input type="hidden" name="invoiceId" value="'.$transaction['invoiceId'].'">
<input type="hidden" name="paymentId" value="'.$transaction['paymentId'].'">
<button type="submit" style="height: 30px">' . CANCEL_PAYMENT . '</button>
@ -59,8 +59,8 @@
$button = '<form action="admin.php">
<input type="hidden" name="view" value="transactions">
<input type="hidden" name="act" value="createRefund">
<input type="hidden" name="date_from" value="'.$fromTime->format('d.m.Y').'">
<input type="hidden" name="date_to" value="'.$toTime->format('d.m.Y').'">
<input type="hidden" name="date_from" value="'.$fromTime->format(TRANSACTION_DATE_FORMAT).'">
<input type="hidden" name="date_to" value="'.$toTime->format(TRANSACTION_DATE_FORMAT).'">
<input type="hidden" name="invoiceId" value="'.$transaction['invoiceId'].'">
<input type="hidden" name="paymentId" value="'.$transaction['paymentId'].'">
<button type="submit" style="height: 30px">' . CREATE_PAYMENT_REFUND . '</button>

View File

@ -23,7 +23,7 @@ use src\Client\Sender;
use src\Exceptions\RBKMoneyException;
use src\Exceptions\RequestException;
class nc_payment_system_rbkmoney extends nc_payment_system
class rbkmoney extends nc_payment_system
{
protected $accepted_currencies = ['RUB', 'USD', 'EUR'];
@ -56,8 +56,8 @@ class nc_payment_system_rbkmoney extends nc_payment_system
$this->nc_core = nc_Core::get_object();
$this->settings = nc_Core::get_object()->get_settings('', 'rbkmoney');
include dirname(__DIR__) . '/../../rbkmoney/src/autoload.php';
include dirname(__DIR__) . '/../../rbkmoney/settings.php';
include __DIR__ . '/src/autoload.php';
include __DIR__ . '/settings.php';
$this->sender = new Sender(new Client(
$this->get_setting('apiKey'),
@ -167,8 +167,6 @@ class nc_payment_system_rbkmoney extends nc_payment_system
}
$this->printCallbackErrorResponse($exception);
die;
}
/**
@ -276,7 +274,7 @@ class nc_payment_system_rbkmoney extends nc_payment_system
$invoice->set('status', $invoice::STATUS_SUCCESS)->save();
$netshopOrder->set('status', NETSHOP_STATUS_SUCCESS)->save();
include dirname(__DIR__) . '/../../rbkmoney/customers.php';
include __DIR__ . '/customers.php';
$customers = new Customers($this->sender);
$customers->setRecurrentReadyStatuses($invoice);
@ -551,7 +549,7 @@ class nc_payment_system_rbkmoney extends nc_payment_system
$necessaryWebhooks[CustomersTopicScope::CUSTOMERS_TOPIC]
);
}
include dirname(__DIR__) . '/../../rbkmoney/customers.php';
include __DIR__ . '/customers.php';
$customers = new Customers($this->sender);
$customer = $customers->createRecurrent($invoice, $AUTH_USER_ID, $invoiceResponse);

View File

@ -33,4 +33,11 @@ define('PROPERTY_FEE', 'fee');
define('PROPERTY_GEO_LOCATION_INFO', 'geoLocationInfo');
define('PROPERTY_METADATA', 'metadata');
define('RECURRENT_READY_STATUS', 'ready');
define('RECURRENT_UNREADY_STATUS', 'unready');
define('RECURRENT_UNREADY_STATUS', 'unready');
define('TRANSACTION_DATE_FORMAT', 'd.m.Y');
define('MINIMAL_PHP_VERSION', 50500);
if (!defined('PHP_VERSION_ID')) {
$version = explode('.', PHP_VERSION);
define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}

View File

@ -14,30 +14,30 @@ class ui_config_module_rbkmoney extends ui_config_module {
*/
function ui_config_module_rbkmoney($view, $params)
{
$this->tabs[] = array(
$this->tabs[] = [
'id' => 'settings',
'caption' => SETTINGS,
'location' => 'module.rbkmoney.settings',
'group' => 'admin',
);
$this->tabs[] = array(
];
$this->tabs[] = [
'id' => 'transactions',
'caption' => TRANSACTIONS,
'location' => 'module.rbkmoney.transactions',
'group' => 'admin',
);
$this->tabs[] = array(
];
$this->tabs[] = [
'id' => 'recurrent',
'caption' => RECURRENT,
'location' => 'module.rbkmoney.recurrent',
'group' => 'admin',
);
$this->tabs[] = array(
];
$this->tabs[] = [
'id' => 'recurrent_items',
'caption' => RECURRENT_ITEMS,
'location' => 'module.rbkmoney.recurrent_items',
'group' => 'admin',
);
];
$this->activeTab = $view;
$this->locationHash = "module.rbkmoney.$view" . ($params ? "($params)" : '');

View File

@ -0,0 +1 @@
ADMIN_SETTINGS_LOCATION=module.rbkmoney.settings

View File

@ -83,4 +83,6 @@ define('SHADING_CVV', 'Затенять карточный cvv код');
define('RECURRENT_PAYMENT', 'Рекуррентный платеж');
define('RBKMONEY_RESPONSE_NOT_RECEIVED', 'Ответ от RBKmoney не получен');
define('REDIRECT_TO_PAYMENT_PAGE', 'Сейчас вы будете перенаправлены на страницу оплаты.');
define('CLICK_BUTTON_PAY', 'Если это не произошло - нажмите на кнопку "Оплатить"');
define('CLICK_BUTTON_PAY', 'Если это не произошло - нажмите на кнопку "Оплатить"');
define('ERROR_MESSAGE_PHP_VERSION', 'Для работы модуля необходима версия PHP 5.5 или выше');
define('ERROR_MESSAGE_CURL', 'Для работы модуля необходим curl');