You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
3.1 KiB

2 years ago
<?php
namespace App\Http\Controllers;
use App\CentralLogics\Helpers;
use App\CentralLogics\OrderLogic;
use App\Models\Order;
use Brian2694\Toastr\Facades\Toastr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Str;
use Stripe\Charge;
use Illuminate\Http\Request;
use Stripe\Stripe;
use App\Models\BusinessSetting;
use PHPUnit\Exception;
class StripePaymentController extends Controller
{
public function payment_process_3d(Request $request)
{
$tran = Str::random(6) . '-' . rand(1, 1000);
$order_id = $request->order_id;
$order = Order::with(['details','subscription'])->where(['id' => $order_id])->first();
$config = Helpers::get_business_settings('stripe');
Stripe::setApiKey($config['api_key']);
header('Content-Type: application/json');
$YOUR_DOMAIN = url('/');
$products = [];
foreach ($order->details as $detail) {
array_push($products, [
'name' => $detail->food?$detail->food['name']:$detail->campaign['name'],
'image' => 'def.png'
]);
}
$checkout_session = \Stripe\Checkout\Session::create([
'payment_method_types' => ['card'],
'line_items' => [[
'price_data' => [
'currency' => Helpers::currency_code(),
'unit_amount' => $order->order_amount * 100,
'product_data' => [
'name' => BusinessSetting::where(['key' => 'business_name'])->first()->value,
'images' => [asset('storage/app/public/business') . '/' . BusinessSetting::where(['key' => 'logo'])->first()->value],
],
],
'quantity' => $order->subscription ? $order->subscription->quantity : 1,
]],
'mode' => 'payment',
'success_url' => (String)route('pay-stripe.success',['order_id'=>$order->id,'transaction_ref'=>$tran]),
'cancel_url' => url()->previous(),
]);
return response()->json(['id' => $checkout_session->id]);
}
public function success($order_id,$transaction_ref)
{
$order = Order::find($order_id);
$order->order_status='confirmed';
$order->payment_method='stripe';
$order->transaction_reference=$transaction_ref;
$order->payment_status='paid';
$order->confirmed=now();
$order->save();
try {
Helpers::send_order_notification($order);
} catch (\Exception $e) {
}
if ($order->callback != null) {
return redirect($order->callback . '&status=success');
}
return \redirect()->route('payment-success');
}
public function fail()
{
DB::table('orders')
->where('id', session('order_id'))
->update(['order_status' => 'failed', 'payment_status' => 'unpaid', 'failed'=>now()]);
$order = Order::find(session('order_id'));
if ($order->callback != null) {
return redirect($order->callback . '&status=fail');
}
return \redirect()->route('payment-fail');
}
}