Файловый менеджер - Редактировать - /home/c7lekhnath/silverray.com.au/Modules/Language/database/seeders/68334/Subscription.zip
Назад
PK ���Z lang/.gitkeepnu �[��� PK ���Z�X�� � module.jsonnu �[��� { "name": "Subscription", "alias": "subscription", "description": "", "keywords": [], "priority": 0, "providers": [ "Modules\\Subscription\\app\\Providers\\SubscriptionServiceProvider" ], "files": [] } PK ���Z tests/Unit/.gitkeepnu �[��� PK ���Z tests/Feature/.gitkeepnu �[��� PK ���Zln�� � vite.config.jsnu �[��� import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; export default defineConfig({ build: { outDir: '../../public/build-subscription', emptyOutDir: true, manifest: true, }, plugins: [ laravel({ publicDirectory: '../../public', buildDirectory: 'build-subscription', input: [ __dirname + '/resources/assets/sass/app.scss', __dirname + '/resources/assets/js/app.js' ], refresh: true, }), ], }); //export const paths = [ // 'Modules/$STUDLY_NAME$/resources/assets/sass/app.scss', // 'Modules/$STUDLY_NAME$/resources/assets/js/app.js', //];PK ���Z�8�� � wsus.jsonnu �[��� { "name": "Subscription Addon", "is_default": true, "description": "This is Subscription Addon", "author": { "name": "Websolutionsus", "email": "websolutionus1@gmail.com", "website": "https://websolutionus.com" }, "license": "Proprietary", "url": "", "options" : { "route" : "home" }, "last_update": "2024-03-31", "version": "1.0.0" } PK ���Z routes/.gitkeepnu �[��� PK ���Z�4V V routes/error_lognu �[��� [07-May-2025 17:12:57 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Support\Facades\Route" not found in /home/lekhnath/silverray.com.au/Modules/Subscription/routes/web.php:10 Stack trace: #0 {main} thrown in /home/lekhnath/silverray.com.au/Modules/Subscription/routes/web.php on line 10 [07-May-2025 21:52:29 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Support\Facades\Route" not found in /home/lekhnath/silverray.com.au/Modules/Subscription/routes/api.php:5 Stack trace: #0 {main} thrown in /home/lekhnath/silverray.com.au/Modules/Subscription/routes/api.php on line 5 PK ���ZC~L�� � routes/web.phpnu �[��� <?php use Illuminate\Support\Facades\Route; use Modules\Subscription\app\Http\Controllers\PaymentController; use Modules\BasicPayment\app\Http\Controllers\FrontPaymentController; use Modules\Subscription\app\Http\Controllers\SubscriptionController; use Modules\Subscription\app\Http\Controllers\Admin\PurchaseController; use Modules\Subscription\app\Http\Controllers\Admin\SubscriptionPlanController; Route::group(['as' => 'admin.', 'prefix' => 'admin', 'middleware' => ['auth:admin', 'translation']], function () { Route::resource('subscription-plan', SubscriptionPlanController::class)->names('subscription-plan'); Route::controller(PurchaseController::class)->group(function () { Route::get('/plan-transaction-history', 'index')->name('plan-transaction-history'); Route::get('/pending-plan-transaction', 'pending_payment')->name('pending-plan-transaction'); Route::get('/subscription-history', 'subscription_history')->name('subscription-history'); Route::put('/plan-renew/{id}', 'plan_renew')->name('plan-renew'); Route::get('/assign-plan', 'create')->name('assign-plan'); Route::post('/store-assign-plan', 'store')->name('store-assign-plan'); Route::get('/purchase-history-show/{id}', 'show')->name('purchase-history-show'); Route::put('/approved-plan-payment/{id}', 'approved_plan_payment')->name('approved-plan-payment'); Route::delete('/delete-plan-payment/{id}', 'delete_plan_payment')->name('delete-plan-payment'); }); }); Route::group(['as' => 'subscription.', 'prefix' => 'subscription', 'middleware' => ['auth:web', 'translation', 'verified']], function () { Route::controller(PaymentController::class)->group(function () { Route::post('place-order/{method}', 'placeOrder')->name('place.order'); Route::get('/payment', 'index')->name('payment'); Route::post('pay-via-stripe/', 'stripe_pay')->name('pay-via-stripe'); Route::get('pay-via-stripe', 'stripe_success')->name('stripe-success'); Route::get('/pay-via-paypal', 'pay_via_paypal')->name('pay-via-paypal'); Route::get('paypal-success-payment', 'paypal_success')->name('paypal-success-payment'); Route::post('/pay-via-bank', 'pay_via_bank')->name('pay-via-bank'); Route::post('/pay-via-razorpay', 'pay_via_razorpay')->name('pay-via-razorpay'); Route::get('pay-via-mollie', 'pay_via_mollie')->name('pay-via-mollie'); Route::get('mollie-payment-success', 'mollie_payment_success')->name('mollie-payment-success'); Route::get('pay-via-instamojo', 'pay_via_instamojo')->name('pay-via-instamojo'); Route::get('instamojo-success', 'instamojo_success')->name('instamojo-success'); Route::post('pay-via-flutterwave', 'flutterwave_payment')->name('pay-via-flutterwave'); Route::get('pay-via-paystack', 'paystack_payment')->name('pay-via-paystack'); Route::get('/payment-addon-success', [PaymentController::class, 'payment_addon_success'])->name('payment-addon-success'); Route::get('/payment-addon-faild', [PaymentController::class, 'payment_addon_faild'])->name('payment-addon-faild'); }); Route::get('/pricing-plan', [SubscriptionController::class, 'index'] )->name('pricing.plan'); Route::get('purchase-package/{id}', [SubscriptionController::class, 'payment_page'] )->name('purchase.package'); Route::get('renew-package/{id}', [SubscriptionController::class, 'renewPackage'] )->name('renew.package'); Route::get( 'subscription-history', [SubscriptionController::class, 'subscription_history'] )->name( 'subscription-history' ); Route::get( 'show-subscription-history/{id}', [SubscriptionController::class, 'show_subscription_history'] )->name( 'show-subscription-history' ); }); PK ���Z/�VJ� � routes/api.phpnu �[��� <?php use Illuminate\Support\Facades\Route; Route::middleware(['auth:sanctum'])->prefix('v1')->name('api.')->group(function () { }); PK ���Z:��� � composer.jsonnu �[��� { "name": "nwidart/subscription", "description": "", "authors": [ { "name": "Nicolas Widart", "email": "n.widart@gmail.com" } ], "extra": { "laravel": { "providers": [], "aliases": { } } }, "autoload": { "psr-4": { "Modules\\Subscription\\": "", "Modules\\Subscription\\App\\": "app/", "Modules\\Subscription\\Database\\Factories\\": "database/factories/", "Modules\\Subscription\\Database\\Seeders\\": "database/seeders/" } }, "autoload-dev": { "psr-4": { "Modules\\Subscription\\Tests\\": "tests/" } } } PK ���Z��s�1 1 config/config.phpnu �[��� <?php return [ 'name' => 'Subscription', ]; PK ���Z config/.gitkeepnu �[��� PK ���Z��8� package.jsonnu �[��� { "private": true, "type": "module", "scripts": { "dev": "vite", "build": "vite build" }, "devDependencies": { "axios": "^1.1.2", "laravel-vite-plugin": "^0.7.5", "sass": "^1.69.5", "postcss": "^8.3.7", "vite": "^4.0.0" } } PK ���Z app/Http/Controllers/.gitkeepnu �[��� PK ���Z����0 0 1 app/Http/Controllers/Admin/PurchaseController.phpnu �[��� <?php namespace Modules\Subscription\app\Http\Controllers\Admin; use App\Models\User; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Modules\Property\app\Models\Property; use Modules\Subscription\app\Models\SubscriptionPlan; use Modules\Subscription\app\Models\SubscriptionHistory; class PurchaseController extends Controller { public function index(Request $request) { checkAdminHasPermissionAndThrowException('subscription.view'); $query = SubscriptionHistory::query(); $query->with('user')->where(['payment_status' => 'success'])->orWhere('payment_method', 'bank'); $query->when($request->filled('keyword'), function ($q) use ($request) { $q->where('plan_name', 'like', '%'.$request->keyword.'%') ->orWhere('plan_price', 'like', '%'.$request->keyword.'%') ->orWhere('expiration_date', 'like', '%'.$request->keyword.'%') ->orWhere('expiration', 'like', '%'.$request->keyword.'%') ->orWhere('payment_method', 'like', '%'.$request->keyword.'%') ->orWhere('transaction', 'like', '%'.$request->keyword.'%'); }); $query->when($request->filled('status'), function ($q) use ($request) { $q->where('status', $request->status); }); $query->when($request->filled('user'), function ($q) use ($request) { $q->where('user_id', $request->user); }); $orderBy = $request->filled( 'order_by' ) && $request->order_by == 1 ? 'asc' : 'desc'; if ($request->filled('par-page')) { $histories = $request->get('par-page') == 'all' ? $query->orderBy( 'id', $orderBy )->get() : $query->orderBy( 'id', $orderBy )->paginate($request->get('par-page'))->withQueryString(); } else { $histories = $query->orderBy( 'id', $orderBy )->paginate()->withQueryString(); } $title = __('Transaction History'); $users = User::select('name', 'id')->get(); return view('subscription::admin.purchase_history', compact('histories', 'title', 'users')); } public function pending_payment(Request $request) { checkAdminHasPermissionAndThrowException('subscription.view'); $query = SubscriptionHistory::query(); $query->with('user')->where(['payment_status' => 'pending', 'payment_method' => 'bank']); $query->when($request->filled('keyword'), function ($q) use ($request) { $q->where('plan_name', 'like', '%'.$request->keyword.'%') ->orWhere('plan_price', 'like', '%'.$request->keyword.'%') ->orWhere('expiration_date', 'like', '%'.$request->keyword.'%') ->orWhere('expiration', 'like', '%'.$request->keyword.'%') ->orWhere('payment_method', 'like', '%'.$request->keyword.'%') ->orWhere('transaction', 'like', '%'.$request->keyword.'%'); }); $query->when($request->filled('user'), function ($q) use ($request) { $q->where('user_id', $request->user); }); $orderBy = $request->filled( 'order_by' ) && $request->order_by == 1 ? 'asc' : 'desc'; if ($request->filled('par-page')) { $histories = $request->get('par-page') == 'all' ? $query->orderBy( 'id', $orderBy )->get() : $query->orderBy( 'id', $orderBy )->paginate($request->get('par-page'))->withQueryString(); } else { $histories = $query->orderBy( 'id', $orderBy )->paginate()->withQueryString(); } $title = __('Pending Transaction'); $users = User::select('name', 'id')->get(); return view('subscription::admin.purchase_history', compact('histories', 'title', 'users')); } public function subscription_history() { checkAdminHasPermissionAndThrowException('subscription.view'); $histories = SubscriptionHistory::with('user')->orderBy('id', 'desc')->where('status', 'active')->paginate(30); return view('subscription::admin.subscription_history', compact('histories')); } public function create() { checkAdminHasPermissionAndThrowException('subscription.view'); $plans = SubscriptionPlan::where('status', 'active')->orderBy('serial', 'asc')->get(); $users = User::all(); return view('subscription::admin.assign_plan', compact('plans', 'users')); } public function store(Request $request) { checkAdminHasPermissionAndThrowException('subscription.view'); $request->validate([ 'user_id' => 'required', 'plan_id' => 'required', ], [ 'user_id.required' => __('User is required'), 'plan_id.required' => __('Plan is required'), ]); $plan = SubscriptionPlan::find($request->plan_id); if ($plan->expiration_date == 'monthly') { $expiration_date = date('Y-m-d', strtotime('30 days')); } elseif ($plan->expiration_date == 'yearly') { $expiration_date = date('Y-m-d', strtotime('365 days')); } elseif ($plan->expiration_date == 'lifetime') { $expiration_date = date('Y-m-d', strtotime('+100 years')); } $this->store_pricing_plan($request->user_id, $plan, $expiration_date); $notification = __('Assign Successfully'); $notification = ['messege' => $notification, 'alert-type' => 'success']; return redirect()->back()->with($notification); } public function show($id) { checkAdminHasPermissionAndThrowException('subscription.view'); $history = SubscriptionHistory::with('user')->where('id', $id)->first(); return view('subscription::admin.purchase_history_show', compact('history')); } public function approved_plan_payment(Request $request, $id) { checkAdminHasPermissionAndThrowException('subscription.view'); $history = SubscriptionHistory::where('id', $id)->first(); SubscriptionHistory::where('user_id', $history->user_id)->update(['status' => 'expired']); $history = SubscriptionHistory::findOrFail($id); $history->payment_status = 'success'; if ($request->has('paid_amount')) { $history->paid_amount = $request->paid_amount; $history->payable_currency = 'USD'; $history->gateway_charge = 0; $history->payable_with_charge = $history->plan_price; } $history->status = 'active'; $history->save() ? SubscriptionHistory::whereNotIn('id', [$id])->where('user_id', $history->user_id)->update(['status' => 'expired']) : null; $plan = SubscriptionPlan::where('id', $history->subscription_plan_id)->first(); $userProperties=Property::where('user_id',$history->user_id)->orderBy('id','desc')->get(); if($userProperties->count() !=0){ if($plan->number_of_property !=-1){ foreach($userProperties as $index => $property){ if(++$index <= $plan->number_of_property){ $property->expired_date=$history->expiration_date; $property->save(); }else{ $property->expired_date='expired'; $property->save(); } } }elseif($plan->number_of_property ==-1){ foreach($userProperties as $index => $property){ $property->expired_date=$history->expiration_date; $property->save(); } } } $notification = __('Approved Successfully'); $notification = ['messege' => $notification, 'alert-type' => 'success']; return redirect()->back()->with($notification); } public function plan_renew($id) { checkAdminHasPermissionAndThrowException('subscription.view'); $current_plan = SubscriptionHistory::where('id', $id)->first(); if ($current_plan->expiration_date <= date('Y-m-d')) { $plan = SubscriptionPlan::find($current_plan->subscription_plan_id); if ($plan->expiration_date == 'monthly') { $expiration_date = date('Y-m-d', strtotime('30 days')); } elseif ($plan->expiration_date == 'yearly') { $expiration_date = date('Y-m-d', strtotime('365 days')); } elseif ($plan->expiration_date == 'lifetime') { $expiration_date = date('Y-m-d', strtotime('+100 years')); } } else { $plan = SubscriptionPlan::find($current_plan->subscription_plan_id); if ($plan->expiration_date == 'monthly') { $expiration_date = date('Y-m-d', strtotime($current_plan->expiration_date.' +30 days')); } elseif ($plan->expiration_date == 'yearly') { $expiration_date = date('Y-m-d', strtotime($current_plan->expiration_date.' +365 days')); } elseif ($plan->expiration_date == 'lifetime') { $expiration_date = date('Y-m-d', strtotime('+100 years')); } } $this->store_pricing_plan($current_plan->user_id, $plan, $expiration_date); $notification = __('Subscription renew successfully'); $notification = ['messege' => $notification, 'alert-type' => 'success']; return redirect()->back()->with($notification); } public function delete_plan_payment($id) { checkAdminHasPermissionAndThrowException('subscription.view'); $history = SubscriptionHistory::where('id', $id)->first(); if ($history->status == 'active') { $notification = trans('You can not delete user current plan.'); $notification=array('messege'=>$notification,'alert-type'=>'error'); return redirect()->back()->with($notification); } $history->delete(); $notification = __('Delete Successfully'); $notification = ['messege' => $notification, 'alert-type' => 'success']; return redirect()->route('admin.plan-transaction-history')->with($notification); } public function store_pricing_plan($user_id, $plan, $expiration_date) { checkAdminHasPermissionAndThrowException('subscription.view'); SubscriptionHistory::where('user_id', $user_id)->update(['status' => 'expired']); $purchase = new SubscriptionHistory(); $purchase->order_id='#'.rand(22,44).date('Ydmis'); $purchase->user_id = $user_id; $purchase->subscription_plan_id = $plan->id; $purchase->plan_name = $plan->plan_name; $purchase->plan_price = $plan->plan_price; $purchase->expiration = $plan->expiration_date; $purchase->expiration_date = $expiration_date; // write your logics here $purchase->number_of_property = $plan->number_of_property; $purchase->number_of_feature_property = $plan->number_of_feature_property; $purchase->number_of_top_property = $plan->number_of_top_property; $purchase->number_of_urgent_property = $plan->number_of_urgent_property; $purchase->is_featured = $plan->is_featured; $purchase->is_top = $plan->is_top; $purchase->is_urgent = $plan->is_urgent; //end write your logics here $purchase->status = 'active'; $purchase->payment_method = 'handcash'; $purchase->payment_status = 'success'; $purchase->transaction = 'hand_cash'; $purchase->save(); $userProperties=Property::where('user_id',$user_id)->orderBy('id','desc')->get(); if($userProperties->count() !=0){ if($plan->number_of_property !=-1){ foreach($userProperties as $index => $property){ if(++$index <= $plan->number_of_property){ $property->expired_date=$expiration_date; $property->save(); }else{ $property->expired_date='expired'; $property->save(); } } }elseif($plan->number_of_property ==-1){ foreach($userProperties as $index => $property){ $property->expired_date=$expiration_date; $property->save(); } } } } } PK ���ZܷQ� � 9 app/Http/Controllers/Admin/SubscriptionPlanController.phpnu �[��� <?php namespace Modules\Subscription\app\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Modules\Subscription\app\Models\SubscriptionPlan; use Modules\Subscription\app\Enums\SubscriptionFeatures; class SubscriptionPlanController extends Controller { public function index() { checkAdminHasPermissionAndThrowException('subscription.view'); $plans = SubscriptionPlan::orderBy('serial', 'asc')->get(); return view('subscription::admin.subscription_list', compact('plans')); } public function create() { checkAdminHasPermissionAndThrowException('subscription.create'); return view('subscription::admin.subscription_create'); } public function store(Request $request) { checkAdminHasPermissionAndThrowException('subscription.store'); $request->validate([ 'plan_name' => 'required', 'plan_price' => 'required|numeric', 'expiration_date' => 'required', 'serial' => 'required', 'status' => 'required', 'number_of_property'=>'required', 'feature'=>'required', 'top_property'=>'required', 'urgent'=>'required', 'number_of_feature_property'=>'required', 'number_of_top_property'=> 'required', 'number_of_urgent_property'=>'required', ], [ 'plan_name.required' => __('Plan name is required'), 'plan_price.required' => __('Plan price is required'), 'plan_price.numeric' => __('Plan price should be numeric'), 'expiration_date.required' => __('Expiration date is required'), 'serial.required' => __('Serial is required'), 'number_of_property.required' => trans('Number of property is required'), 'number_of_feature_property.required' => trans('Number of feature property is required'), 'number_of_top_property.required' => trans('Number of top property is required'), 'number_of_urgent_property.required' => trans('Number of urgent property is required'), ]); $plan = new SubscriptionPlan(); $plan->plan_name = $request->plan_name; $plan->plan_price = $request->plan_price; $plan->expiration_date = $request->expiration_date; $plan->serial = $request->serial; $plan->status = $request->status; // foreach (SubscriptionFeatures::all() as $feature) { // $plan->$feature['column'] = $request->$feature['column']; // } $plan->number_of_property=$request->number_of_property; $plan->is_featured=$request->feature; $plan->is_top=$request->top_property; $plan->is_urgent=$request->urgent; $plan->number_of_feature_property=$request->number_of_feature_property ? $request->number_of_feature_property : 0; $plan->number_of_top_property=$request->number_of_top_property ? $request->number_of_top_property : 0; $plan->number_of_urgent_property=$request->number_of_urgent_property ? $request->number_of_urgent_property : 0; $plan->save(); $notification = __('Create Successfully'); $notification = ['messege' => $notification, 'alert-type' => 'success']; return redirect()->route('admin.subscription-plan.index')->with($notification); } public function show($id) { return view('subscription::show'); } public function edit($id) { checkAdminHasPermissionAndThrowException('subscription.edit'); $plan = SubscriptionPlan::find($id); return view('subscription::admin.subscription_edit', compact('plan')); } public function update(Request $request, $id) { checkAdminHasPermissionAndThrowException('subscription.update'); $request->validate([ 'plan_name' => 'required', 'plan_price' => 'required|numeric', 'expiration_date' => 'required', 'serial' => 'required', 'status' => 'required', 'number_of_property'=>'required', 'feature'=>'required', 'top_property'=>'required', 'urgent'=>'required', 'number_of_feature_property'=>'required', 'number_of_top_property'=> 'required', 'number_of_urgent_property'=>'required', ], [ 'plan_name.required' => __('Plan name is required'), 'plan_price.required' => __('Plan price is required'), 'plan_price.numeric' => __('Plan price should be numeric'), 'expiration_date.required' => __('Expiration date is required'), 'serial.required' => __('Serial is required'), 'number_of_property.required' => trans('Number of property is required'), 'number_of_feature_property.required' => trans('Number of feature property is required'), 'number_of_top_property.required' => trans('Number of top property is required'), 'number_of_urgent_property.required' => trans('Number of urgent property is required'), ]); $plan = SubscriptionPlan::find($id); $plan->plan_name = $request->plan_name; $plan->plan_price = $request->plan_price; $plan->expiration_date = $request->expiration_date; $plan->serial = $request->serial; $plan->status = $request->status; $plan->number_of_property=$request->number_of_property; $plan->is_featured=$request->feature; $plan->is_top=$request->top_property; $plan->is_urgent=$request->urgent; $plan->number_of_feature_property=$request->number_of_feature_property ? $request->number_of_feature_property : 0; $plan->number_of_top_property=$request->number_of_top_property ? $request->number_of_top_property : 0; $plan->number_of_urgent_property=$request->number_of_urgent_property ? $request->number_of_urgent_property : 0; $plan->save(); $notification = __('Update Successfully'); $notification = ['messege' => $notification, 'alert-type' => 'success']; return redirect()->route('admin.subscription-plan.index')->with($notification); } public function destroy($id) { checkAdminHasPermissionAndThrowException('subscription.delete'); $plan = SubscriptionPlan::find($id); $plan->delete(); $notification = __('Delete Successfully'); $notification = ['messege' => $notification, 'alert-type' => 'success']; return redirect()->route('admin.subscription-plan.index')->with($notification); } } PK ���Z��� � $ app/Http/Controllers/Admin/error_lognu �[��� [17-May-2025 10:12:01 UTC] PHP Fatal error: Uncaught Error: Class "App\Http\Controllers\Controller" not found in /home/c7lekhnath/silverray.com.au/Modules/Subscription/app/Http/Controllers/Admin/SubscriptionPlanController.php:10 Stack trace: #0 {main} thrown in /home/c7lekhnath/silverray.com.au/Modules/Subscription/app/Http/Controllers/Admin/SubscriptionPlanController.php on line 10 PK ���Zˢ6*) ) / app/Http/Controllers/SubscriptionController.phpnu �[��� <?php namespace Modules\Subscription\app\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Pagination\Paginator; use Illuminate\Support\Facades\Auth; use Illuminate\Http\RedirectResponse; use Illuminate\Support\Facades\Session; use App\Traits\GetGlobalInformationTrait; use Modules\Property\app\Models\Property; use Modules\Currency\app\Models\MultiCurrency; use Modules\Subscription\app\Models\SubscriptionPlan; use Modules\Subscription\app\Models\SubscriptionHistory; class SubscriptionController extends Controller { use GetGlobalInformationTrait; /** * Display a listing of the resource. */ public function index(){ $user=Auth::guard('web')->user(); $activeOrder=SubscriptionHistory::where(['user_id'=>$user->id,'status'=>'active'])->first(); $subscriptionPlans = SubscriptionPlan::where('status','active')->orderBy('serial','asc')->get(); return view('subscription::user.pricing-plan', compact('subscriptionPlans', 'activeOrder')); } public function subscription_history(){ Paginator::useBootstrap(); $user=Auth::guard('web')->user(); // $subscriptionHistories = SubscriptionHistory::where('user_id',$user->id)->orderBy('id','desc')->paginate(10); $subscriptionHistories = SubscriptionHistory::where(['user_id' => $user->id, 'payment_status' => 'success'])->orWhere('payment_method', 'bank') ->orderBy('id', 'desc') ->paginate(10); return view('subscription::user.subscription_history', compact('subscriptionHistories')); } public function show_subscription_history($id){ $user=Auth::guard('web')->user(); $subscriptionHistory = SubscriptionHistory::where(['user_id'=>$user->id,'id'=>$id])->first(); if($subscriptionHistory){ return view('subscription::user.show_subscription_history',compact('subscriptionHistory')); }else{ $notification=trans('Something went wrong'); $notification=array('messege'=>$notification,'alert-type'=>'error'); return redirect()->route('subscription.subscription-history')->with($notification); } } public function payment_page($id) { Session::forget('subscription_type'); Session::forget('current_plan_id'); Session::forget('payable_amount'); Session::forget('plan_id'); Session::forget('expiration_date'); // plan id will be dynamic $plan=SubscriptionPlan::findOrFail($id); Session::put('plan_id', $plan->id); $user=Auth::guard('web')->user(); if($plan){ if($plan->plan_price==0){ if($plan->expiration_date == 'monthly'){ $expiration_date = date('Y-m-d', strtotime('30 days')); }elseif($plan->expiration_date == 'yearly'){ $expiration_date = date('Y-m-d', strtotime('365 days')); } elseif ($plan->expiration_date == 'lifetime') { $expiration_date = date('Y-m-d', strtotime('+100 years')); } $this->store_free_pricing_plan($user->id, $plan, $expiration_date); $notification=trans('Purchase successfully'); $notification=array('messege'=>$notification,'alert-type'=>'success'); return redirect()->route('subscription.subscription-history')->with($notification); }else{ $payable_amount = $plan->plan_price; Session::put('payable_amount', $payable_amount); $user = Auth::guard('web')->user(); $paymentService = app(\Modules\BasicPayment\app\Services\PaymentMethodService::class); $activeGateways = $paymentService->getActiveGatewaysWithDetails(); return view('subscription::user.payment')->with([ 'plan' => $plan, 'user' => $user, 'paymentService' => $paymentService, 'activeGateways' => $activeGateways, ]); } }else{ $notification=trans('Something went wrong'); $notification=array('messege'=>$notification,'alert-type'=>'error'); return redirect()->route('pricing.plan')->with($notification); } } public function renewPackage($id){ // plan id will be dynamic Session::forget('subscription_type'); Session::forget('current_plan_id'); Session::forget('payable_amount'); Session::forget('plan_id'); Session::forget('expiration_date'); Session::put('subscription_type', 'renew'); Session::put('current_plan_id', $id); Session::put('plan_id', $id); $current_plan = SubscriptionHistory::where('id', $id)->first(); $plan = SubscriptionPlan::find($current_plan->subscription_plan_id); Session::put('plan_id', $plan->id); if($plan){ if($plan->plan_price==0){ if ($current_plan->expiration_date <= date('Y-m-d')) { if ($plan->expiration_date == 'monthly') { $expiration_date = date('Y-m-d', strtotime('30 days')); } elseif ($plan->expiration_date == 'yearly') { $expiration_date = date('Y-m-d', strtotime('365 days')); } elseif ($plan->expiration_date == 'lifetime') { $expiration_date = date('Y-m-d', strtotime('+100 years')); } } else { $plan = SubscriptionPlan::find($current_plan->subscription_plan_id); if ($plan->expiration_date == 'monthly') { $expiration_date = date('Y-m-d', strtotime($current_plan->expiration_date.' +30 days')); } elseif ($plan->expiration_date == 'yearly') { $expiration_date = date('Y-m-d', strtotime($current_plan->expiration_date.' +365 days')); } elseif ($plan->expiration_date == 'lifetime') { $expiration_date = date('Y-m-d', strtotime('+100 years')); } } $this->store_free_pricing_plan($current_plan->user_id, $plan, $expiration_date); $notification=trans('Purchase successfully'); $notification=array('messege'=>$notification,'alert-type'=>'success'); return redirect()->route('subscription.subscription-history')->with($notification); }else{ $payable_amount = $plan->plan_price; Session::put('payable_amount', $payable_amount); $user = Auth::guard('web')->user(); $paymentService = app(\Modules\BasicPayment\app\Services\PaymentMethodService::class); $activeGateways = $paymentService->getActiveGatewaysWithDetails(); return view('subscription::user.payment')->with([ 'plan' => $plan, 'user' => $user, 'paymentService' => $paymentService, 'activeGateways' => $activeGateways, ]); } }else{ $notification=trans('Something went wrong'); $notification=array('messege'=>$notification,'alert-type'=>'error'); return redirect()->route('pricing.plan')->with($notification); } } public function store_free_pricing_plan($user_id, $plan, $expiration_date){ $activeOrder=SubscriptionHistory::where(['user_id'=>$user_id,'status'=>'active'])->count(); $oldOrders=SubscriptionHistory::where('user_id',$user_id)->update(['status'=>'expired']); $purchase=new SubscriptionHistory(); $purchase->user_id=$user_id; $purchase->order_id=mt_rand().date('Ydmis'); $purchase->subscription_plan_id=$plan->id; $purchase->expiration=$plan->expiration_date; $purchase->expiration_date = $expiration_date; $purchase->status='active'; $purchase->payment_status='success'; $purchase->plan_name = $plan->plan_name; $purchase->payable_amount = 0.0; $purchase->gateway_charge = 0; $purchase->payable_with_charge = 0; $purchase->paid_amount = 0; $purchase->payment_method = 'free'; $purchase->transaction = 'free'; $purchase->number_of_property = $plan->number_of_property; $purchase->number_of_feature_property = $plan->number_of_feature_property; $purchase->number_of_top_property = $plan->number_of_top_property; $purchase->number_of_urgent_property = $plan->number_of_urgent_property; $purchase->is_featured = $plan->is_featured; $purchase->is_top = $plan->is_top; $purchase->is_urgent = $plan->is_urgent; $purchase->save(); // active and in-active minimum limit listing $userProperties=Property::where('user_id',$user_id)->orderBy('id','desc')->get(); if($userProperties->count() !=0){ foreach($userProperties as $index => $property){ if(++$index <= $plan->number_of_property){ $property->status=1; $property->expired_date = $expiration_date; $property->save(); }else{ $property->status=0; $property->expired_date = 'expired'; $property->save(); } } } // end inactive Session::forget('after_success_url'); Session::forget('after_faild_url'); Session::forget('payable_amount'); Session::forget('gateway_charge'); Session::forget('after_success_gateway'); Session::forget('after_success_transaction'); Session::forget('subscription_plan_id'); Session::forget('payable_with_charge'); Session::forget('payable_currency'); Session::forget('subscription_plan_id'); Session::forget('paid_amount'); Session::forget('payment_details'); Session::forget('subscription_type'); Session::forget('plan_id'); Session::forget('current_plan_id'); Session::forget('subscription_history_id'); Session::forget('subscription_history'); Session::forget('expiration_date'); } } PK ���ZSE�@� � * app/Http/Controllers/PaymentController.phpnu �[��� <?php namespace Modules\Subscription\app\Http\Controllers; use Closure; use Exception; use Razorpay\Api\Api; use Illuminate\Support\Str; use Illuminate\Http\Request; use App\Traits\MailSenderTrait; use Illuminate\Support\Facades\DB; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Session; use App\Traits\GetGlobalInformationTrait; use Modules\Property\app\Models\Property; use App\Http\Requests\BankInformationRequest; use Modules\Currency\app\Models\MultiCurrency; use Srmklive\PayPal\Services\PayPal as PayPalClient; use Modules\Subscription\app\Models\SubscriptionPlan; use Modules\Subscription\app\Models\SubscriptionHistory; use Modules\BasicPayment\app\Http\Controllers\FrontPaymentController; use Modules\BasicPayment\app\Enums\BasicPaymentSupportedCurrencyListEnum; use Modules\BasicPayment\app\Enums\PaymentGatewaySupportedCurrencyListEnum; class PaymentController extends Controller { use GetGlobalInformationTrait, MailSenderTrait; private $paymentService; function __construct() { $this->paymentService = app(\Modules\BasicPayment\app\Services\PaymentMethodService::class); } function placeOrder($method) { $user=Auth::guard('web')->user(); $activeGateways = array_keys($this->paymentService->getActiveGatewaysWithDetails()); if (!in_array($method, $activeGateways)) { return response()->json(['status' => false, 'messege' => __('The selected payment method is now inactive.')]); } if (!$this->paymentService->isCurrencySupported($method)) { $supportedCurrencies = $this->paymentService->getSupportedCurrencies($method); return response()->json(['status' => false, 'messege' => __('You are trying to use unsupported currency'), 'supportCurrency' => sprintf( '%s %s: %s', strtoupper($method), __('supports only these types of currencies'), implode(', ', $supportedCurrencies) )]); } try { $payable_amount = Session::get('payable_amount'); $calculatePayableCharge = $this->paymentService->getPayableAmount($method, $payable_amount); DB::beginTransaction(); $paid_amount = $calculatePayableCharge?->payable_amount + $calculatePayableCharge?->gateway_charge; if (in_array($method, ['Razorpay', 'Stripe'])) { $allCurrencyCodes = BasicPaymentSupportedCurrencyListEnum::getStripeSupportedCurrencies(); if (in_array(Str::upper($calculatePayableCharge?->currency_code), $allCurrencyCodes['non_zero_currency_codes'])) { $paid_amount = $paid_amount; } elseif (in_array(Str::upper($calculatePayableCharge?->currency_code), $allCurrencyCodes['three_digit_currency_codes'])) { $paid_amount = (int) rtrim(strval($paid_amount), '0'); } else { $paid_amount = floatval($paid_amount / 100); } } $planId = Session::get('plan_id'); $subscription_type = Session::get('subscription_type'); $current_plan_id = Session::get('current_plan_id'); $payable_currency = getSessionCurrency(); $paymentDetails = Session::has('payment_details') ? Session::get('payment_details') : null; $plan = SubscriptionPlan::findOrFail($planId); $user = Auth::guard('web')->user(); if($subscription_type == 'renew'){ $current_plan = SubscriptionHistory::where('id', $current_plan_id)->first(); if ($current_plan->expiration_date <= date('Y-m-d')) { if ($plan->expiration_date == 'monthly') { $expiration_date = date('Y-m-d', strtotime('30 days')); } elseif ($plan->expiration_date == 'yearly') { $expiration_date = date('Y-m-d', strtotime('365 days')); } elseif ($plan->expiration_date == 'lifetime') { $expiration_date = date('Y-m-d', strtotime('+100 years')); } } else { $plan = SubscriptionPlan::find($current_plan->subscription_plan_id); if ($plan->expiration_date == 'monthly') { $expiration_date = date('Y-m-d', strtotime($current_plan->expiration_date.' +30 days')); } elseif ($plan->expiration_date == 'yearly') { $expiration_date = date('Y-m-d', strtotime($current_plan->expiration_date.' +365 days')); } elseif ($plan->expiration_date == 'lifetime') { $expiration_date = date('Y-m-d', strtotime('+100 years')); } } }else{ if ($plan->expiration_date == 'monthly') { $expiration_date = date('Y-m-d', strtotime('30 days')); } elseif ($plan->expiration_date == 'yearly') { $expiration_date = date('Y-m-d', strtotime('365 days')); } elseif ($plan->expiration_date == 'lifetime') { $expiration_date = date('Y-m-d', strtotime('+100 years')); } } Session::put('expiration_date', $expiration_date); if (!is_null($planId)) { $purchase = new SubscriptionHistory(); $purchase->order_id = mt_rand() . date('Ydmis'); $purchase->user_id = $user->id; $purchase->subscription_plan_id = $plan->id; $purchase->plan_name = $plan->plan_name; $purchase->plan_price = $plan->plan_price; $purchase->expiration = $plan->expiration_date; $purchase->expiration_date = $expiration_date; $purchase->status = 'pending'; $purchase->payable_amount = $payable_amount; $purchase->gateway_charge = $calculatePayableCharge?->gateway_charge; $purchase->payable_with_charge = $calculatePayableCharge?->payable_amount; $purchase->payable_currency = $payable_currency; $purchase->transaction = ''; $purchase->number_of_property = $plan->number_of_property; $purchase->number_of_feature_property = $plan->number_of_feature_property; $purchase->number_of_top_property = $plan->number_of_top_property; $purchase->number_of_urgent_property = $plan->number_of_urgent_property; $purchase->is_featured = $plan->is_featured; $purchase->is_top = $plan->is_top; $purchase->is_urgent = $plan->is_urgent; if ($payable_amount <= 0) { $purchase->payment_method = 'free'; $purchase->payment_status = 'pending'; $purchase->paid_amount = 0.00; } elseif ($method === 'bank') { $purchase->payment_method = 'bank'; $purchase->payment_status = 'pending'; $purchase->paid_amount = 0.00; $purchase->payment_details = json_encode($paymentDetails); } else { $purchase->payment_method = $method; $purchase->payment_status = 'pending'; $purchase->paid_amount = $paid_amount; $purchase->payment_details = json_encode($paymentDetails); } $purchase->save(); } DB::commit(); return response()->json(['success' => true, 'subscription_id' => $purchase?->id]); } catch (Exception $e) { DB::rollBack(); return response()->json(['status' => false, 'messege' => __('Payment Failed')]); } } function index() { $subscription_id = request('subscription_id', null); $user = $user=Auth::guard('web')->user(); $subscription_history = SubscriptionHistory::where('id', $subscription_id)->where('status', 'pending')->first(); if (!$subscription_history) { $notification = [ 'messege' => __('Not Found!'), 'alert-type' => 'error', ]; return redirect()->back()->with($notification); } $paymentMethod = $subscription_history->payment_method; if (!$this->paymentService->isActive($paymentMethod)) { $notification = [ 'messege' => __('The selected payment method is now inactive.'), 'alert-type' => 'error', ]; return redirect()->back()->with($notification); } $calculatePayableCharge = $this->paymentService->getPayableAmount($paymentMethod, $subscription_history?->payable_amount); Session::put('subscription_history_id', $subscription_history->id); Session::put('subscription_history', $subscription_history); Session::put('payable_currency', $subscription_history?->payable_currency); Session::put('paid_amount', $calculatePayableCharge?->payable_with_charge); $paymentService = $this->paymentService; $view = $this->paymentService->getBladeView($paymentMethod); return view($view, compact('subscription_history', 'paymentService', 'paymentMethod')); } public function stripe_pay() { $basic_payment = $this->get_basic_payment_info(); // Set your Stripe API secret key \Stripe\Stripe::setApiKey($basic_payment?->stripe_secret); $after_failed_url = route('subscription.payment-addon-faild'); session()->put('after_failed_url', $after_failed_url); $payable_currency = session()->get('payable_currency'); $paid_amount = session()->get('paid_amount'); $allCurrencyCodes = $this->paymentService->getSupportedCurrencies($this->paymentService::STRIPE); if (in_array(Str::upper($payable_currency), $allCurrencyCodes['non_zero_currency_codes'])) { $payable_with_charge = $paid_amount; } elseif (in_array(Str::upper($payable_currency), $allCurrencyCodes['three_digit_currency_codes'])) { $convertedCharge = (string) $paid_amount . '0'; $payable_with_charge = (int) $convertedCharge; } else { $payable_with_charge = (int) ($paid_amount * 100); } // Create a checkout session $checkoutSession = \Stripe\Checkout\Session::create([ 'payment_method_types' => ['card'], 'line_items' => [[ 'price_data' => [ 'currency' => $payable_currency, 'unit_amount' => $payable_with_charge, 'product_data' => [ 'name' => cache()->get('setting')->app_name, ], ], 'quantity' => 1, ]], 'mode' => 'payment', 'success_url' => url('subscription/pay-via-stripe') . '?session_id={CHECKOUT_SESSION_ID}', 'cancel_url' => $after_failed_url, ]); // Redirect to the checkout session URL return redirect()->away($checkoutSession->url); } public function stripe_success(Request $request) { $after_success_url = route('subscription.payment-addon-success'); $basic_payment = $this->get_basic_payment_info(); // Assuming the Checkout Session ID is passed as a query parameter $session_id = $request->query('session_id'); if ($session_id) { \Stripe\Stripe::setApiKey($basic_payment->stripe_secret); $session = \Stripe\Checkout\Session::retrieve($session_id); $paymentDetails = [ 'transaction_id' => $session->payment_intent, 'amount' => $session->amount_total, 'currency' => $session->currency, 'payment_status' => $session->payment_status, 'created' => $session->created, ]; Session::put('after_success_url', $after_success_url); Session::put('after_success_transaction', $session->payment_intent); Session::put('payment_details', $paymentDetails); return redirect($after_success_url); } $after_faild_url = Session::get('after_faild_url'); return redirect($after_faild_url); } public function pay_via_paypal() { $basic_payment = $this->get_basic_payment_info(); $paypal_credentials = (object) [ 'paypal_client_id' => $basic_payment->paypal_client_id, 'paypal_secret_key' => $basic_payment->paypal_secret_key, 'paypal_app_id' => $basic_payment->paypal_app_id, 'paypal_account_mode' => $basic_payment->paypal_account_mode, ]; $after_success_url = route('subscription.payment-addon-success'); $after_failed_url = route('subscription.payment-addon-faild'); return $this->pay_with_paypal($paypal_credentials, $after_success_url, $after_failed_url); } public function pay_with_paypal($paypal_credentials, $after_success_url, $after_failed_url) { config(['paypal.mode' => $paypal_credentials->paypal_account_mode]); if ($paypal_credentials->paypal_account_mode == 'sandbox') { config(['paypal.sandbox.client_id' => $paypal_credentials->paypal_client_id]); config(['paypal.sandbox.client_secret' => $paypal_credentials->paypal_secret_key]); } else { config(['paypal.live.client_id' => $paypal_credentials->paypal_client_id]); config(['paypal.live.client_secret' => $paypal_credentials->paypal_secret_key]); config(['paypal.live.app_id' => $paypal_credentials->paypal_app_id]); } $payable_currency = session()->get('payable_currency'); $paid_amount = session()->get('paid_amount'); try { $provider = new PayPalClient; $provider->setApiCredentials(config('paypal')); $paypalToken = $provider->getAccessToken(); $response = $provider->createOrder([ 'intent' => 'CAPTURE', 'application_context' => [ 'return_url' => route('subscription.paypal-success-payment'), 'cancel_url' => $after_failed_url, ], 'purchase_units' => [ 0 => [ 'amount' => [ 'currency_code' => $payable_currency, 'value' => $paid_amount, ], ], ], ]); } catch (Exception $ex) { info($ex->getMessage()); $notification = __('Payment faild, please try again'); $notification = ['messege' => $notification, 'alert-type' => 'error']; return redirect()->back()->with($notification); } if (isset($response['id']) && $response['id'] != null) { Session::put('after_success_url', $after_success_url); Session::put('after_failed_url', $after_failed_url); Session::put('paypal_credentials', $paypal_credentials); // redirect to approve href foreach ($response['links'] as $links) { if ($links['rel'] == 'approve') { return redirect()->away($links['href']); } } $notification = __('Payment faild, please try again'); $notification = ['messege' => $notification, 'alert-type' => 'error']; return redirect()->back()->with($notification); } else { $notification = __('Payment faild, please try again'); $notification = ['messege' => $notification, 'alert-type' => 'error']; return redirect()->back()->with($notification); } } public function paypal_success(Request $request) { $paypal_credentials = Session::get('paypal_credentials'); config(['paypal.mode' => $paypal_credentials->paypal_account_mode]); if ($paypal_credentials->paypal_account_mode == 'sandbox') { config(['paypal.sandbox.client_id' => $paypal_credentials->paypal_client_id]); config(['paypal.sandbox.client_secret' => $paypal_credentials->paypal_secret_key]); } else { config(['paypal.sandbox.client_id' => $paypal_credentials->paypal_client_id]); config(['paypal.sandbox.client_secret' => $paypal_credentials->paypal_secret_key]); config(['paypal.sandbox.app_id' => $paypal_credentials->paypal_account_mode]); } $provider = new PayPalClient; $provider->setApiCredentials(config('paypal')); $provider->getAccessToken(); $response = $provider->capturePaymentOrder($request['token']); if (isset($response['status']) && $response['status'] == 'COMPLETED') { Session::put('after_success_transaction', $request->PayerID); $after_success_url = Session::get('after_success_url'); $paid_amount = $this->checkArrayIsset($response['purchase_units'][0]['payments']['captures'][0]['amount']['value']); Session::put('paid_amount', $paid_amount); $details = [ 'payments_captures_id' => $this->checkArrayIsset($response['purchase_units'][0]['payments']['captures'][0]['id']), 'amount' => $this->checkArrayIsset($response['purchase_units'][0]['payments']['captures'][0]['amount']['value']), 'currency' => $this->checkArrayIsset($response['purchase_units'][0]['payments']['captures'][0]['amount']['currency_code']), 'paid' => $this->checkArrayIsset($response['purchase_units'][0]['payments']['captures'][0]['seller_receivable_breakdown']['gross_amount']['value']), 'paypal_fee' => $this->checkArrayIsset($response['purchase_units'][0]['payments']['captures'][0]['seller_receivable_breakdown']['paypal_fee']['value']), 'net_amount' => $this->checkArrayIsset($response['purchase_units'][0]['payments']['captures'][0]['seller_receivable_breakdown']['net_amount']['value']), 'status' => $this->checkArrayIsset($response['purchase_units'][0]['payments']['captures'][0]['status']), ]; Session::put('payment_details', $details); return redirect($after_success_url); } else { $after_failed_url = Session::get('after_failed_url'); return redirect($after_failed_url); } } private function checkArrayIsset($value) { return isset($value) ? $value : null; } public function pay_via_bank(BankInformationRequest $request) { $bankDetails = json_encode($request->only(['bank_name', 'account_number', 'routing_number', 'branch', 'transaction'])); $allPayments = SubscriptionHistory::whereNotNull('payment_details')->get(); foreach ($allPayments as $payment) { $paymentDetailsJson = json_decode($payment?->payment_details, true); if (isset($paymentDetailsJson['account_number']) && $paymentDetailsJson['account_number'] == $request->account_number) { if (isset($paymentDetailsJson['transaction']) && $paymentDetailsJson['transaction'] == $request->transaction) { $notification = __('Payment failed, transaction already exist'); $notification = ['messege' => $notification, 'alert-type' => 'error']; return redirect()->back()->with($notification); } } } Session::put('after_success_transaction', $request->transaction); Session::put('payment_details', $bankDetails); Session::put('after_success_transaction', $request->transaction); return $this->payment_addon_success(); } public function pay_via_razorpay(Request $request) { $payment_setting = $this->get_payment_gateway_info(); $after_success_url = route('subscription.payment-addon-success'); $after_failed_url = route('subscription.payment-addon-faild'); $razorpay_credentials = (object) [ 'razorpay_key' => $payment_setting->razorpay_key, 'razorpay_secret' => $payment_setting->razorpay_secret, ]; return $this->pay_with_razorpay($request, $razorpay_credentials, $request->payable_amount, $after_success_url, $after_failed_url); } public function pay_with_razorpay(Request $request, $razorpay_credentials, $payable_amount, $after_success_url, $after_failed_url) { $input = $request->all(); $api = new Api($razorpay_credentials->razorpay_key, $razorpay_credentials->razorpay_secret); $payment = $api->payment->fetch($input['razorpay_payment_id']); if (count($input) && !empty($input['razorpay_payment_id'])) { try { $response = $api->payment->fetch($input['razorpay_payment_id'])->capture(['amount' => $payment['amount']]); $paymentDetails = [ 'transaction_id' => $response->id, 'amount' => $response->amount, 'currency' => $response->currency, 'fee' => $response->fee, 'description' => $response->description, 'payment_method' => $response->method, 'status' => $response->status, ]; Session::put('after_success_url', $after_success_url); Session::put('after_failed_url', $after_failed_url); Session::put('after_success_transaction', $response->id); Session::put('payment_details', $paymentDetails); return redirect($after_success_url); } catch (Exception $e) { info($e->getMessage()); return redirect($after_failed_url); } } else { return redirect($after_failed_url); } } public function pay_via_mollie() { $after_success_url = route('subscription.payment-addon-success'); $after_failed_url = route('subscription.payment-addon-faild'); session()->put('after_success_url', $after_success_url); session()->put('after_failed_url', $after_failed_url); $payment_setting = $this->get_payment_gateway_info(); $mollie_credentials = (object) [ 'mollie_key' => $payment_setting->mollie_key, ]; return $this->pay_with_mollie($mollie_credentials); } public function pay_with_mollie($mollie_credentials) { $payable_currency = session()->get('payable_currency'); $paid_amount = session()->get('paid_amount'); try { $mollie = new \Mollie\Api\MollieApiClient(); $mollie->setApiKey($mollie_credentials->mollie_key); $payment = $mollie->payments->create([ "amount" => [ "currency" => "$payable_currency", "value" => "$paid_amount", ], "description" => auth()->user()?->name, "redirectUrl" => route('subscription.mollie-payment-success'), ]); $payment = $mollie->payments->get($payment->id); session()->put('payment_id', $payment->id); session()->put('mollie_credentials', $mollie_credentials); return redirect($payment->getCheckoutUrl(), 303); } catch (Exception $ex) { info($ex); info($ex->getMessage()); $notification = __('Payment faild, please try again'); $notification = ['messege' => $notification, 'alert-type' => 'error']; return redirect()->back()->with($notification); } } public function mollie_payment_success() { $mollie_credentials = Session::get('mollie_credentials'); $mollie = new \Mollie\Api\MollieApiClient(); $mollie->setApiKey($mollie_credentials->mollie_key); $payment = $mollie->payments->get(session()->get('payment_id')); if ($payment->isPaid()) { $paymentDetails = [ 'transaction_id' => $payment->id, 'amount' => $payment->amount->value, 'currency' => $payment->amount->currency, 'fee' => $payment->settlementAmount->value . ' ' . $payment->settlementAmount->currency, 'description' => $payment->description, 'payment_method' => $payment->method, 'status' => $payment->status, 'paid_at' => $payment->paidAt, ]; Session::put('payment_details', $paymentDetails); Session::put('after_success_transaction', session()->get('payment_id')); $after_success_url = Session::get('after_success_url'); return redirect($after_success_url); } else { $after_failed_url = Session::get('after_failed_url'); return redirect($after_failed_url); } } public function pay_via_instamojo() { $after_success_url = route('subscription.payment-addon-success'); $after_failed_url = route('subscription.payment-addon-faild'); session()->put('after_success_url', $after_success_url); session()->put('after_failed_url', $after_failed_url); $payment_setting = $this->get_payment_gateway_info(); $instamojo_credentials = (object) [ 'instamojo_api_key' => $payment_setting->instamojo_api_key, 'instamojo_auth_token' => $payment_setting->instamojo_auth_token, 'account_mode' => $payment_setting->instamojo_account_mode, ]; return $this->pay_with_instamojo($instamojo_credentials); } public function pay_with_instamojo($instamojo_credentials) { $payable_currency = session()->get('payable_currency'); $paid_amount = session()->get('paid_amount'); $plan_id = session()->get('plan_id'); $environment = $instamojo_credentials->account_mode; $api_key = $instamojo_credentials->instamojo_api_key; $auth_token = $instamojo_credentials->instamojo_auth_token; if ($environment == 'Sandbox') { $url = 'https://test.instamojo.com/api/1.1/'; } else { $url = 'https://www.instamojo.com/api/1.1/'; } try { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url . 'payment-requests/'); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-Api-Key:$api_key", "X-Auth-Token:$auth_token"]); $payload = [ 'purpose' => env('APP_NAME'), 'amount' => $paid_amount, 'phone' => '918160651749', 'buyer_name' => auth()->user()?->name, 'redirect_url' => route('subscription.instamojo-success'), 'send_email' => true, 'webhook' => 'http://www.example.com/webhook/', 'send_sms' => true, 'email' => auth()->user()?->email, 'allow_repeated_payments' => false, ]; curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payload)); $response = curl_exec($ch); curl_close($ch); $response = json_decode($response); session()->put('instamojo_credentials', $instamojo_credentials); if(!empty($response?->payment_request?->longurl)){ return redirect($response?->payment_request?->longurl); }else{ return redirect()->route('subscription.purchase.package', $plan_id)->with(['messege' => __('Payment faild, please try again'), 'alert-type' => 'error']); } } catch (Exception $ex) { info($ex->getMessage()); $notification = __('Payment faild, please try again'); $notification = ['messege' => $notification, 'alert-type' => 'error']; return redirect()->back()->with($notification); } } public function flutterwave_payment(Request $request) { $payment_setting = $this->get_payment_gateway_info(); $curl = curl_init(); $tnx_id = $request->tnx_id; $url = "https://api.flutterwave.com/v3/transactions/$tnx_id/verify"; $token = $payment_setting?->flutterwave_secret_key; curl_setopt_array($curl, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', "Authorization: Bearer $token", ], ]); $response = curl_exec($curl); curl_close($curl); $response = json_decode($response); if ($response->status == 'success') { $paymentDetails = [ 'status' => $response->status, 'trx_id' => $tnx_id, 'amount' => $response?->data?->amount, 'amount_settled' => $response?->data?->amount_settled, 'currency' => $response?->data?->currency, 'charged_amount' => $response?->data?->charged_amount, 'app_fee' => $response?->data?->app_fee, 'merchant_fee' => $response?->data?->merchant_fee, 'card_last_4digits' => $response?->data?->card?->last_4digits, ]; Session::put('payment_details', $paymentDetails); Session::put('after_success_transaction', $tnx_id); return response()->json(['messege' => 'Payment Success.']); } else { $notification = __('Payment faild, please try again'); return response()->json(['messege' => $notification], 403); } } public function paystack_payment(Request $request) { $payment_setting = $this->get_payment_gateway_info(); $reference = $request->reference; $transaction = $request->tnx_id; $secret_key = $payment_setting?->paystack_secret_key; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => "https://api.paystack.co/transaction/verify/$reference", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => [ "Authorization: Bearer $secret_key", 'Cache-Control: no-cache', ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); $final_data = json_decode($response); if ($final_data->status == true) { $paymentDetails = [ 'status' => $final_data?->data?->status, 'transaction_id' => $transaction, 'requested_amount' => $final_data?->data->requested_amount, 'amount' => $final_data?->data?->amount, 'currency' => $final_data?->data?->currency, 'gateway_response' => $final_data?->data?->gateway_response, 'paid_at' => $final_data?->data?->paid_at, 'card_last_4_digits' => $final_data?->data->authorization?->last4, ]; Session::put('payment_details', $paymentDetails); Session::put('after_success_transaction', $transaction); return response()->json(['messege' => 'Payment Success.']); } else { $notification = __('Payment faild, please try again'); return response()->json(['messege' => $notification], 403); } } public function payment_addon_success($bankDetails = null) { $subscription_history_id = Session::get('subscription_history_id'); $transaction = Session::get('after_success_transaction'); $paymentDetails = Session::get('payment_details'); $expiration_date = Session::get('expiration_date'); $planId = Session::get(key: 'plan_id'); $user = Auth::guard('web')->user(); $subscription_history = SubscriptionHistory::where('id', $subscription_history_id)->first(); if($subscription_history->payment_method != 'bank'){ SubscriptionHistory::where(['user_id' => $user->id, 'status' => 'active'])->update(['status' => 'expired']); } if($subscription_history){ $subscription_history->status = $subscription_history->payment_method == 'bank' ? 'pending':'active'; $subscription_history->payment_status = $subscription_history->payment_method == 'bank' ? 'pending':'success'; $subscription_history->payment_details = json_encode($paymentDetails); $subscription_history->transaction = $transaction; $subscription_history->save(); $plan = SubscriptionPlan::findOrFail($planId); $userProperties=Property::where('user_id',$user->id)->orderBy('id','desc')->get(); if($subscription_history->payment_method != 'bank'){ if($userProperties->count() !=0){ if($plan->number_of_property !=-1){ foreach($userProperties as $index => $property){ if(++$index <= $plan->number_of_property){ $property->expired_date=$expiration_date; $property->save(); }else{ $property->expired_date='expired'; $property->save(); } } }elseif($plan->number_of_property ==-1){ foreach($userProperties as $index => $property){ $property->expired_date=$expiration_date; $property->save(); } } } } } /**write your project logic here after successfully payment, you can use above information if you need. */ /**if gateway name == Direct Bank, payment status will be pending, after approval by admin, status will be success if($gateway_name == 'Direct Bank'){} */ /**after write all logic you need to forget all session data*/ Session::forget('after_success_url'); Session::forget('after_faild_url'); Session::forget('payable_amount'); Session::forget('gateway_charge'); Session::forget('after_success_gateway'); Session::forget('after_success_transaction'); Session::forget('subscription_plan_id'); Session::forget('payable_with_charge'); Session::forget('payable_currency'); Session::forget('subscription_plan_id'); Session::forget('paid_amount'); Session::forget('payment_details'); Session::forget('subscription_type'); Session::forget('plan_id'); Session::forget('current_plan_id'); Session::forget('subscription_history_id'); Session::forget('subscription_history'); Session::forget('expiration_date'); $notification = __('Purchase successfully'); $notification = ['messege' => $notification, 'alert-type' => 'success']; return redirect()->route('subscription.subscription-history')->with($notification); } public function payment_addon_faild() { $id = Session::get('subscription_plan_id'); $plan_id = Session::get('plan_id'); /**you can write here your project related code */ Session::forget('after_success_url'); Session::forget('after_faild_url'); Session::forget('payable_amount'); Session::forget('gateway_charge'); Session::forget('after_success_gateway'); Session::forget('after_success_transaction'); Session::forget('subscription_plan_id'); Session::forget('payable_with_charge'); Session::forget('payable_currency'); Session::forget('subscription_plan_id'); Session::forget('paid_amount'); Session::forget('payment_details'); Session::forget('subscription_type'); Session::forget('plan_id'); Session::forget('current_plan_id'); Session::forget('subscription_history_id'); Session::forget('subscription_history'); Session::forget('expiration_date'); $notification = __('Payment Failed please try again'); $notification = ['messege' => $notification, 'alert-type' => 'error']; return redirect()->route('subscription.purchase.package', parameters: $plan_id)->with($notification); } public function store_free_pricing_plan($user_id, $plan, $expiration_date) { SubscriptionHistory::where('user_id', $user_id)->update(['status' => 'expired']); $activeOrder=SubscriptionHistory::where(['user_id'=>$user_id,'status'=>'active'])->count(); $purchase=new SubscriptionHistory(); $purchase->user_id=$user_id; $purchase->order_id=mt_rand().date('Ydmis'); $purchase->subscription_plan_id=$plan->id; $purchase->expiration=$plan->expiration_date; $purchase->expiration_date = $expiration_date; $purchase->status='active'; $purchase->payment_status='success'; $purchase->plan_name = $plan->plan_name; $purchase->payable_amount = 0.0; $purchase->gateway_charge = 0; $purchase->payable_with_charge = 0; $purchase->paid_amount = 0; $purchase->payment_method = 'free'; $purchase->transaction = 'free'; $purchase->number_of_property = $plan->number_of_property; $purchase->number_of_feature_property = $plan->number_of_feature_property; $purchase->number_of_top_property = $plan->number_of_top_property; $purchase->number_of_urgent_property = $plan->number_of_urgent_property; $purchase->is_featured = $plan->is_featured; $purchase->is_top = $plan->is_top; $purchase->is_urgent = $plan->is_urgent; $purchase->save(); // active and in-active minimum limit listing $userProperties=Property::where('user_id',$user_id)->orderBy('id','desc')->get(); if($userProperties->count() !=0){ foreach($userProperties as $index => $property){ if(++$index <= $plan->number_of_property){ $property->status=1; $property->expired_date = $expiration_date; $property->save(); }else{ $property->status=0; $property->expired_date = 'expired'; $property->save(); } } } // end inactive } } PK ���Z app/Http/Requests/.gitkeepnu �[��� PK ���Z app/Http/Middleware/.gitkeepnu �[��� PK ���Z app/Models/.gitkeepnu �[��� PK ���Z^�t� � app/Models/SubscriptionPlan.phpnu �[��� <?php namespace Modules\Subscription\app\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Modules\Subscription\Database\factories\SubscriptionPlanFactory; class SubscriptionPlan extends Model { use HasFactory; /** * The attributes that are mass assignable. */ protected $fillable = []; protected static function newFactory(): SubscriptionPlanFactory { } } PK ���Zj�S� � app/Models/error_lognu �[��� [08-May-2025 17:16:10 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Database\Eloquent\Model" not found in /home/lekhnath/silverray.com.au/Modules/Subscription/app/Models/SubscriptionHistory.php:13 Stack trace: #0 {main} thrown in /home/lekhnath/silverray.com.au/Modules/Subscription/app/Models/SubscriptionHistory.php on line 13 [08-May-2025 17:16:11 UTC] PHP Fatal error: Uncaught Error: Class "Illuminate\Database\Eloquent\Model" not found in /home/lekhnath/silverray.com.au/Modules/Subscription/app/Models/SubscriptionPlan.php:9 Stack trace: #0 {main} thrown in /home/lekhnath/silverray.com.au/Modules/Subscription/app/Models/SubscriptionPlan.php on line 9 PK ���Z�t� � "