Example #1
0
 public function testPayReturnFailSum()
 {
     $connector = new Gateway($this->mock);
     $isSuccess = $connector->payReturn(123, 1, 0);
     $this->assertFalse($isSuccess);
     $this->assertEquals('Сумма слишком мала', $connector->getError());
 }
 /**
  * Возврат оплаты
  *
  * @param Order $order
  *
  * @return array
  */
 public function payReturn($order)
 {
     $data = Input::all();
     //Проверяем данные на валидность и возвращаем если ошибка
     $validator = Validator::make($data, Validators::rulesForPayReturn(), Validators::messagesForErrors());
     $userMessages = $validator->messages();
     if ($validator->fails()) {
         $result['error'] = array('sum' => $userMessages->first('sum'), 'comment' => $userMessages->first('comment'));
         return $result;
     }
     //Возможен ли возврат указанной суммы,
     //учитывая прошлые возвраты по этому счёту
     $isAllowedSum = PaysReturn::isAllowedSum($order, $data['sum']);
     if (!$isAllowedSum) {
         $result['error'] = array('sum' => 'Слишком большая сумма');
         return $result;
     }
     //Если не закончен придыдущий возврат, то не даём сделать новый
     if ($order->isOnReturn()) {
         return $this->resultMessage('Дождитесь окончания предыдущего возврата.');
     }
     //Создаём возврат в таблице и начинаем возврат
     $payReturn = PaysReturn::newPayReturn($data);
     if (!$payReturn) {
         return $this->resultMessage('Возврат не создан, повторите попытку.');
     }
     $gate = new Gateway($this->makeCurl());
     $isSuccess = $gate->payReturn($payReturn->order_id, $payReturn->id, $payReturn->sum);
     //Если ошибка, то удаляем наш возврат из таблицы
     if (!$isSuccess) {
         PayReturn::find($payReturn->id)->delete();
         return $this->resultMessage($gate->getError());
     }
     //Меняем статус заказа при успешном возврате
     $order->changeAfterReturn($payReturn->id);
     $message = 'Сумма ' . $data['sum'] . ' руб. по счёту № ' . $order->id . ' отправлена на возврат';
     return $this->resultMessage($message, 'Сообщение');
 }