Пример #1
0
 public function executeCreate()
 {
     $invoice = $this->getRoute()->getObject();
     $invoice->setTransactionId(time() + rand(1, 99) . $invoice->getId());
     $invoice->setPaymentSystem('qiwi');
     $invoice->save();
     $qiwi = QIWI::getInstance();
     try {
         $result = $qiwi->createBill(array('phone' => substr($invoice->getUser()->getProfile()->getMobilePhone(), -10, 10), 'amount' => Currency::convertByAbbr($invoice->getAmount(), 'RUR'), 'comment' => $invoice->getDescription(), 'txn-id' => $invoice->getTransactionId()));
         if ($result) {
             $this->redirect('payment_qiwi_success');
         } else {
             $this->redirect('payment_qiwi_fail');
         }
     } catch (QIWIMortalCombatException $e) {
         $this->redirect('payment_qiwi_fail');
     }
 }
 protected function execute($arguments = array(), $options = array())
 {
     new sfDatabaseManager($this->configuration);
     $invoices = Doctrine::getTable('Invoice')->createQuery('a')->where('a.is_paid = 0')->andWhere('a.payment_system = ?', 'qiwi')->execute();
     $this->logSection('invoices found', $invoices->count());
     $qiwi = QIWI::getInstance();
     $bills = array();
     foreach ($invoices as $invoice) {
         $bills[$invoice->getTransactionId()] = $invoice;
     }
     if (count($bills)) {
         $result = $qiwi->billStatus(array_keys($bills));
         foreach ($result as $billId => $billStatus) {
             if ($billStatus['status'] == QIWI::STATUS_PAID) {
                 $bills[$billId]->doPay($billStatus);
                 $this->logSection('success', '#' . $bills[$billId]->getId());
             }
         }
     }
 }
Пример #3
0
 function action_status()
 {
     //1) Выбираем новые платежи квики
     $q = QIWI::getInstance($this->qiwiConfig);
     $invoice_list = DB::select("id")->from('invoice')->where('status', '=', 'N')->where('payment_id', '=', 2)->execute()->as_array();
     $i_request = array();
     foreach ($invoice_list as $i) {
         $i_request[] = $i['id'];
     }
     $q_result = $q->billStatus($i_request, true);
     $email = "";
     foreach ($q_result as $id => $v) {
         if ($v['status'] != 60) {
             continue;
         }
         //  не оплачен
         $content = "Order:{$id}\nAmount:{$v['amount']}\nDetails: " . print_r($v, true) . "\n\n";
         $status = "success";
         try {
             $invoice = ORM::factory('invoice', $id);
             if (!$invoice->loaded()) {
                 throw new Exception("Cannot find invoice (" . $id . ")");
             }
             // проверяем фактические параметры
             if (floatval($invoice->amount) != floatval($v['amount'])) {
                 throw new Exception("Payment Data error ({$v['amount']} != {$invoice->amount})");
             }
             // проверяем статус платежа - чтоб не проплачивать уже проведенные платежи
             if ($invoice->status != 'N') {
                 throw new Exception("Invoice already processed (" . $invoice->status . ")");
             }
             $user = ORM::factory('user', $invoice->user_id);
             if (!$user->loaded()) {
                 throw new Exception("Cannot find user (" . $invoice->user_id . ")");
             }
             // если у пользователя просрочен аккаунт - в качестве начальной даты ставим текущую.
             // в противном случае - дату макс. срока (если захотели докупить)!!
             $old_value = $user->expires;
             if (empty($user->expires) || Date::diff($user->expires) <= 0) {
                 $user_date = new DateTime();
             } else {
                 $user_date = new DateTime($user->expires);
             }
             $user_date->modify("+ " . intval($invoice->days_amount) . " days");
             $user->expires = $user_date->format("Y-m-d 23:59:59");
             $user->user_type = 'service';
             $invoice->status = 'P';
             // оплачен
             $invoice->modify_date = Date::formatted_time('now', "Y-m-d H:i:s");
             $invoice->update();
             $user->update();
             DB::insert('payment_log', array('user_id', 'type', 'old_value', 'new_value', 'cdate'))->values(array($invoice->user_id, "-", $old_value, $user->expires, Date::formatted_time()))->execute();
         } catch (Exception $e) {
             $status = 'error';
             $content .= $e->getMessage();
         }
         DB::insert('invoice_log', array('invoice_id', 'status', 'content', 'cdate'))->values(array($id, $status, $content, Date::formatted_time()))->execute();
         $email .= "<br>{$content}<br><hr><br>\n";
     }
     if (!empty($email)) {
         //				Email::send('*****@*****.**', array('*****@*****.**', 'Ассоциация автосервисов'), $feedback->title, $email_view, TRUE);
         Email::send('*****@*****.**', array('*****@*****.**', 'Ассоциация автосервисов'), "Уведопление об платежах QIWI", $email, TRUE);
         Email::send('*****@*****.**', array('*****@*****.**', 'Ассоциация автосервисов'), "Уведопление об платежах QIWI", $email, TRUE);
     }
     exit;
 }