コード例 #1
0
ファイル: cardpay.php プロジェクト: Nikitian/fl-ru-damp
 /**
  * Принимает от assist результаты платежа, производит зачисление.
  *
  * @param array $req   массив $_POST с данными.
  */
 function checkdeposit($req)
 {
     $this->log->writeln('Поступление платежа.');
     $this->log->writevar($req);
     if ($req['merchant_id'] != self::MERCHANT_ID) {
         $this->fail(self::ERR_MERCHANT_ID);
     }
     $hash_x = $req['merchant_id'] . $req['ordernumber'] . $req['amount'] . $req['currency'] . $req['orderstate'];
     $hash = strtoupper(md5(strtoupper(md5($this->_secret) . md5($hash_x))));
     if ($hash != $req['checkvalue']) {
         $this->fail(self::ERR_HASH);
     }
     if ($req['responsecode'] == 'AS000' && $req['orderstate'] == 'Approved') {
         $card_account = new card_account();
         $billing_no = $card_account->checkPayment($req['ordernumber']);
         if (!$billing_no) {
             $this->fail(self::ERR_ORDERNUM);
         }
         $amm = $req['orderamount'];
         $descr = "CARD номер счета в ассисте {$req['billnumber']} с карты {$req['meantypename']} {$req['meannumber']} " . "сумма - {$req['orderamount']} {$req['ordercurrency']}, " . "обработан {$req['packetdate']}, номер покупки - {$req['ordernumber']}";
         if ($error = $this->deposit($op_id, $billing_no, $amm, $descr, 6, $req['orderamount'])) {
             $this->fail(self::ERR_DEPOSIT, $error);
         }
     }
     $this->success($req['billnumber'], $req['packetdate']);
 }
コード例 #2
0
 /**
  * Вывод страницы для оплаты пластиковыми картами.
  */
 public function cardAction()
 {
     front::og('tpl')->page = 'index';
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/city.php';
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/card_account.php';
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr.php';
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_meta.php';
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/settings.php';
     $user = new users();
     $user->GetUser($_SESSION['login']);
     $city = $user->city ? city::GetCityName($user->city) : '';
     $reqv = sbr_meta::getUserReqvs($user->uid);
     $card_account = new card_account();
     $card_account->account_id = $this->account->id;
     $order_id = $card_account->Add();
     $sum = round(trim($_REQUEST['sum']), 4);
     $merchant = settings::GetVariable('billing', 'card_merchant');
     front::og('tpl')->sum = $sum;
     front::og('tpl')->card_account = $card_account;
     front::og('tpl')->order_id = $order_id;
     front::og('tpl')->city = $city;
     front::og('tpl')->user = $user;
     front::og('tpl')->reqv = $reqv[sbr::FT_PHYS];
     front::og('tpl')->script = '/scripts/bill2.js';
     if ($order_id > 0) {
         $tpl_file = '';
         if ($merchant) {
             $tpl_file = '_dol';
         }
         front::og('tpl')->display("bill/bill_card_step2{$tpl_file}.tpl");
     }
 }
コード例 #3
0
 public function handleRequest($src = null, $req = array())
 {
     $this->_action = $src;
     $this->_request = $req;
     switch ($this->_action) {
         case self::DO_REQUEST_CHECKIN:
             $this->_log('response')->writeln('CHECKIN');
             $this->_log('response')->writevar($req);
             if (!$this->_validate()) {
                 echo $this->_response('NO', 'Ошибка проверки подлинности запроса.');
                 exit;
             }
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
             $uid = intval($req['userid']);
             $user = new users();
             $user->GetUserByUID($uid);
             if ($user->uid > 0) {
                 echo $this->_response('YES', 'Пользователь существует.');
                 exit;
             } else {
                 echo $this->_response('NO', 'Пользователь не существует.');
                 exit;
             }
             break;
         case self::DO_REQUEST_PAYMENT:
             $this->_log('response')->writeln('PAYMENT');
             $this->_log('response')->writevar($req);
             if (!$this->_validate()) {
                 echo $this->_response('NO', 'Ошибка проверки подлинности запроса.');
                 exit;
             }
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/card_account.php';
             $card_account = new card_account();
             $billing_no = $card_account->checkPayment($req['orderid']);
             if (!$billing_no) {
                 $this->_log('response')->writeln('Платеж не найден.');
                 echo $this->_response('NO', 'Номер платежа не найден.');
                 exit;
             }
             $req['date'] = date('Y-m-d H:i:s');
             $amm = $req['amount'];
             $descr = "CARD номер платежа в системе ДеньгиОнлайн {$req['paymentid']}  " . "сумма - {$req['amount']} руб., " . "обработан {$req['date']}";
             if ($error = $this->deposit($op_id, $billing_no, $amm, $descr, 6, $req['amount'])) {
                 $this->_log('response')->writeln('Ошибка проведения платежа.');
                 echo $this->_response('NO', $error);
                 exit;
             }
             $this->_log('response')->writeln('Платеж принят.');
             echo $this->_response('YES');
             break;
         case self::DO_REQUEST_SUCCESS:
             $this->_log('response')->writeln('SUCCESS');
             header_location_exit('/bill/cardsuccess/');
             break;
         case self::DO_REQUEST_FAILURE:
             $this->_log('response')->writeln('FAILURE');
             $_SESSION['bill.GET']['error'] = '';
             header_location_exit('/bill/fail/');
             break;
         default:
             break;
     }
 }
