| Server IP : 172.67.168.138 / Your IP : 216.73.216.227 [ Web Server : Apache System : Linux frog 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64 User : web13 ( 5017) PHP Version : 8.3.31 Disable Function : NONE Domains : 41 Domains MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/clients/client12/web13/web/ahelos/app/Http/Controllers/Frontend/ |
Upload File : |
<?php
namespace App\Http\Controllers\Frontend;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\{Order, Cart, User, Setting, Language, Product, CardPayment};
use LaravelLocalization;
use Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Cookie;
use Mail;
use DB;
use App\Mail\OrderMail;
use App\Mail\RegisterMail;
class OrderController extends Controller
{
public function store(Request $request){
$current_language = LaravelLocalization::getCurrentLocale();
$request->validate([
'fname' => ['required', 'string', 'max:255'],
'lname' => ['required', 'string', 'max:255'],
'phone' => ['required'],
'email' => ['required', 'string', 'email', 'max:255'],
'city' => ['required', 'string'],
],
[
'required' => 'Задължително поле.',
]);
$cart_products = Cart::where('token', Cookie::get('cartToken'))
->with('product');
$user_id = 0;
if (Auth::user()) {
// Ако потребителя е логнат
$user_id = Auth::user()->id;
}else{
// АКо потребителя не е логнат
$user = User::where('email', $request->input('email'))->first();
// Проверяваме дали потребителя има създаден акаунт с този имейл
if ($user) {
// Ако има създаден акаунт с този имейл, взимаме id-то
$user_id = $user->id;
}else{
// Ако няма потребител с този имейл, създаваме акаунт.
$password = rand(1000, 9999);
$data_user = array(
'fname' => $request->input('fname'),
'lname' => $request->input('lname'),
'phone' => $request->input('phone'),
'email' => $request->input('email'),
'password' => Hash::make($password),
'terms' => 1,
'language' => $current_language
);
$user = User::create($data_user);
$user_id = $user->id;
Mail::to($request->input('email'))->send(new RegisterMail($user, $password));
}
}
// To office
if ($request->shipping_to == 2) {
$request->validate([
'office_address' => 'required',
],
[
'required' => 'Задължително поле.',
]
);
$data_address['office'] = $request->office_address;
$data_address['shipping_to'] = 2;
}else{
$request->validate([
'city' => 'required',
'address' => 'required',
],
[
'required' => 'Задължително поле.',
]
);
$data_address['address'] = $request->address;
$data_address['shipping_to'] = 1;
$data_address['no'] = $request->no;
$data_address['block'] = $request->block;
$data_address['entrance'] = $request->entrance;
$data_address['floor'] = $request->floor;
$data_address['apartment_no'] = $request->apartment_no;
}
$data_address['city'] = $request->city;
$data_address['zip'] = $request->zip;
$data_address['courier'] = $request->courier;
$settings = Setting::where('key', 'shipping_price')->first();
$free_shipping = Setting::where('key', 'free_shipping')->where('language', 'bg')->first()->value;
if ($cart_products->sum('price') >= $free_shipping && $free_shipping > 0) {
$shipping_price = 0;
}else{
$shipping_price = $settings->value;
}
$data = array(
'fname' => $request->input('fname'),
'lname' => $request->input('lname'),
'phone' => $request->input('phone'),
'email' => $request->input('email'),
'user_id' => $user_id,
'note' => $request->input('note'),
'shipping' => $shipping_price,
'payment' => $request->input('payment'),
'status' => 1,
'type' => 1
);
foreach ($cart_products->get() as $cart) {
$data_products[] = array(
'user_id' => $user_id,
'product_id' => $cart->product_id,
'price' => $cart->price,
'price_old' => $cart->price_old,
'qty' => 1,
'weight' => $cart->product->weight,
);
}
if ($request->input('invoice') == 1) {
$data_invoice = $request->validate([
'company_name' => ['required', 'string', 'max:255'],
'company_owner' => ['required', 'string', 'max:255'],
'company_city' => ['required'],
'company_address' => ['required', 'string', 'max:255'],
'company_city' => ['required', 'string'],
'company_number' => ['required', 'string'],
],
[
'required' => 'Задължително поле.',
]);
$data_invoice['company_vat'] = $request->input('company_vat');
}
$order = Order::create($data);
$order->address()->create($data_address);
$order->products()->createMany($data_products);
if ($request->input('invoice') == 1) {
$order->invoice()->create($data_invoice);
}
session(['order_id' => $order->id]);
Mail::to($request->input('email'))->send(new OrderMail($order));
if ($request->payment == 2) {
return redirect()->route('order.borica', $order->id);
}
$cart_products->delete();
return redirect()->route('order_complete');
}
public function complete(){
$order = Order::where('id', session('order_id'))->with('products')->first();
return view('layouts.frontend.pages.order_complete', compact('order'));
}
public function boricaRequest($order_id){
$order = Order::where('id', $order_id)->first();
session(['order_id' => $order->id]);
$total_products = $order->products->sum('price');
$currency = 'EUR';
$TERMINAL = 'V5401733';
$MERCHANT = '6210033571';
$borica_lang = 'BG';
$amount = number_format($total_products + $order->shipping, 2, '.', '');
$amount_currency = number_format($total_products + $order->shipping, 2, '.', '');
$merchant_time_zone = 'Europe/Sofia';
date_default_timezone_set($merchant_time_zone);
$trtype = "1";
$txnid = rand(10, 99) . date('is');
$desc = 'Плащане на поръчка ' . $order->id;
$timestamp = date("YmdHis", strtotime('-3 hours'));
$nonce = strtoupper(bin2hex(openssl_random_pseudo_bytes(16)));
$order_id = $order->id;
$p_sign =
strlen($TERMINAL).$TERMINAL.
strlen($trtype).$trtype.
strlen($amount).$amount.
strlen($currency).$currency.
strlen($txnid).$txnid.
strlen($timestamp).$timestamp.
strlen($nonce).$nonce.'-';
$private_key = '-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCjq7lT04wTOCQm
g0W3JZbHCjpaoaK41WJIp91pbqDT+sz9IhdwqjHxh9jO4F+sxJFqTx+CMAqtRM0p
Lp4DLffzS+6InpqdwL06M14Tkw8G6CkZgdNNHhqiRp9wOH0V20/IxPvjHmw8QKul
YZvCWtVVhg2l8KzhkVTttmsSAirYq6pgAd5wDcYIDsVaEJtUnRcxfvsr58ihnKJ6
rQcaZ1wOSoVV1nF2EmXL8Ex8tcwh0sYKaiRXFxRyhDvSOOI1l+DdfjMb+YXWozGd
jdUBMH1Aj6Tk8ukQFzI+sL5iQMHYZ5op6hJlltgO8u5I7L8AzX8JWBdlevzcC6xR
NldvyxiVAgMBAAECggEADOqBKmbViodnKZeOxF3AhijoovysyTZPARnSL2mjYnx2
edFwv8YxQR9t0iGYcJtl4wRRzGXQfzegkyE9J1YU16EvNp6Bksps2cTHpfbN0ZyM
8G4zh8Xvkc0jSZQDoa/CyOlr+/02IGkgF+HZ4glmBXpEkHWrnEoU8C9xnU8Iz5FY
MWN9ck1Wvlp7auGVC3urInmiqMlULXyJlqom8/Ca029jCWpUuTmBpyQCjLC3yHVT
npwSEmKvmexBkxbnqGe7iDRyG2bFL1DrKwd5EbF59uQee1ZEqyqfhmZVMq7vy++z
8Meij9vImI5+gDWpbnO3krArs8ifFMpobZa6QGslwQKBgQDNufRMZk9bjk7Mr+Ii
QUbE7Ri1V/UWNbXW7P+5SJvFB40qLlY0SN4rDLsqgBWpNd14zRpc987SHx0+N1Fx
Gy0fIdamHRLPmLJMZp4HwOXaFAsI0qFDG14Fn6AyibFCaJ1nEEuM9Mg3fafoDPv/
WhiT+eTy5zj61LrtquUEIM1pNQKBgQDLqs/19B+YsrIIQWR0hLZLOzIisiH0I/G7
DVKboq1/eri2ezXJKBxaMjfpaoqD1PGtGwH7eNG1vD1g8uGQXwLrYZWIw0tML7Ja
s+oYpW6ZSfc47W4NVm2OJkcjgn3m5UiiVUttv1x8K0V6RjH02T74KFG0BpYlbtFw
cyk/WnA94QKBgE5tTYyylB47Kh8uDe8xI2F/YaQAXBaTczb0MqjX3UpHjrE96O8V
uFyBBfk1ywwu1LdwuVQnxFimM+e7/vg3fAQaSlIZU0qA07f8htI932I7sdkzMvb6
P+W07MVXaJQAfcEEnUinKIy/AnucN5UpK6V95qITM82ru3dPZu8j8irhAoGAe1S2
lhP8xjT/xiwDLuPml+wC0ivYj8Tsbv8EVSbPtXCVRjuaOHPHp37diMVxl59tsgu2
yZdCNrEE4h5yJUDDvdHcAXNxt3LyqCZmzgHv1XeK87gjeoQp13iqf4BXyWhy8YqB
ILZOxQpXClJTkhe0IAYaY8/RQF25CkVSZwDXE0ECgYEAm/3KRvDOB5r1StdarYgi
vRYPxx/Zw3EiYyBWqQ2Vki8bc6zqBqllJKkQzUgew8IH2DPsYsdYSzNrCLUL7CXi
0GbI9Fj5GfuZHEpLVt7JG8A96M41/Q5MbMVqzOSFqnY5s7JEFj5ZXWqL2OxjxrMj
CwOtSMXog3QqavoDNg15Wmw=
-----END PRIVATE KEY-----';
$priv_key_password = 'ahelos_web';
// Подписване на съобщението с цифров сертификат
try {
$private_key_id = openssl_get_privatekey($private_key, $priv_key_password);
openssl_sign($p_sign, $signature, $private_key_id, OPENSSL_ALGO_SHA256);
openssl_free_key($private_key_id);
} catch (\Exception $e) {
echo "<pre>";
print_r($e);
exit;
}
// Формиране окончателна подписана сигнатура
$p_sign = strtoupper(bin2hex($signature));
$data = array(
'TRTYPE' => '1',
'COUNTRY' => $borica_lang,
'CURRENCY' => $currency,
'ADDENDUM' => 'AD,TD',
'MERCH_GMT' => '+02',
'MERCH_NAME' => 'Ahelos',
'MERCH_URL' => 'https://ahelos.bg',
'LANG' => $borica_lang,
'ORDER' => $txnid,
'AMOUNT' => $amount,
'DESC' => $desc,
'TIMESTAMP' => $timestamp,
'TERMINAL' => $TERMINAL,
'MERCHANT' => $MERCHANT,
'AD.CUST_BOR_ORDER_ID' => $order->id,
'NONCE' => $nonce,
'P_SIGN' => $p_sign
);
$paymentInfo = array(
'order_id' => $order->id,
'paid_sum' => $amount,
'amount_currency' => $amount_currency,
'txnid' => $txnid,
'is_paid' => 0,
'session_id' => session()->getId(),
'ref_num' => '',
'language' => 'bg',
'date_created' => \Carbon\Carbon::now(),
);
CardPayment::create($paymentInfo);
return view('layouts.frontend.pages.borica', compact('data'));
}
public function boricaResponse(){
$cardPayment = CardPayment::where('txnid', $_POST['ORDER'])->first();
// session()->setId($cardPayment->session_id);
// Cookie::make('cartToken', $cardPayment->session_id);
if ($_POST['RC'] == 00) {
$ref_num = $_POST['RRN'];
$auth_code = $_POST['APPROVAL'];
$cardPayment->update([
'ref_num' => $ref_num,
'auth_code' => $auth_code,
'is_paid' => 1
]);
session(['order_id' => $cardPayment->order_id]);
$cart_products = Cart::where('token', Cookie::get('cartToken'));
$cart_products->delete();
return redirect()->to('/'.$cardPayment->language.'/order-complete');
}
elseif ($_POST['RC'] == '-25') {
return redirect()->to('/'.$cardPayment->language.'/checkout');
}
else{
return redirect()->route('homepage');
}
}
public function quickOrder(Request $request){
$request->validate([
'email' => 'required',
'phone' => 'required',
'terms' => 'required',
],
[
'required' => 'Задължително поле'
]);
$user_id = 0;
if (Auth::user()) {
// Ако потребителя е логнат
$user_id = Auth::user()->id;
}else{
// АКо потребителя не е логнат
$user = User::where('email', $request->input('email'))->first();
// Проверяваме дали потребителя има създаден акаунт с този имейл
if ($user) {
// Ако има създаден акаунт с този имейл, взимаме id-то
$user_id = $user->id;
}else{
// Ако няма потребител с този имейл, създаваме акаунт.
$password = rand(1000, 9999);
$data_user = array(
'phone' => $request->input('phone'),
'email' => $request->input('email'),
'password' => Hash::make($password),
'terms' => 1,
'language' => 'bg'
);
$user = User::create($data_user);
$user_id = $user->id;
Mail::to($request->input('email'))->send(new RegisterMail($user, $password));
}
}
$product = Product::findOrFail($request->input('product_id'));
$settings = Setting::where('key', 'shipping_price')->first();
$shipping_price = $settings->value;
$data = array(
'phone' => $request->input('phone'),
'email' => $request->input('email'),
'user_id' => $user_id,
'shipping' => $shipping_price,
'payment' => 1,
'status' => 1,
'type' => 2
);
$data_product = array(
'user_id' => $user_id,
'product_id' => $product->id,
'price' => $product->price,
'price_old' => $product->price_old,
'qty' => 1,
'weight' => $product->weight
);
$order = Order::create($data);
$order->products()->create($data_product);
$order->address()->create();
Mail::to($request->input('email'))->send(new OrderMail($order));
session(['order_id' => $order->id]);
return redirect()->route('order_complete');
}
}