/** * Принимает от 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']); }
/** * Вывод страницы для оплаты пластиковыми картами. */ 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"); } }
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; } }
/** * Инициализируем тип оплаты на странице. * * @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; }