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.
94 lines
3.1 KiB
94 lines
3.1 KiB
<?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');
|
|
}
|
|
}
|
|
|