165 lines
6.8 KiB
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);
|
|
}
|
|
}
|