public function postPay()
 {
     $bill_id = Input::get('transaction');
     $provider_id = Input::get('shop');
     $bill = Bill::getBill($bill_id, $provider_id);
     //Предполагаем ошибку статуса
     $error = 'Ошибка оплаты, проверьте статус.';
     if ($bill) {
         try {
             $result = DB::connection('ff-qiwi-gate')->transaction(function () use($bill_id) {
                 if (Bill::doPay($bill_id)) {
                     SendCallback::jobBillToQueue($bill_id);
                     SendEmail::emailToQueue($bill_id);
                     return array('message' => 'Счёт успешно оплачен.');
                 }
                 return null;
             });
             if ($result) {
                 return $result;
             }
         } catch (Exception $e) {
         }
     } else {
         //Меняем ошибку на Счёт не найден
         $error = 'Счет не найден.';
     }
     return array('error' => true, 'message' => $error);
 }
 /**
  * Проверка статуса возврата
  *
  * @param int    $provider_id
  * @param string $bill_id
  * @param int    $refund_id
  *
  * @internal param int $id
  *
  * @return Response
  */
 public function show($provider_id, $bill_id, $refund_id)
 {
     if (!($bill = Bill::getBill($bill_id, $provider_id))) {
         $data['error'] = Catalog::C_BILL_NOT_FOUND;
         return $this->responseFromGate($data);
     }
     $refund = Refund::whereBillId($bill_id)->whereRefundId($refund_id)->first();
     if ($refund == null) {
         $data['error'] = Catalog::C_BILL_NOT_FOUND;
         return $this->responseFromGate($data);
     }
     //Проводим возврат по прошествии минуты
     if ($refund->isProcessing()) {
         $refund = $refund->doSuccess();
     }
     $data = $this->dataFromObj($refund);
     $data['user'] = $bill->user;
     $data['error'] = 0;
     return $this->responseFromGate($data);
 }
 public function postExpireBill()
 {
     $bill_id = Input::get('transaction');
     $provider_id = Input::get('shop');
     $bill = Bill::getBill($bill_id, $provider_id);
     //предполагаем ошибку
     $error = 'Счёт не найден';
     if ($bill) {
         //Если счёт просрочен, то кидаем callback и отдаём успех
         if ($bill->doExpire($bill_id)) {
             $this->sendCallback($bill_id);
             return array('message' => 'Счёт просрочен');
         }
         $error = 'Счёт не просрочен. Проверьте статус.';
     }
     //Отдаём ошибку
     return array('error' => true, 'message' => $error);
 }
 /**
  * Отмена счёта (или отправить на создание счёта)
  *
  * @param  int    $provider_id
  * @param  string $bill_id
  *
  * @return Response
  */
 public function update($provider_id, $bill_id)
 {
     //Если это создание - счёта отправляем на создание
     if ($this->isCreateBill()) {
         return $this->store($provider_id, $bill_id);
     }
     if ($this->isCancelBill()) {
         //Находим счёт
         $bill = Bill::getBill($bill_id, $provider_id);
         //Если не нашли - ошибка "Счёт не найден"
         if ($bill == null) {
             $data['error'] = Catalog::C_BILL_NOT_FOUND;
             return $this->responseFromGate($data);
         }
         //Если статус waiting - отменяем счёт, кидаем callback и отдаём счёт в ответе
         if ($bill->isWaiting() && $bill->doCancel($bill_id)) {
             $this->sendCallback($bill_id);
             $canceledBill = Bill::whereBillId($bill_id)->first();
             $data = $this->dataFromObj($canceledBill);
             $data['error'] = 0;
             return $this->responseFromGate($data);
         }
         $data['error'] = Catalog::C_BILL_NOT_FOUND;
         return $this->responseFromGate($data);
     }
     return null;
 }