turkmentv/app/Http/Controllers/OrderController.php

167 lines
6.6 KiB
PHP
Raw Normal View History

2019-05-11 00:27:49 +00:00
<?php
namespace App\Http\Controllers;
use App\Models\Material;
use App\Models\Order;
use Carbon\Carbon;
use Illuminate\Http\Request;
2019-09-05 15:09:30 +00:00
use Illuminate\Support\Facades\Log;
2019-05-11 00:27:49 +00:00
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()
]);
2019-05-14 23:50:24 +00:00
$order->category_id = $material->category_id;
2019-05-11 00:27:49 +00:00
$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();
2019-07-10 13:47:00 +00:00
//todo update order_count on category_material
2019-05-11 00:27:49 +00:00
return $this->register($order);
}
private function register(Order $order){
2019-09-03 08:37:57 +00:00
2019-05-11 00:27:49 +00:00
$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', 'register.do', [
'connect_timeout' => 15,
'timeout' => 15,
2019-09-05 15:09:30 +00:00
'verify' => true,
2019-05-11 00:27:49 +00:00
'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);
2019-09-05 15:33:38 +00:00
//dd($data);
2019-05-11 00:27:49 +00:00
if($data['errorCode'] == 0){
$order->registered = 1;
$order->orderId = $data['orderId'];
$order->formUrl = $data['formUrl'];
2019-09-18 09:42:15 +00:00
2019-05-11 00:27:49 +00:00
}
else {
2019-09-18 09:42:15 +00:00
$order->registered = 0;
2019-05-11 00:27:49 +00:00
$order->errorMessage = $data['errorMessage'];
}
2019-09-05 15:33:38 +00:00
2019-09-18 09:42:15 +00:00
$order->errorCode = $data['errorCode'];
$order->save();
return view('order',compact('order'));
2019-05-11 00:27:49 +00:00
}catch (\Exception $ex){
request()->session()->flash('status','danger');
request()->session()->flash('status_message',trans('abonent.gateway_not_responding_message'));
2019-09-05 15:09:30 +00:00
Log::error($ex->getMessage());
2019-09-05 15:33:38 +00:00
//dd($ex);
return redirect()->back();
2019-05-11 00:27:49 +00:00
}
2019-09-05 15:33:38 +00:00
2019-05-11 00:27:49 +00:00
}
public function result($order_id){
$order = Order::findOrFail($order_id);
2019-07-10 16:05:54 +00:00
if($order->payed){
return view('order_complete')->with('order',$order);
}
2019-05-11 00:27:49 +00:00
$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);
2019-06-26 05:45:32 +00:00
$order->errorCode = $data['ErrorCode'];
$order->orderStatus = $data['OrderStatus'];
2019-05-11 00:27:49 +00:00
if($data['ErrorCode'] == 0){
if($data['OrderStatus'] == 2){ //payment successfull
$order->payed = 1;
// $this->makePayment($order);
request()->session()->flash('status','success');
2019-07-14 15:03:59 +00:00
request()->session()->flash('status_message',trans('content.payment_successfull'));
2019-06-26 05:45:32 +00:00
//$order->errorMessage = trans('abonent.payment_successfull');
$status_message = 'Проведена полная авторизация суммы заказа';
}
2019-09-05 15:33:38 +00:00
// 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 ='Авторизация отменена';
// }
2019-05-11 00:27:49 +00:00
}
else{
// $order->status = 'payment_failed';
2019-06-26 05:45:32 +00:00
2019-05-11 00:27:49 +00:00
$order->errorMessage = $data['ErrorMessage'];
}
$order->save();
}
catch (\Exception $e){
request()->session()->flash('status','danger');
2019-05-11 08:41:56 +00:00
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();
2019-07-19 11:22:10 +00:00
2019-05-11 00:27:49 +00:00
}
2019-05-11 08:41:56 +00:00
return view('order_complete')->with('order',$order);
2019-05-11 00:27:49 +00:00
}
}