$material_id, 'user_id' => auth()->id() ]); $order->category_id = $material->category_id; $order->price = $material->price; $order->title = $material->title; $order->registered = 0; $order->payed = 0; $order->download_count = $material->download_count; $order->downloaded = 0; if($material->day_count != 0) $order->last_date = Carbon::today()->addDays($material->day_count); else $order->last_date = null; $order->oid = str_replace('-','',Str::orderedUuid()); $order->save(); //todo update order_count on category_material return $this->register($order); } private function register(Order $order){ $url = config('app.gateway_url'); $user = config('app.gateway_user'); $pwd = config('app.gateway_password'); if(!($user && $url && $pwd)){ throw new \Exception('Method not allowed'); } $client = new Client(['base_uri' => $url]); try{ $response = $client->request('POST', 'register.do', [ 'connect_timeout' => 15, 'timeout' => 15, 'verify' => true, 'form_params' => [ 'userName' => $user, 'password' => $pwd, 'orderNumber' => $order->oid, 'currency' => 934, 'language' => 'ru', 'description'=> $order->title, 'amount' =>$order->price * 100,// amount w kopeykah 'returnUrl' => route('order_status', $order->id), //'failUrl' => route('paymentFail', $order->id) ] ]); $data = json_decode($response->getBody(), true); //dd($data); if($data['errorCode'] == 0){ $order->registered = 1; $order->orderId = $data['orderId']; $order->formUrl = $data['formUrl']; } else { $order->registered = 0; $order->errorMessage = $data['errorMessage']; } $order->errorCode = $data['errorCode']; $order->save(); return view('order',compact('order')); }catch (\Exception $ex){ request()->session()->flash('status','danger'); request()->session()->flash('status_message',trans('abonent.gateway_not_responding_message')); Log::error($ex->getMessage()); //dd($ex); return redirect()->back(); } } public function result($order_id){ $order = Order::findOrFail($order_id); if($order->payed){ return view('order_complete')->with('order',$order); } $url = config('app.gateway_url'); $user = config('app.gateway_user'); $pwd = config('app.gateway_password'); if(!($user && $url && $pwd)){ throw new MethodNotAllowedException(); } $client = new Client(['base_uri' => $url]); try{ $response = $client->request('POST', 'getOrderStatus.do', [ 'verify' => false, 'connect_timeout' => 15, 'timeout' => 15, 'form_params' => [ 'userName' => $user, 'password' => $pwd, 'orderId' => $order->orderId, ] ]); $data = json_decode($response->getBody(), true); $order->errorCode = $data['ErrorCode']; $order->orderStatus = $data['OrderStatus']; Log::info($data); if($data['ErrorCode'] == 0){ if($data['OrderStatus'] == 2){ //payment successfull $order->payed = 1; // $this->makePayment($order); request()->session()->flash('status','success'); request()->session()->flash('status_message',trans('content.payment_successfull')); //$order->errorMessage = trans('abonent.payment_successfull'); $status_message = 'Проведена полная авторизация суммы заказа'; } // elseif($data['OrderStatus'] == 0){//order registered but not payed yet // $status_message = 'Заказ зарегистрирован, но не оплачен'; // } // elseif ($data['OrderStatus'] == 1){//Предавторизованная сумма захолдирована (для двухстадийных платежей) // $status_message ='Предавторизованная сумма захолдирована (для двухстадийных платежей)'; // } // elseif ($data['OrderStatus'] == 4){//Предавторизованная сумма захолдирована (для двухстадийных платежей) // $status_message ='По транзакции была проведена операция возврата'; // } // elseif ($data['OrderStatus'] == 5){//Предавторизованная сумма захолдирована (для двухстадийных платежей) // $status_message ='Инициирована авторизация через ACS банка-эмитента'; // } // else{//unsuccessfull Авторизация отменена // $status_message ='Авторизация отменена'; // } } else{ // $order->status = 'payment_failed'; $order->errorMessage = $data['ErrorMessage']; } $order->save(); } catch (\Exception $e){ request()->session()->flash('status','danger'); request()->session()->flash('status_message','Bank bilen aragatnaşyga geçip bolmady birsalymdan täzeden synanşyp görmegiňizi haýyş edýäris'); redirect()->back(); } return view('order_complete')->with('order',$order); } public function subscribe(\Illuminate\Http\Request $request){ $url = config('app.gateway_url'); $user = config('app.gateway_user'); $pwd = config('app.gateway_password'); $client = new Client(['base_uri' => $url]); $subscription = Subscription::find($request['subscription_type']); if(!($user && $url && $pwd)){ throw new MethodNotAllowedException(); } try{ $user_sub = User_sub::create([ 'user_id' => auth()->id(), 'subscription_type' => $request['subscription_type'], 'start_time' => Carbon::now(), 'end_time' => Carbon::now()->addDays($subscription->duration), 'status' => false, 'sid' => uniqid() ]); $response = $client->request('POST', 'register.do', [ 'connect_timeout' => 300, 'timeout' => 300, 'verify' => true, 'form_params' => [ 'userName' => $user, 'password' => $pwd, 'orderNumber' => $user_sub->sid, 'currency' => 934, 'language' => 'ru', 'description'=> $subscription->title, 'amount' =>$subscription->price * 100,// amount v kopeykah 'returnUrl' => route('substatus', $user_sub->id), //'failUrl' => route('paymentFail', $order->id) ] ]); $data = json_decode($response->getBody(), true); if($data['errorCode'] == 0){ $user_sub->status = 0; $user_sub->sid = $data['orderId']; $user_sub->save(); return Redirect::to($data['formUrl']); } else { Log::error($data['errorMessage']); return "Registrasiýa amala aşyrylmady"; } } catch (\Exception $e){ request()->session()->flash('status','danger'); request()->session()->flash('status_message','Bank bilen aragatnaşyga geçip bolmady birsalymdan täzeden synanşyp görmegiňizi haýyş edýäris'); return redirect()->back(); } } public function substatus($id){ $user_sub = User_sub::find($id); if($user_sub->status){ return view('subscription_complete')->with('user_sub',$user_sub); } $url = config('app.gateway_url'); $user = config('app.gateway_user'); $pwd = config('app.gateway_password'); if(!($user && $url && $pwd)){ throw new MethodNotAllowedException(); } $client = new Client(['base_uri' => $url]); try{ $response = $client->request('POST', 'getOrderStatus.do', [ 'verify' => false, 'connect_timeout' => 300, 'timeout' => 300, 'form_params' => [ 'userName' => $user, 'password' => $pwd, 'orderId' => $user_sub->sid//$user_sub->sid, ] ]); $data = json_decode($response->getBody(), true); Log::info($data); if($data['ErrorCode'] == 0 && $data['OrderStatus'] == 2){ $user_sub->status = 1; // elseif($data['OrderStatus'] == 0){//order registered but not payed yet // $status_message = 'Заказ зарегистрирован, но не оплачен'; // } // elseif ($data['OrderStatus'] == 1){//Предавторизованная сумма захолдирована (для двухстадийных платежей) // $status_message ='Предавторизованная сумма захолдирована (для двухстадийных платежей)'; // } // elseif ($data['OrderStatus'] == 4){//Предавторизованная сумма захолдирована (для двухстадийных платежей) // $status_message ='По транзакции была проведена операция возврата'; // } // elseif ($data['OrderStatus'] == 5){//Предавторизованная сумма захолдирована (для двухстадийных платежей) // $status_message ='Инициирована авторизация через ACS банка-эмитента'; // } // else{//unsuccessfull Авторизация отменена // $status_message ='Авторизация отменена'; // } } else{ // $order->status = 'payment_failed'; $user_sub->status = 0; } $user_sub->save(); } catch (\Exception $e){ request()->session()->flash('status','danger'); request()->session()->flash('status_message','Bank bilen aragatnaşyga geçip bolmady birsalymdan täzeden synanşyp görmegiňizi haýyş edýäris'); return redirect()->back(); } return view('subscription_complete')->with('user_sub',$user_sub); } }