コード例 #4
0
ファイル: billing.php プロジェクト: kapai69/fl-ru-damp
 /**
  * Инициализируем тип оплаты на странице.
  *
  * @todo: более данный механизм не используется, хотя можно было на его базе попробовать использовать ЯДКассу
  * 
  * @param string $type_payment Название тип оплаты (передается в $_GET['type'])
  */
 public function setPaymentMethod($type_payment)
 {
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/exrates.php';
     switch ($type_payment) {
         case 'sber_print':
             $this->payment_template = 'bank/tpl.bank_fiz_print.php';
             $this->type_menu_block = 'bank';
             $this->payment_type = exrates::BANK;
             break;
         case 'sber':
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/bank_payments.php';
             $this->payment_template = 'bank/tpl.bank_fiz.php';
             $this->type_menu_block = 'bank';
             $this->payment_type = exrates::BANK;
             $this->pm = new bank_payments();
             $this->pm->bank_code = __paramInit('int', null, 'bc', bank_payments::BC_SB);
             $this->pm->sum = __paramInit('float', null, 'Sum');
             $bp_reqv = bank_payments::GetLastReqv($this->pm->bank_code, $this->user['uid']);
             $this->pm->fio = $bp_reqv['fio'];
             $this->pm->address = $bp_reqv['address'];
             if (!$this->pm->bill_num) {
                 $this->pm->bill_num = bank_payments::GenBillNum($this->pm->bank_code, $this->user['uid'], $this->acc['id']);
             }
             if (isset($_POST['action']) && $_POST['action'] == 'payment') {
                 $this->pm->fio = substr(__paramInit('string', null, 'fio'), 0, 128);
                 $this->pm->is_gift = false;
                 $this->pm->address = substr(__paramInit('string', null, 'address'), 0, 255);
                 $this->pm->bank_code = __paramInit('int', null, 'bc');
                 $this->pm->sum = __paramInit('float', null, 'sum');
                 setlocale(LC_ALL, 'en_US.UTF-8');
                 // гребанная бета! (это не мое)
                 $this->pm->fm_sum = $bp->sum / EXCH_TR;
                 $id = __paramInit('int', null, 'id');
                 if ($this->pm->sum < 10) {
                     $alert['sum'] = 'Минимальная сумма платежа 10 рублей';
                 }
                 if (!$this->pm->fio) {
                     $alert['fio'] = 'Поле заполнено некорректно.';
                 }
                 if (!$this->pm->address) {
                     $alert['address'] = 'Поле заполнено некорректно.';
                 }
                 if (!$alert) {
                     if ($id) {
                         $this->pm->bank_code = null;
                         $this->pm->Update($id, " AND user_id = {$this->user['uid']} AND accepted_time IS NULL");
                     } else {
                         $this->pm->bill_num = bank_payments::GenBillNum($this->pm->bank_code, $this->user['uid'], $this->acc['id']);
                         $this->pm->user_id = $this->user['uid'];
                         $this->pm->op_code = 12;
                         $id = $this->pm->Add($error, true);
                     }
                     if (!$error) {
                         $prepare = $this->preparePayments($this->getTotalAmmountOrders());
                         if ($prepare) {
                             header("Location: /bill/payment/print/?type=sber_print&id={$id}");
                             exit;
                         }
                     }
                 }
                 $this->error = $alert;
             }
             $this->bank = bank_payments::GetBank($bp->bank_code);
             break;
         case 'bank_print':
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/reqv.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/reqv_ordered.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/city.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/country.php';
             if ($_GET['order'] > 0) {
                 $this->payment_template = 'bank/tpl.bank_jur_transfer.php';
                 $this->tid = intval($_GET['order']);
             } else {
                 $this->payment_template = 'bank/tpl.bank_jur_print.php';
             }
             $this->type_menu_block = 'bank';
             $this->payment_type = exrates::BANK;
             $this->bank_sum = $_SESSION['sum_bank_print'];
             $this->bank_id = $_SESSION['id_bank_print'];
             unset($_SESSION['sum_bank_print'], $_SESSION['id_bank_print']);
             break;
         case 'bank':
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/reqv.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/reqv_ordered.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/city.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/country.php';
             $this->payment_template = 'bank/tpl.bank_jur.php';
             $this->type_menu_block = 'bank';
             $this->payment_type = exrates::BANK;
             $this->pm = new reqv();
             $reqvByUid = $this->pm->GetByUid($this->user['uid']);
             $reqvs_ord = new reqv_ordered();
             $this->pm->billNum = sizeof($reqvs_ord->GetByUid($this->user['uid']));
             $this->pm->BindRequest($reqvByUid[0]);
             if (isset($_POST['action']) && $_POST['action'] == 'payment') {
                 $_POST['country'] = country::getCountryName($_POST['country_db_id']);
                 $_POST['city'] = city::getCityName($_POST['city_db_id']);
                 $this->pm->BindRequest($_POST);
                 $this->error = $this->pm->CheckInput();
                 if ($_POST['sum'] < 10) {
                     $this->error['sum'] = 'Минимальная сумма платежа 10 рублей';
                 }
                 if (!$this->error) {
                     $this->pm->user_id = $this->user['uid'];
                     if ($reqvByUid[0]['id'] > 0) {
                         $id = $reqvByUid[0]['id'];
                         $this->pm->Update($id, " AND user_id= {$this->user['uid']}");
                     } else {
                         $id = $this->pm->Add($err, true);
                     }
                     $prepare = $this->preparePayments($this->getTotalAmmountOrders());
                     if ($prepare) {
                         $_SESSION['id_bank_print'] = $id;
                         $_SESSION['sum_bank_print'] = intval($_POST['sum']);
                         header('Location: /bill/payment/print/?type=bank_print');
                         exit;
                     }
                 }
             }
             break;
         case 'alphabank':
             $this->payment_template = 'bank/tpl.alphabank.php';
             $this->type_menu_block = 'bank';
             $this->payment_type = exrates::BANK;
             if (isset($_POST['action']) && $_POST['action'] == 'reserve') {
                 header('Location: /bill/');
                 exit;
             }
             break;
         case 'card':
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/settings.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/card_account.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/cardpay.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/city.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_meta.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/onlinedengi_cards.php';
             $this->payment_template = 'card/tpl.card.php';
             $this->type_menu_block = 'card';
             $this->payment_type = exrates::CARD;
             $this->card_merchant = settings::GetVariable('billing', 'card_merchant');
             if ($this->card_merchant) {
                 $card_account = new card_account();
                 $card_account->account_id = $this->acc['id'];
                 $this->pm = new onlinedengi_cards();
                 if (!$this->not_init_pm) {
                     $this->pm->order_id = $card_account->Add();
                 }
             } else {
                 $this->pm = new card_account();
                 $this->pm->account_id = $this->acc['id'];
                 if (!$this->not_init_pm) {
                     $this->pm->order_id = $this->pm->Add();
                 }
                 $this->pm->reqv = sbr_meta::getUserReqvs($this->user['uid']);
             }
             break;
         case 'qiwi':
             $this->payment_template = 'terminal/tpl.qiwi.php';
         case 'svyasnoy':
             $this->payment_template = $this->payment_template ? $this->payment_template : 'terminal/tpl.svyasnoy.php';
         case 'euroset':
             $this->payment_template = $this->payment_template ? $this->payment_template : 'terminal/tpl.euroset.php';
             $this->type_menu_block = 'terminal';
             $this->payment_type = exrates::OSMP;
             if ($_POST['action'] == 'osmp') {
                 $prepare = $this->preparePayments($this->getTotalAmmountOrders());
                 if (!$this->test && $prepare !== false) {
                     header('Location: /bill/');
                     exit;
                 }
             } else {
                 $this->error = 'Ошибка создания списка оплаты';
             }
             break;
         case 'megafon_mobile':
             $this->payment_template = 'mobile/tpl.m_megafon.php';
         case 'beeline_mobile':
             $this->payment_template = $this->payment_template ? $this->payment_template : 'mobile/tpl.m_beeline.php';
         case 'mts_mobile':
             $this->payment_template = $this->payment_template ? $this->payment_template : 'mobile/tpl.m_mts.php';
         case 'matrix_mobile':
             $this->payment_template = $this->payment_template ? $this->payment_template : 'mobile/tpl.m_matrix.php';
             $this->type_menu_block = 'mobilesys';
             $this->payment_type = exrates::MOBILE;
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/qiwipay.php';
             $this->pm = new qiwipay($this->user['uid']);
             if ($_POST['operator'] == 'megafon' || $_POST['operator'] == 'beeline' || $_POST['operator'] == 'mts' || $_POST['operator'] == 'matrix') {
                 $phone = __paramValue('string', $_POST['phone']);
                 $phone = str_replace(array('+7', '+77'), '', $phone);
                 $err = 0;
                 switch ($_POST['operator']) {
                     case 'megafon':
                         if (!(strpos($phone, '34') === 0 || strpos($phone, '62') === 0 || strpos($phone, '82') === 0 || strpos($phone, '92') === 0 || strpos($phone, '35') === 0 || strpos($phone, '63') === 0 || strpos($phone, '83') === 0 || strpos($phone, '93') === 0 || strpos($phone, '69') === 0 || strpos($phone, '99') === 0)) {
                             $this->error['phone'] = 'Проверьте, верно ли выбран оператор. Указанный номер не относится в сети Мегафон';
                             $err = 1;
                         }
                         break;
                     case 'beeline':
                         if (!(strpos($phone, '90') === 0 || strpos($phone, '96') === 0)) {
                             $this->error['phone'] = 'Проверьте, верно ли выбран оператор. Указанный номер не относится в сети Beeline';
                             $err = 1;
                         }
                         break;
                     case 'mts':
                         if (!(strpos($phone, '91') === 0 || strpos($phone, '98') === 0)) {
                             $this->error['phone'] = 'Проверьте, верно ли выбран оператор. Указанный номер не относится в сети МТС';
                             $err = 1;
                         }
                         break;
                     case 'matrix':
                         if (!(strpos($phone, '958') === 0)) {
                             $this->error['phone'] = 'Проверьте, верно ли выбран оператор. Указанный номер не относится в сети Matrix';
                             $err = 1;
                         }
                         break;
                 }
                 if (!$err) {
                     $sum = __paramValue('float', $_POST['sum']);
                     $request = array('phone' => $phone, 'sum' => $sum, 'oper_code' => $_POST['operator']);
                     $created = $this->pm->createBill($request);
                     if (!$created) {
                         $prepare = $this->preparePayments($this->getTotalAmmountOrders());
                         if (!$this->test && $prepare !== false) {
                             header('Location: /bill/');
                             exit;
                         }
                     } else {
                         $this->error = $created;
                     }
                 }
             }
             break;
         case 'webpay':
             $this->type_menu_block = 'psys';
             $this->payment_type = exrates::WEBM;
             $this->payment_template = 'psys/tpl.webpay.php';
             break;
         case 'qiwipurse':
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/qiwipay.php';
             $this->pm = new qiwipay($this->user['uid']);
             $this->type_menu_block = 'psys';
             $this->payment_type = exrates::QIWIPURSE;
             $this->payment_template = 'psys/tpl.qiwipurse.php';
             if ($_POST['action'] == 'qiwipurse') {
                 $phone = __paramValue('string', $_POST['phone']);
                 $phone = str_replace(array('+7', '+77'), '', $phone);
                 $sum = __paramValue('float', $_POST['sum']);
                 $request = array('phone' => $phone, 'sum' => $sum);
                 $created = $this->pm->createBill($request);
                 if (!$created) {
                     $prepare = $this->preparePayments($this->getTotalAmmountOrders());
                     if (!$this->test && $prepare !== false) {
                         header('Location: /bill/');
                         exit;
                     }
                 } else {
                     $this->error = $created;
                 }
             }
             break;
         case 'yandex':
             $this->type_menu_block = 'psys';
             $this->payment_type = exrates::YM;
             $this->payment_template = 'psys/tpl.yandex.php';
             break;
         case 'webmoney':
             $this->type_menu_block = 'psys';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pmpay.php';
             $this->payment_type = exrates::WMR;
             $this->payment_template = 'psys/tpl.webmoney.php';
             $this->pm = new pmpay();
             break;
         case 'okpay':
             $this->type_menu_block = 'psys';
             $this->payment_type = exrates::OKPAY;
             $this->payment_template = 'psys/tpl.okpay.php';
             break;
     }
     $this->type_payment = $type_payment;
 }