Exemplo n.º 1
0
 /**
  * данные для оплаты через CloudPayments
  *
  * @param string $target
  * @param string $id
  * @param boolean $reset
  *
  * @return \Illuminate\Http\JsonResponse
  */
 public function pay($id, $target, $reset)
 {
     $id = $this->parsePayTarget($target, $id);
     try {
         $api = new Api();
         $orders = $api->Orders()['orders'];
     } catch (ApiException $e) {
         return $this->responseException($e);
     }
     Reporter::payInit($id, $api->id());
     $order = null;
     foreach ($orders as $item) {
         if ($item['id'] == $id) {
             $order = $item;
         }
     }
     // нет такого заказа
     if (!$order) {
         Reporter::payInitOrderLost($id, $api->id());
         return $this->responseErrorMessage('заказ не найден', 404);
     }
     // проверим, что заказ не находится в процессинге оплаты
     $check = $this->isOrderPayWaiting($id);
     if ($check !== true) {
         // флаг $reset требует сброса состояния оплаты заказа
         // поэтому мы делаем ему fail чтобы можно было приступить к новой оплате
         if ($reset) {
             Reporter::payInitOrderReset($id, $api->id());
             PaymentCloud::failOrder($id);
         } else {
             return $check;
         }
     }
     // проверим, что есть сумма к оплате
     if ($order['amount'] <= 0) {
         return $this->responseErrorMessage('Заказ уже оплачен', 403);
     }
     $api->id();
     $data = ['publicId' => Config::get('cloud.PublicId'), 'description' => 'Оплата в dryharder.me заказа №' . $order['doc_number'], 'amount' => $order['amount'], 'currency' => 'RUB', 'invoiceId' => $order['id'], 'accountId' => $api->id(), 'data' => ['type' => 'pay_order', 'contr_id' => $api->id(), 'order_id' => $order['id'], 'order_num' => $order['doc_number'], 'amount' => $order['amount']]];
     Reporter::payInitReady($id, $api->id(), $data);
     return Response::json(['data' => $data, 'message' => 'данные для оплаты заказа']);
 }