Esempio n. 1
0
 /**
  * ищет фрилансеров у которых заканчивается срок размещения объявления
  */
 public static function autoPayedReminder($days = 1, $interval = 'days', $test = false)
 {
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/bar_notify.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/billing.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/smail.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/professions.php";
     global $DB;
     $sql = "\n                SELECT ufa.*, a.sum, a.id as acc_id, p.name as prof_name, u.uname, u.login, u.email, u.usurname, u.subscr, u.is_banned, substr(u.subscr::text,16,1) = '1' as bill_subscribe, ufl.to_date\n                FROM users_first_page_autopay ufa\n                INNER JOIN (\n                    SELECT user_id, profession, MAX(from_date + to_date) as to_date\n                    FROM users_first_page\n                    WHERE payed = true\n                        AND ordered = true\n                    GROUP BY user_id, profession\n                ) as ufl\n                ON ufl.user_id = ufa.user_id\n                AND ufl.profession = ufa.profession ";
     if (!$test && $interval == 'days') {
         $sql .= "\n                AND  ufl.to_date >= now()::date + interval '{$days} days' AND  ufl.to_date < now()::date + interval '" . ($days + 1) . " days'";
     } elseif (!$test && $interval == 'hour') {
         $sql .= "\n                AND  ufl.to_date >= now() + interval '{$days} hour' AND  ufl.to_date < now() + interval '" . ($days + 1) . " hour'";
     } else {
         $uid = $DB->val("SELECT uid FROM users WHERE login = ?", $test);
         $sql .= $DB->parse(" AND  ufl.to_date >= now()::date AND ufl.user_id = ?", $uid);
     }
     $sql .= "\n                INNER JOIN account a ON a.uid = ufa.user_id\n                INNER JOIN professions p ON p.id = ufa.profession\n                INNER JOIN users u ON u.uid = ufa.user_id AND u.is_banned = B'0'";
     $res = $DB->rows($sql);
     if (!$res) {
         return false;
     }
     $price = self::getPrice();
     $users = array();
     foreach ($res as $user) {
         $cost = $price[$user['profession']] ? $price[$user['profession']] : $price['n'];
         $users[$user['user_id']]['profs'][] = array('id' => $user['profession'], 'cost' => $cost, 'name' => $user['prof_name'], 'to_date' => $user['to_date']);
         $users[$user['user_id']]['userData'] = $user;
         $users[$user['user_id']]['user'] = $user;
         $users[$user['user_id']]['sum_cost'] += $cost;
     }
     if (!$users) {
         return;
     }
     // если остается от 1 до 2 дней до окончания, то формируем списки заказов
     if ($days == 1) {
         $mail = new smail();
         foreach ($users as $uid => $user) {
             $bill = new billing($uid);
             $bill->cancelAllNewAndReserved();
             $barNotify = new bar_notify($uid);
             // отдельный блок для каждой профессии
             foreach ($user['profs'] as $userProf) {
                 $tarif = self::getBillingTarif($userProf['id']);
                 $options = array('prof_id' => $userProf['id'], 'week' => 1);
                 $bill->setOptions($options);
                 $create = $bill->create($tarif, true, false);
                 if (!$create) {
                     continue;
                 }
                 $queue[] = $create;
             }
             $billing = new billing($uid);
             if (!empty($queue)) {
                 //Проталкиваем дальше автопродление для оплаты
                 $billing->preparePayments($user['sum_cost'], false, $queue);
                 $complete = billing::autoPayed($billing, $user['sum_cost']);
                 $user['prof'] = $user['profs'];
                 if ($complete) {
                     $barNotify->addNotify('bill', '', 'Услуга успешно продлена.');
                 } else {
                     if ($interval == 'days') {
                         // Первая попытка
                         $barNotify->addNotify('bill', '', 'Ошибка списания, услуга не продлена.');
                     } else {
                         // Вторая попытка не удачная
                         $barNotify->addNotify('bill', '', 'Ошибка списания, автопродление отключено.');
                     }
                 }
             }
         }
     }
 }
