/** * Основная функция для пополнения. В нее нужно передать POST данны, которые пришли от веб-кошелька * * @param array массив с данным от webpay * @return успех */ public function income($data) { global $DB; $this->_fields = array(); $id = $DB->insert('webpay_log', array('request' => serialize($data)), 'id'); if (empty($data['amount']) || empty($data['userid']) || empty($data['userid_extra']) || empty($data['paymentid']) || empty($data['key']) || empty($data['paymode'])) { $this->_error($id, self::ERR_DATA); return false; } $amount = floatval($data['amount']); $login = (string) $data['userid_extra']; $this->_fields['payment_id'] = $paymentid = (string) $data['paymentid']; if ($amount <= 0) { $this->_error($id, self::ERR_AMOUNT); return false; } $this->_fields['amount'] = $amount; if ($data['key'] != md5($data['amount'] . $data['userid'] . $data['paymentid'] . onlinedengi_cards::SECRET)) { $this->_error($id, self::ERR_SECRET); return false; } $user = new users(); $user->GetUser($login); if (empty($user->uid)) { $this->_error($id, self::ERR_USER); return false; } $this->_fields['user_id'] = $user->uid; if ($DB->val("SELECT COUNT(*) FROM webpay_log WHERE payment_id = ?", $paymentid)) { $this->_success($id, true); } else { $account = new account(); $account->GetInfo($user->uid); $comment = "Пополнение через Веб-кошелек"; if ($account->deposit($op_id, $account->id, $amount, $comment, self::PAYMENT_SYS_CODE, $amount)) { $this->_error($id, self::ERR_DEPOSIT); return false; } $this->_fields['billing_id'] = $op_id; $this->_success($id); } return true; }
/** * Пополняет FM-счет. * * @param string $error сюда пишет ошибку. * @param array $bill qiwi-счет * @param float $sum сумма попоплнения * @return boolean успех? */ function completeBill(&$error, $bill, $sum) { $account = new account(); $descr = "Пополнение через систему QIWI.кошелек -- сумма: {$sum} руб., телефон: {$bill['phone']}, счет #{$bill['id']}"; $error = $account->deposit($op_id, $bill['account_id'], $sum, $descr, self::PAYMENT_SYS, $sum, 12); if ($error) { return false; } return $this->deleteBill($error, $bill['id']); }
} if ($fsocket == true) { $header = 'POST /ipn-verify.html HTTP/1.0' . "\r\n" . 'Host: www.okpay.com' . "\r\n" . 'Content-Type: application/x-www-form-urlencoded' . "\r\n" . 'Content-Length: ' . strlen($request) . "\r\n" . 'Connection: close' . "\r\n\r\n"; @fputs($fp, $header . $request); $string = ''; while (!@feof($fp)) { $res = @fgets($fp, 1024); $string .= $res; if ($res == 'VERIFIED' || $res == 'INVALID' || $res == 'TEST') { $result = $res; break; } } @fclose($fp); } if ($result == 'VERIFIED') { if ($_POST['ok_txn_status'] == 'completed') { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/stdf.php"; require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/account.php"; $account = new account(); $account->GetInfo($_POST['ok_f_uid']); $descr = "OKPAY #" . $_POST['ok_txn_id'] . " на кошелек " . $_POST['ok_receiver_wallet'] . " OKPAYID: " . $_POST['ok_payer_id'] . " сумма - " . $_POST['ok_item_1_price'] . ","; $descr .= " обработан " . $_POST['ok_txn_datetime'] . ", счет - " . $_POST['ok_f_bill_id']; $account->deposit($op_id, $_POST['ok_f_bill_id'], $_POST['ok_item_1_price'], $descr, 14, $_POST['ok_item_1_price'], 12); } } elseif ($result == 'INVALID') { } elseif ($result == 'TEST') { } else { header("HTTP/1.0 404 Not Found"); exit; }
$customerNumber = 120824; //$_GET['cn']; $ammount = 569; //$_GET['ammount']; $invoiceId = 2000246796791.0; //$_GET['invoiceId']; $payments = 3; $orderId = 367369; $params['invoiceId'] = $invoiceId; /* 3 => self::PAYMENT_YD, 6 => self::PAYMENT_AC, 10 => self::PAYMENT_WM, 16 => self::PAYMENT_AB, 17 => self::PAYMENT_SB */ $descr = "Платеж через Яндекс.Кассу. Сумма - {$ammount}, номер покупки - {$invoiceId}"; //------------------------------------------------------------------------------ //Заносим деньги на ЛС $account = new account(); $error = $account->deposit($op_id, $customerNumber, $ammount, $descr, $payments, $ammount, 12); if (!$error) { //Пробуем купить заказ за который занесли деньги выше if ($orderId > 0) { $billing = new billing($account->uid); $billing->buyOrder($orderId, 12, $params); } exit; } echo $error; exit;
/** * Выполняет платеж */ private function addOperation() { global $DB; $DB->error_output = false; $shopParams = $this->getShopParams(); $payment = $DB->row(' SELECT aoy.id, aoy.descr, ao.id AS acc_op_id FROM account_operations_yd AS aoy LEFT JOIN account_operations AS ao ON ao.id = aoy.acc_op_id AND ao.billing_id = aoy.billing_id WHERE invoice_id = ?', $this->params['invoiceId']); //Пополнение и покупка уже были отвечаем успехом if ($payment['acc_op_id'] > 0) { return 0; } $DB->start(); $op_id = 0; $data = array(); $billing = null; $account = new account(); //Заносим деньги на ЛС $error = $account->deposit($op_id, $this->params['customerNumber'], $shopParams['ammount'], $payment['descr'], array_search($this->params['paymentType'], $this->payments), $this->params['orderSumAmount'], $shopParams['op_code']); //Если все без ошибок и ЛС зачислены то пробуем купить заказ if (!$error && $op_id > 0) { $success = true; $data['acc_op_id'] = $op_id; //Пробуем купить заказ за который занесли деньги выше //Если заказ уже куплен или отменен то ничего не делаем но получим успех if ($this->params['orderId']) { $billing = new billing($account->uid); if ($success = $billing->buyOrder($this->params['orderId'], $shopParams['op_code'], $this->params)) { $data['bill_reserve_id'] = $this->params['orderId']; } } //Фиксируем ID операции пополнения ЛС и ID купленного заказа при наличии if ($success) { $DB->update('account_operations_yd', $data, 'id = ?i', $payment['id']); $DB->commit(); return 0; } else { $this->message = sprintf('Failed to purchase order #%s', $this->params['orderId']); } } else { $this->message = 'Failed deposit to account'; } //Не удалось приобрести заказ откатываем транзакцию //и возвращаем ошибку что приводит к возврату средств $DB->rollback(); //Если отказ принять деньги то и отменяем заказ //чтобы не висел в истории if ($billing && $this->params['orderId'] > 0) { $billing->cancelReserveById($this->params['orderId']); } //Ошибка, возврат средств return 100; }
/** * Резервирование денег в текущей СБР для тестеров. * * @param account $account инициализированный экземпляр класса account. * * @return bool успешно? */ public function testReserve($account) { if ($this->getReserveSum()) { $err = $account->deposit($op_id, $account->id, 0, "Тестовое резервирвание на счет СБР, {$GLOBALS['EXRATE_CODES'][$this->cost_sys][2]}", $this->cost_sys - 1, $this->reserve_sum, self::OP_RESERVE, $this->id); } if ($err) { echo $err; } return !$err; }
/** * Выполняет покупку. */ public function order() { //Запрещаем вывод ошибок $this->db()->error_output = false; $orderid = $_GET['orderid']; if (!$orderid) { exit; } $json_data = array('status' => '0', 'time' => time()); $payment = $this->getPayment($orderid); if ($payment) { $data = isset($_REQUEST['data']) && is_array($_REQUEST['data']) ? $_REQUEST['data'] : array(); $sig = $this->getSig($payment['price'], $orderid, $payment['billing_id'], $data); if ($sig == $_GET['sig']) { $json_data['status'] = '1'; $op_id = 0; //Занесли деньги $account = new account(); $error = $account->deposit($op_id, $payment['billing_id'], $payment['price'], "Платеж через \"Плати потом\". Сумма - {$payment['price']}, номер покупки - {$orderid}", self::PAYMENT_CODE, $payment['price']); if (!$error) { //Пробуем купить $billing = new billing($account->uid); $billing->buyOrder($payment['bill_reserve_id'], 12, array()); $this->db()->query("DELETE FROM {$this->TABLE} WHERE id = ?", $orderid); $memBuff = new memBuff(); $memBuff->delete('platipotom_max_price_' . $account->uid); } } } return $json_data; }
public static function acknowledgement($msg, $account) { $m = GsonCrypt::verify($msg, $account); if (!$m) { return array(0, "Acknowledgement message to destination bank is not authentic"); } $m = Gmsg::extract($m); if (!$m || !is_array($m)) { return array(0, "Destination bank did not extract the acknowledgement message correctly"); } $acc = Tools::address($m['merchant']); if ($m['acknowledgement']['status'] == 0) { $r = account::deposit($m['coins'], $acc['account']); $msg = $r ? "Payment was successful" : "Deposit to merchant's account failed"; $m['acknowledgement']['message'] = $msg; $status = $r ? 1 : 0; } else { $status = 0; $msg = $m['acknowledgement']['message']; } self::log($m); return array($status, "{$msg}"); }
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/account.php"; $account = new account(); if (isset($_POST['cancel'])) { $back_url = $_SESSION['referer']; unset($_SESSION['referer']); header("Location: {$back_url}"); exit; } elseif (isset($_POST['success'])) { $sum = $_SESSION['post_payment']['sum']; $account = new account(); $account->GetInfo($_SESSION['post_payment']['ok_f_uid']); //$descr = "OKPAY #".$_SESSION['post_payment']['ok_txn_id']." на кошелек ".$_SESSION['post_payment']['ok_receiver_wallet']." OKPAYID: ".$_SESSION['post_payment']['ok_payer_id']." сумма - ".$_SESSION['post_payment']['ok_item_1_price'].","; //$descr .= " обработан ".$_SESSION['post_payment']['ok_txn_datetime'].", счет - ".$_SESSION['post_payment']['ok_f_bill_id']; $descr = "OKPAY #11 на кошелек OK460571733 OKPAYID: 1111 сумма - " . $_SESSION['post_payment']['ok_item_1_price'] . ","; $descr .= " обработан " . date("Y-m-d H:i:s") . ", счет - " . $_SESSION['post_payment']['ok_f_bill_id']; $account->deposit($op_id, $_SESSION['post_payment']['ok_f_bill_id'], $_SESSION['post_payment']['ok_item_1_price'], $descr, 14, $_SESSION['post_payment']['ok_item_1_price'], 12); header("Location: /bill/"); exit; } $_SESSION['post_payment'] = $_POST; $_SESSION['referer'] = $_SERVER['HTTP_REFERER']; ?> <h2>Тестовая оплата OKPAY</h2> <p> Оплата услуг аккаунт #<?php echo get_uid(false); ?> , сумма оплаты <?php echo to_money($_POST['ok_item_1_price'], 2); ?>
$ok = $account->GetInfo($uid, true); $results['GetInfo'] = (int) $ok; if ($ok) { $sum = 14320; $scomment = 'Пополнение счета'; $ucomment = 'Пополнение счета'; $trs_sum = $sum; $op_date = date('c'); //, strtotime($_POST['date'])); //$results['depositEx'] = $account->depositEx($account->id, $sum, $scomment, $ucomment, 135, $trs_sum, NULL, $op_date); $op_id = 0; //$account->Buy(&$id, $transaction_id, $op_code, $uid, $ucomment, $scomment, $ammount, $commit, $payment_sys); $fromcode = '"TEST"'; $ammount = $sum; $paymentDateTime = $op_date; $orderNumber = 134; $descr = "ЯД с кошелька {$fromcode} сумма - {$ammount}, обработан {$paymentDateTime}, номер покупки - {$orderNumber}"; $results['deposit'] = $account->deposit($op_id, $account->id, $sum, $descr, 3, $sum, 12); } //------------------------------------------------------------------------------ //$profiler->start('fill_frl_mem'); //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ //$profiler->stop('fill_frl_mem'); //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ array_walk($results, function (&$value, $key) { $value = sprintf('%s = %s' . PHP_EOL, $key, $value); }); print_r(implode('', $results)); exit;
} else { $redirect_part = "?verror=1&vuse=card"; } ?> <html><body><script>window.close();</script></body></html> <?php exit; } elseif ($_SESSION['quickpro_card_orderid'] == $_GET['orderId']) { // Быстрая покупка pro $walletAlpha->api->getAccessData('bind'); $status = $walletAlpha->api->getOrderStatus($_SESSION['quickpro_card_orderid']); if ($status['OrderStatus'] == API_AlphaBank::STATUS_SUCCESS_PAYMENT) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/account.php"; $account = new account(); $descr = "Карта " . $status['Pan'] . " сумма - " . $_SESSION['quickpro_card_sum'] . ", номер покупки - " . $_GET['orderId']; $account->deposit($op_id, $_SESSION['quickpro_card_billing'], $_SESSION['quickpro_card_sum'], $descr, 20, $_SESSION['quickpro_card_sum']); $_SESSION['quickpro_card_orderid'] = 'done'; } ?> <html><body><script>window.close();</script></body></html> <?php exit; } else { header("Location: /404.php"); exit; } } } else { header("Location: /404.php"); exit; }
case 0: $account->depositEx($account->id, $sum, $scomment, $ucomment, 13, $trs_sum, NULL, $op_date); break; case 1: if ($for && $fort) { $account->depositEx($account->id, $sum, $scomment, $ucomment, 12, $for, $fort, $op_date); } else { $error = "Укажите исходные валюты! Валюту в FM указывать не обязательно!"; } break; case 2: $account->depositBonusEx($account->id, $sum, $scomment, $ucomment, 13, $op_date); break; case 3: if ($for && $fort && $nrid) { $account->deposit($op_id, $account->id, $sum, $ucomment, $fort, $for, 36, $nrid, $op_date); } else { $error = "Укажите исходные валюты и номер СбР!"; } } header('Location: /siteadmin/bill/?login='******'num_operation'] = trim($_POST['num_operation']); $filter['date_from'] = $_POST['date_from'] != "" ? $_POST['date_from'] : false; $filter['date_to'] = $_POST['date_to'] != "" ? $_POST['date_to'] : false; $filter['sort'] = intval($_POST['sort']); $filter['sum_from'] = $_POST['sum_from'] != "" ? intval($_POST['sum_from']) : false;
/** * Модератор отвергает рассылку, деньги возращаются юзеру. * * @param integer $id ИД Рассылки * @param string $denied_reason Причина отказа * @param string $error Возвращает сообщение об ошибке * @return integer 1 - все сработало как надо, 0 - ошибка */ public function Deny($id, $reason) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/messages.php"; require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/account.php"; require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/users.php"; $this->error = ''; global $DB; $sql = 'SELECT * FROM mass_sending WHERE id = ? AND is_accepted IS NULL'; if (!($row = $DB->row($sql, $id))) { $this->error = 'Рассылка выбрана неправильно'; return FALSE; } // если рассылка не оплачена, значит она была создана после введения нового счета // в будущем, когда все старые (сразу оплаченные) рассылки уйдут, то можно логику этой функции заменить на логику из Deny_new if (!$row['account_op_id']) { return $this->Deny_new($id, $reason, $row); } $account = new account(); $account->GetInfo($row['user_id']); if (!$account->id) { $this->error = 'Ошибка. Не опеределен счет пользователя.'; return FALSE; } $users = new users(); $user = $users->GetName($row['user_id'], $e); $login = $user['login']; $users->GetUser($login); $admin_id = users::GetUid($err, 'admin'); if (!($error = $account->deposit($acc_op_id, $account->id, $row['pre_sum'], 'Рассылка по разделам. Возврат денег.', 0, 0, self::OPER_CODE_RETURN, 0))) { $text = "Здравствуйте!\n\nАдминистрацией нашего ресурса было принято решение отказать Вам в рассылке по каталогу по причине:\n\n\"\n" . stripslashes($reason) . "\n\"\n\nПотраченные деньги на рассылку возвращены на Ваш личный счет.\n\nЭто сообщение было выслано автоматически и ответ на него не будет рассматриваться.\n\nНадеемся на понимание, Команда Free-lance.ru.\n\nИсходный текст Вашей рассылки:\n\n---\n" . html_entity_decode($row['msgtext'], ENT_QUOTES) . "\n--- "; // уведомляем автора о разрешении рассылки $smail = new smail(); $smail->subject = "Ваша заявка на рассылку не прошла модерацию"; $smail->recipient = $users->uname . " " . $users->usurname . " [" . $users->login . "] <" . $users->email . ">"; $reason = $smail->ToHtml($reason); $body = "Ваша заявка на рассылку была отклонена модераторами сайта Free-lance.ru.<br/>\n Причина:<br/>\n ---<br/>\n {$reason}<br/>\n ---<br/>\n "; $smail->message = $smail->GetHtml($users->uname, $body, array('header' => 'default', 'footer' => 'simple')); $smail->send('text/html'); messages::Add($admin_id, $login, $text, '', 1); if (!$DB->query("UPDATE mass_sending SET denied_reason = ?, is_accepted=false, decided_time=now() WHERE id=?", $reason, $id)) { $this->error = 'Произошла ошибка при установлении статуса "Отказано". Но деньги возвращены.'; return FALSE; } } else { $this->error = 'Какой-то сбой. Деньги не возвращены.'; return FALSE; } return TRUE; }
/** * Проверяет обновления аккредитивов в статусах form|new. * Если статус изменился на cover, отмечает резерв в соответствующей сделке * * @param type $cntIn * @param type $cntOut * @return boolean */ public static function checkStatus($ids = array(), &$cntIn = 0, &$cntOut = 0) { $db = new DB('master'); $sql = "SELECT lc.*, s.emp_id, s.frl_id FROM pskb_lc lc\n INNER JOIN sbr s ON s.id = lc.sbr_id AND s.is_draft = false\n WHERE lc_id IS NOT NULL AND state IN ('form', 'new')"; if ($ids) { $sql .= " AND lc_id IN (?l) "; $data = $db->rows($sql, $ids); } else { $data = $db->rows($sql); } if (!$data) { return false; } $cntIn = count($data); $list = array(); foreach ($data as $row) { $list[] = intval($row['lc_id']); } $pskb = new pskb(); $resp = $pskb->_checks(json_encode(array('id' => $list))); foreach ($data as $row) { if (!$row['lc_id'] || !isset($resp[$row['lc_id']])) { continue; } $lc = $resp[$row['lc_id']]; if ($lc->state == $row['state']) { continue; } $up_data = array('state' => $lc->state, 'stateReason' => $lc->stateReason); switch ($lc->state) { case self::STATE_NEW: // справедливо только для статуса form if ($row['state'] != pskb::STATE_FORM) { continue; } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php'; $smail = new smail(); $smail->SbrReservedMoney($row['sbr_id'], $row['emp_id']); $up_data['created'] = 'NOW()'; break; case self::STATE_COVER: // покрыть можно только из статуса new if ($row['state'] != pskb::STATE_NEW) { continue; } $time = time(); $date = date('c', $time); $descr = "ПСКБ аккредитив #{$row['lc_id']};" . " платежная cистема пользователя #{$row['ps_emp']}: сумма оплаты {$row['sum']} руб.;" . " обработан {$date}"; $account = new account(); $account->GetInfo($row['emp_id'], true); $ammount = $row['sum']; $op_code = sbr::OP_RESERVE; $amm = 0; $descr .= ' СбР #' . $row['sbr_id']; $error = $account->deposit($op_id, $account->id, $amm, $descr, onlinedengi::PAYMENT_SYS, $ammount, $op_code, $row['sbr_id']); $up_data['covered'] = 'NOW()'; break; case self::STATE_EXP_COVER: case self::STATE_EXP_EXEC: case self::STATE_EXP_END: break; case self::STATE_END: break; case self::STATE_ERR: $up_data['dol_is_failed'] = null; break; default: continue; } if (!$error) { $db->update('pskb_lc', $up_data, 'lc_id = ?', $row['lc_id']); } $cntOut++; } // отметить резерв return true; }
public static function process($msg) { $status = 1; $sender = ""; $res = ""; $umsg = GsonCrypt::unseal($msg); if (!$umsg) { $ex = Gmsg::extract($msg); if ($ex && is_array($ex)) { $umsg = $msg; } else { $status = 0; $res = "Unable to decode the message"; } } if ($umsg) { $parts = self::extract($umsg); $action = $parts["op"]; $mess = $parts["msg"]; $sender = $parts["sender"]; $recipient = $parts["recipient"]; if ($recipient && !account::exists($recipient)) { $status = 0; $res = "The recipient account {$recipient} does not reside here"; $rply = Gmsg::create(array("status" => $status, "response" => $res)); } else { switch ($action) { case "mrequest": $r = transaction::request($mess['m'], $sender, $mess['k']); $rply = Gmsg::create(array("status" => $r[0], "response" => $r[1])); break; case "mstatus": $r = transaction::mercorder($mess['m'], $sender, $mess['k']); $rply = Gmsg::create(array("status" => $r[0], "response" => $r[1])); break; case "statusrequest": $r = transaction::status($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "paymentrequest": $r = transaction::request($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "pullrequests": $r = transaction::pullrequests($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "pullcoins": $r = account::pullcoins($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "clearrequests": $r = transaction::clearrequests($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "notification": $r = transaction::notification($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "acknowledgement": $r = transaction::acknowledgement($mess, config::$SRA); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "deposit": $r = account::deposit($mess, $recipient); if (!$r) { $status = 0; $res = "Deposit failed"; } else { $res = "Deposit was successful"; } break; case "revokecert": $net = new Gnet(); $rply = $net->send("{$mess}", true); $net = null; break; case "signcert": $net = new Gnet(); $rply = $net->send("{$mess}", true); $net = null; break; case "register": $k = GsonCrypt::getcert(); if (is_readable($k)) { $res = gio::readfile($k); if (!$res) { $status = 0; } } $rply = Gmsg::create(array("status" => $status, "cert" => $res, "name" => config::$accountId, "account" => account::makenew())); break; case "create": $status = gio::savetofile($mess, GsonCrypt::getkey("{$sender}")); $res = $status ? "successful" : "failed"; $rply = Gmsg::create(array("status" => $status, "response" => $res)); break; case "remove": $res = ""; $ret = array("status" => $status, "response" => $res); $rply = self::create($ret); $rply = GsonCrypt::seal("{$rply}", "{$sender}"); unlink(GsonCrypt::getkey($sender)); break; case "exchangecert": $status = 0; if (!file_exists(GsonCrypt::getcert("{$sender}"))) { $status = gio::saverawfile($mess, GsonCrypt::getcert("{$sender}")); } $k = GsonCrypt::getcert(); if ($status && is_readable($k)) { $res = gio::readfile($k); if (!$res) { $status = 0; } } $rply = Gmsg::create(array("status" => $status, "cert" => $res)); break; case "reverb": $res = $mess; break; default: $status = 0; $res = "Invalid Operation!"; } } } if (!isset($rply)) { $ret = array("status" => $status, "response" => $res); $rply = self::create($ret); $rply = $sender ? GsonCrypt::seal("{$rply}", "{$sender}") : "{$rply}"; } return $rply; }