turkmentv/app/Http/Controllers/OrderController.php

165 lines
6.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Material;
use App\Models\Order;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use GuzzleHttp\Client;
use Symfony\Component\Routing\Exception\MethodNotAllowedException;
class OrderController extends Controller
{
public function buy($material_id){
$material = Material::findOrFail($material_id);
$order = Order::firstOrNew([
'material_id' => $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');
// dd($pwd);
if(!($user && $url && $pwd)){
throw new MethodNotAllowedException();
}
$client = new Client(['base_uri' => $url]);
try{
$response = $client->request('POST', 'register.do', [
'connect_timeout' => 15,
'timeout' => 15,
'verify' => false,
'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);
if($data['errorCode'] == 0){
$order->registered = 1;
$order->orderId = $data['orderId'];
$order->formUrl = $data['formUrl'];
$url = $order->formUrl;
}
else {
// $order->status = 'register_failed';
$order->errorCode = $data['errorCode'];
$order->errorMessage = $data['errorMessage'];
$order->formUrl = url('order',$order->id);
$url = redirect()->back();
request()->session()->flash('status','danger');
request()->session()->flash('status_message',$order->errorMessage);
}
$order->save();
}catch (\Exception $ex){
request()->session()->flash('status','danger');
request()->session()->flash('status_message',trans('abonent.gateway_not_responding_message'));
dd($ex);
$url = redirect()->back();
}
return redirect($url);
}
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'];
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('abonent.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);
}
}