Esempio n. 2
0
         //Здесь счет создастся при редактировании конкурса
         $items['contest']['no_pro'] = $tmpPrj->isEdit() ? 0 : 3300;
         $items['contest']['pro'] = $tmpPrj->isEdit() ? 0 : 3000;
         $op_code = is_pro() ? new_projects::OPCODE_KON : new_projects::OPCODE_KON_NOPRO;
     }
     $op_code_pay = new_projects::OPCODE_PAYED_KON;
 } else {
     $op_code = new_projects::OPCODE_PAYED;
     $op_code_pay = new_projects::OPCODE_PAYED;
 }
 if ($items) {
     $bill->start();
     // Конкурс
     if ($items['contest'] > 0) {
         $option['items'] = array('contest' => $items['contest']);
         $bill->setOptions($option);
         $success = $bill->create($op_code, 0, false);
         $items['contest'] = 0;
     }
     // Создаем услуги по отдельности
     foreach ($items as $opt => $value) {
         if (is_array($value) && $value['no_pro'] <= 0) {
             continue;
         }
         if ($value <= 0) {
             continue;
         }
         /* Почему-то этот код здесь был. Не купятся услуги, если при редактировании не покупается логотип
            * Проверка на наличие ранее купленных должна быть именно тут, до создания счета
            * Делалось, видимо, чтобы деньги не списывались при редактировании, но отказ обрабатывать - не выход
             if($opt == 'hide' && $tmpPrj->isEdit()) {
Esempio n. 3
0
 /**
  * Верификация через FF.RU.
  * Шаг 2. Получения кода авторизация и общение с ff.ru
  * 
  * @global type $DB
  * @param type $uid
  * @param type $code
  * @return boolean
  */
 public function ffCommit($uid, $code)
 {
     global $DB;
     $requestConfig = array('adapter' => 'HTTP_Request2_Adapter_Curl', 'connect_timeout' => 20, 'protocol_version' => '1.1', 'ssl_verify_peer' => false, 'ssl_verify_host' => false, 'ssl_cafile' => null, 'ssl_capath' => null, 'ssl_passphrase' => null);
     $user = new users();
     $user->GetUserByUID($uid);
     if (empty($user->uid)) {
         $this->error = 'Вы не авторизованы';
         return false;
     }
     $prev = $DB->row("SELECT * FROM verify_ff WHERE user_id = ? ORDER BY req_time DESC LIMIT 1", $uid);
     if ($prev['result'] != 'f') {
         $this->error = 'Вам необходимо использовать такую же учетную запись с который вы начинали верификацию.';
         return false;
     }
     // Для тестирования на бете/альфе
     if (is_release()) {
         // меняем код авторизации на токен
         $request = new HTTP_Request2('https://ff.ru/oauth/token', HTTP_Request2::METHOD_POST);
         $request->setConfig($requestConfig);
         $request->setHeader('Content-Type', 'application/x-www-form-urlencoded');
         $request->addPostParameter('client_id', FF_CLIENT_ID);
         $request->addPostParameter('client_secret', md5(FF_CLIENT_ID . FF_CLIENT_SECRET));
         $request->addPostParameter('grant_type', 'authorization_code');
         $request->addPostParameter('code', $code);
         $request->addPostParameter('redirect_uri', self::FF_REDIRECT_URI);
         $resp = $request->send();
         //var_dump($resp); // del
         $body = json_decode(iconv('UTF-8', 'CP1251', $resp->getBody()));
         if ($resp->getStatus() == 200) {
             // меняем токен на паспортные данные
             $request = new HTTP_Request2('https://ff.ru/oauth/userinfo', HTTP_Request2::METHOD_GET);
             $request->setConfig($requestConfig);
             $request->setHeader('Authorization', 'Bearer ' . $body->access_token);
             $url = $request->getUrl();
             $url->setQueryVariable('scope', 'passport question account video');
             $resp = $request->send();
             $body = json_decode($resp->getBody());
             $DB->query("UPDATE verify_ff SET body = ? WHERE id = ?", $resp->getBody(), $prev['id']);
             if ($resp->getStatus() == 200) {
                 if (empty($body->passport_sn)) {
                     $this->error = 'Необходимо подтвердить личность в личном кабинете сайта FF.RU.';
                     return false;
                 }
                 $fio = $body->last_name . ' ' . $body->first_name . ' ' . $body->patronimic;
                 $this->data = array('fio' => iconv('UTF-8', 'CP1251', htmlentities($fio, ENT_QUOTES, "UTF-8")), 'birthday' => dateFormat('Y-m-d', (string) $body->birth_date), 'idcard_name' => 'Паспорт', 'idcard' => $body->passport_sn, 'idcard_from' => dateFormat('Y-m-d', (string) $body->passport_date), 'idcard_to' => NULL, 'idcard_by' => iconv('UTF-8', 'CP1251', htmlentities($body->passport_issuer, ENT_QUOTES, "UTF-8")), 'mob_phone' => '+7' . $body->cellular);
                 //var_dump($this->data);
             } else {
                 if (empty($body->error)) {
                     $this->error = 'Ошибка при получении данных с FF.RU.';
                 } else {
                     $this->error = 'Ошибка при получении данных с FF.RU (' . $body->error . ' / ' . $body->error_description . '). ';
                 }
                 $this->error .= $resp->getStatus() . '.';
                 return false;
             }
         } else {
             if (empty($body->error)) {
                 $this->error = 'Ошибка при подключении к сервису FF.RU.';
             } else {
                 $this->error = 'Ошибка при подключении к сервису FF.RU (' . $body->error . ' / ' . $body->error_description . '). ';
             }
             $this->error .= $resp->getStatus() . '.';
             return false;
         }
     } else {
         $this->data = array('fio' => 'Фамилия Имя Отчество', 'birthday' => dateFormat('Y-m-d', (string) '1950-01-01'), 'idcard_name' => 'Паспорт', 'idcard' => '1900 100001', 'idcard_from' => dateFormat('Y-m-d', (string) '2000-01-01'), 'idcard_to' => NULL, 'idcard_by' => 'УВД г. Города', 'mob_phone' => '+79' . rand(100000000, 900000000));
     }
     $this->is_pro = true;
     if ($user->is_pro != 't' && empty($prev['bill_id'])) {
         //переносим сюда списание средств
         $account = new account();
         //                $billId  = NULL;
         //                $transactionId = $account->start_transaction($uid);
         //                $description   = 'Верификация через сервис FF.RU';
         //                $buyResult     = $account->Buy($billId, $transactionId, self::FF_OP_CODE, $uid, $description, $description, 1, 0);
         //                if ( $buyResult ) {
         //                    $this->error .= $buyResult;
         //                    return false;
         //                }
         require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/billing.php";
         $bill = new billing($uid);
         $bill->setOptions(array('prev' => $prev, 'data' => $this->data));
         $create_id = $bill->create(self::FF_OP_CODE);
         $this->is_pro = false;
         if (!$create_id) {
             $this->error .= 'Ошибка создания услуги';
             return false;
         } else {
             return true;
             //header("Location: /bill/orders/");
             exit;
         }
     }
     $DB->query("UPDATE verify_ff SET is_pro = ?, bill_id = ?  WHERE id = ?", $user->is_pro, $billId, $prev['id']);
     if ($this->verify($uid)) {
         $DB->query("UPDATE verify_ff SET result = TRUE WHERE id = ?", $prev['id']);
         //$account->commit_transaction($transactionId, $uid);
         return true;
     }
 }