Developer 37 Опубликовано 12 июля Поделиться Опубликовано 12 июля Инструкция: Добавить в 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/ Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.