Перейти к содержанию

Модуль платежной системы NeBank для Hostinpl


Рекомендуемые сообщения

Инструкция:
Добавить в config.php

Спойлер

'nb_id' => '1', // ID магазина
'nb_key1' => '...', // Ключ №1
'nb_key2' => '...', // Ключ №2

Далее:
Создать файл nebank.php по адресу /application/controllers/result/, добавим такой код:

Спойлер

<?php
class NeBankController extends Controller {
    public function index() {
        $this->load->model('users');
        $this->load->model('invoices');
        $this->load->model('waste');
        
if($this->request->server['REQUEST_METHOD'] != 'POST') return 'Incorrect method';

$id = $this->request->post['id'];
$pay_id = $this->request->post['pay_id'];
$invoice_id = $this->request->post['invoice_id'];
$shop_id = $this->request->post['shop_id'];
$description = $this->request->post['description'];
$amount = $this->request->post['amount'];
$signature = $this->request->post['signature'];

if($shop_id != $this->config->nb_id) return 'IncorrectShopId';

$invoice = $this->invoicesModel->getInvoiceById($invoice_id);
if(!$invoice) return 'NoInvoice';

if($invoice['system'] != 'nebank') return 'NotNebankPay';

$key1 = $this->config->nb_key1;
$key2 = $this->config->nb_key2;

$sign1 = md5("$shop_id:$invoice_id:$amount:card_cis:$key1");
$sign2 = md5("$key2:$id:$sign1");

if($sign2 != $signature) {
$sign3 = md5("$shop_id:$invoice_id:$amount:card_nocis:$key1");
$sign4 = md5("$key2:$id:$sign3");

if($sign4 != $signature) return 'IncorrectSign';
}

$user_id = $invoice['user_id'];
        $user = $this->usersModel->getUserById($user_id);
if(!$user) return 'NoUser';

$total_amount = round($amount / 100, 2);

if($total_amount > 50) $this->usersModel->updateUser($user_id, $userData = array('user_promised_pay' => 0));

$wasteData = array(
'user_id'        => $user_id,
'waste_ammount'    => $total_amount,
'waste_status'    => 0,
'waste_usluga'    => 'Пополнение баланса пользователя через систему NeBank Pay',
);

$this->wasteModel->createWaste($wasteData);

$this->usersModel->upUserBalance($userid, $total_amount);
                
        $bonus_percent = $this->config->bonus_percent;
        $getbonus = ($total_amount * (1 + $bonus_percent / 100)) - $total_amount;
        $this->usersModel->upUserBonuses($user_id, $getbonus);

        $this->invoicesModel->updateInvoice($invoice_id, array('invoice_status' => 1));

        return 'OK';
    }
}
?>

Теперь в качестве ссылки для уведомления можно будет использовать:
https://вашдомен/result/nebank

Открываем файл pay.php по адресу /application/controllers/account и добавляем функцию nebank() после index:

Спойлер

public function nebank() {
    if(!$this->user->isLogged()) {
        $this->data['status'] = 'error';
        $this->data['error'] = 'Вы не авторизированы!';
        return json_encode($this->data);
    }
    if($this->user->getAccessLevel() < 1) {
        $this->data['status'] = 'error';
        $this->data['error'] = 'У вас нет доступа к данному разделу!';
        return json_encode($this->data);
    }
    
    $this->load->model('invoices');
    if($this->request->server['REQUEST_METHOD'] != 'POST') {
        $this->data['status'] = 'error';
        $this->data['error'] = 'Запрос должен быть отправлен методом POST';
        return json_encode($this->data);
    }
    $amount = @$this->request->post['ammount'];
    
    $shop_id = $this->config->nb_id;
    $key1 = $this->config->nb_key1;
$key2 = $this->config->nb_key2;
    $minor_amount = $amount * 100;
    
    $user_id = $this->user->getId();
    $invoiceData = array(
        'user_id' => $user_id,
        'invoice_ammount' => $amount,
        'invoice_status' => 0,
        'system' => 'nebank'
    );
    $invoice_id = $this->invoicesModel->createInvoice($invoiceData);
    $method = $this->request->post['method'];
    $methods = ['card_cis', 'card_nocis'];
    if(!in_array($method, $methods)) return 'IncorrectMethod';
    $signature = md5("$shop_id:$invoice_id:$minor_amount:$method:$key1");
$body = json_encode([
'shop_id' => $shop_id,
'invoice_id' => $invoice_id,
'description' => 'Пополнение баланса хостинг-аккаунта #'.$user_id,
'amount' => $minor_amount,
'method' => $method,
'signature' => $signature
]);
    $curl = curl_init('https://api.nebank.co/payments');
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-type: application/json']);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
$response = curl_exec($curl);
curl_close($curl);
$decoded = json_decode($response);
    if(!$decoded || !$decoded->success) {
        $this->data['status'] = 'error';
        $this->data['error'] = 'Не удалось создать платёж в системе NeBank. Если вы выбрали иностранные карты, то убедитесь, что сумма пополнения больше 100 рублей.';
        $this->invoicesModel->deleteInvoice($invoice_id);
        return json_encode($this->data);
    }
    return $decoded->pay_id;
}

Открываем файл pay.php по адресу /application/views/account/ и добавляем шаблон пополнения после <?echo $footer?>:

 

Спойлер

<div class="modal fade" id="nebank_modal" tabindex="-1" role="dialog" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="exampleModalLabel">Пополнение баланса</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                <i aria-hidden="true" class="ki ki-close"></i>
                </button>
            </div>
            <form id="nebank" method="POST" class="form_0" style="padding:0px; margin:0px;">
                <div class="modal-body">
                    <div class="form-group">
                        <label>Введите сумму</label>
                        <input class="form-control" id="ammount" name="ammount" placeholder="100">
                    </div>
                    <div class="form-group">
                        <label>Выберите метод</label>
                        <select class="form-control" name="method">
<option value="card_cis">Российская банковская карта</option>
<option value="card_nocis">Иностранная банковская карта (мин. 100 рублей)</option>
</select>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-light-primary font-weight-bold" data-dismiss="modal">Отмена</button>
                    <button type="submit" class="btn btn-primary font-weight-bold">Пополнить</button>
                </div>
            </form>
        </div>
    </div>
</div>

<script src="https://pay.nebank.co/widget.js?v12"></script>
<script>
    $('#nebank').ajaxForm({
     url: '/account/pay/nebank',
     dataType: 'text',
     success: data => {
     if(data[0] !== '{') {
$('#nebank_modal').modal('hide');
document.querySelector('.header').style.zIndex = 0;
NeBank.widget({ payId: data });
} else {
data = $.parseJSON(data);
toastr.error(data.error);
$('button[type=submit]').prop('disabled', false);
}
     },
     beforeSubmit: function(arr, $form, options) {
     $('button[type=submit]').prop('disabled', true);
     }
    });
</script>

Дальше добавляем на 107 строчке после <?endif;?>

Спойлер

<div class="col-lg-4">
    <div class="card card-custom gutter-b">
        <div class="card-body">
            <center><img src="https://nebank.co/assets/logo.svg" style="max-width:100%;height:65px;" alt=""></center>
        </div>
        <div class="card-footer">
            <button data-toggle="modal" data-target="#nebank_modal" class="btn btn-primary btn-lg btn-block">Пополнить</button>
        </div>
    </div>
</div>

 

Поставь LIKE! Если помог))

Ссылка на комментарий
https://lesya.su/topic/34-modul-platezhnoy-sistemy-nebank-dlya-hostinpl/
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...