subscription page updated

This commit is contained in:
Hritikkk9
2024-07-02 19:20:18 +05:30
parent d3a14a7eb1
commit 58b3f3b19c
14 changed files with 825 additions and 308 deletions

View File

@@ -3,9 +3,18 @@
namespace App\Http\Controllers\APIs\Customer_API;
use App\Http\Controllers\Controller;
use App\Models\IamPrincipal;
use App\Models\SubscriptionProducts;
use App\Models\Subscriptions;
use App\Services\APIs\CustomerAPIs\RulesApiServices;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Redirect;
class SubscriptionController extends Controller
{
@@ -17,19 +26,48 @@ class SubscriptionController extends Controller
public function mySubscription(Request $request)
{
try {
// dd($request->header('access-token'));
// $token = readHeaderToken();
// dd("acc",$token);
$token = true;
// dd($token, Session::get('vendorToken'));
if ($token) {
$user_id = 12;
// $user_id = $token['sub'];
$dateTime = now();
$formattedDateTime = $dateTime->format('Y-m-d H:i:s');
$isSubscribedUser = Subscriptions::where('iam_principal_xid', $user_id)
->where('next_payment_date', '>=', $formattedDateTime)
->first();
$userData = IamPrincipal::where('id', $user_id)->first();
// $request['iam_principal_id'] = $user_id;
$products = SubscriptionProducts::where('is_active', '1')->get();
return view('Admin.pages.subscriptions.my-subscription');
if ($isSubscribedUser) {
return view("Admin.pages.subscriptions.my-subscription", compact('user_id', 'userData', 'isSubscribedUser', 'products'));
}
$productList = SubscriptionProducts::where('is_active', 1)->first();
return view('Admin.pages.subscriptions.list-of-products', compact('productList','userData'));
} else {
return jsonResponseWithErrorMessageApi(__('auth.user_deleted'), 409);
}
} catch (\Exception $e) {
Log::error("An error occurred in " . __METHOD__ . ": " . $e->getMessage(), ['exception' => $e]);
return jsonResponseWithErrorMessage(__('auth.something_went_wrong'), 500);
return jsonResponseWithErrorMessage(__('auth.something_went_wrong'));
}
}
//created by; Hritik
//created by; Hritik
//On - 28th June ,2024
//use - to get Data of User in Webview and show list of product
@@ -37,10 +75,9 @@ class SubscriptionController extends Controller
public function listOfProduct(Request $request)
{
try {
$productList = SubscriptionProducts::where('is_active', 1)->first();
return view('Admin.pages.subscriptions.list-of-products');
return view('Admin.pages.subscriptions.list-of-products', compact('productList'));
} catch (\Exception $e) {
Log::error("An error occurred in " . __METHOD__ . ": " . $e->getMessage(), ['exception' => $e]);
@@ -51,190 +88,165 @@ class SubscriptionController extends Controller
//created by; Hritik
//On - 18th May ,2024
//use - to get Data of Detailed List Of Product , Monthly & Yearly
public function nextPage(Request $request)
{
//On - 02th July ,2024
//use - to Create Subscription Product & price for Monthly
try {
// $token = readHeaderToken();
$token = true;
// dd($request);
if ($token) {
// $user_id = $token['sub'];
// $validator = $this->validateSubscriptionsForm($request);
// if ($validator->fails()) {
// $validationErrors = $validator->errors()->all();
// Log::error("Razorpay subscriptions plan validation error: " . implode(", ", $validationErrors));
// return jsonResponseWithErrorMessageApi($validationErrors, 203);
// }
// $request['iam_principal_id'] = $user_id;
$productTypeXid = $request->query('selected_product_type_id');
$userId = $request->query('user_id');
$products = Products::with('productType', 'productTier')
->where('product_type_xid', $productTypeXid)
->where('is_active', '1')->get();
foreach ($products as $k => $val) {
$products[$k]['product_image'] = ListingImageUrl('product_image', $val['product_image']);
}
$user = IamPrincipal::where('id', $userId)->where('is_active', 1)->first();
$user_name = $user->user_name;
$user_contact_no = $user->phone_number;
$user_email = $user->email_address;
return view(
'admin-dashboard.pages.razorpay-subscription.subscription-product-detail-pay',
compact(
'products',
'userId',
'user_name',
'user_contact_no',
'user_email',
)
);
} else {
return jsonResponseWithErrorMessageApi(__('auth.user_deleted'), 409);
}
} catch (Exception $e) {
Log::error("An error occurred in " . __METHOD__ . ": " . $e->getMessage(), ['exception' => $e]);
return jsonResponseWithErrorMessage(__('auth.something_went_wrong'), 500);
}
}
//created by :-Hritik
// On - 16th may ,2024
//subscription to a particular project based on plans and returning the subscription id to web to open Subscription screen
public function subscribeToProduct(Request $request)
public function createStripeProduct(Request $request)
{
try {
DB::beginTransaction();
// $token = readHeaderToken();
$iamId = $request->iam_principal_xid;
$razorPayPlanId = $request->razorpay_plan_id;
$productId = $request->product_id;
$stripeSecret = (config('constants.subscription.stripe_secret_key'));
$user = IamPrincipal::where('id', $iamId)->where('is_active', 1)->first();
$id = $user->id;
$phone = $user->phone_number;
$email = $user->email_address;
// $stripeSecret = env('STRIPE_SECRET');
$stripe = new \Stripe\StripeClient($stripeSecret);
// dd($stripeSecret,$stripe,$request->all());
$product = Products::where('razorpay_plan_id', $razorPayPlanId)
->where('is_active', 1)
->first();
$validator = $this->validateSubscriptionsproductForm($request);
if ($product && $product->product_tier_xid == 1) {
//if product tier is monthly then we are setting count to 1200 means 100 years
$total_count = 1200;
} else if ($product && $product->product_tier_xid == 2) {
//if product tier is Yearly then we are setting count to 100 means 100 years
$total_count = 100;
} else {
//if product tier is not found then we are setting to 1
$total_count = 1;
if ($validator->fails()) {
$validationErrors = $validator->errors()->all();
Log::error("Stripe subscriptions plan validation error: " . implode(", ", $validationErrors));
return jsonResponseWithErrorMessageApi($validationErrors, 203);
}
$api = new Api(config('constants.razorpay.key_id'), config('constants.razorpay.key_secret'));
$plan_id = $product->razorpay_plan_id;
// Call the subscription create method with request parameters
$response = $api->subscription->create([
'plan_id' => $plan_id,
'total_count' => $total_count,
'quantity' => '1',
'notes' => [
'product_id' => intval($product->id),
'iam_principal_xid' => intval($iamId)
],
'notify_info' => [
'notify_phone' => $phone,
'notify_email' => $email
],
// 'callback_url' => route('my-subscription-page')
$id = SubscriptionProducts::create([
'product_name' => $request->product_name,
'product_value' => $request->product_value,
'product_details' => $request->product_details,
]);
$notes = $response->notes;
$notesArray = [
'product_id' => $notes->product_id,
'iam_principal_xid' => $notes->iam_principal_xid,
];
$productCreate = $stripe->products->create([
'name' => $request->product_name,
]);
$updateCreatedPlan = SubscriptionProducts::where('id', $id->id)->update([
'stripe_product_id' => $productCreate->id
]);
$totalPrice = $request->product_value;
if ($totalPrice && $totalPrice != 0 && $totalPrice != null) {
$productPrice1 = $stripe->prices->create([
'unit_amount' => $totalPrice * 100,
// amount entered by Admin (in cents)
'currency' => 'usd',
'recurring' => ['interval' => 'month'],
'product' => $productCreate->id,
'nickname' => 'Monthly Price',
]);
$updateCreatedPlan = SubscriptionProducts::where('id', $id->id)->update([
'stripe_price_id' => $productPrice1->id
]);
}
DB::commit();
// return response()->json($response);
return response()->json([
'subId' => $response->id,
'userId' => $iamId,
]);
return jsonResponseWithSuccessMessage(__('success.save_data', $response->short_url));
// return Redirect::away($response->short_url);
} catch (Exception $e) {
return jsonResponseWithSuccessMessage(__('success.save_data'), 200);
} catch (\Exception $ex) {
DB::rollBack();
Log::error("An error occurred in " . __METHOD__ . ": " . $e->getMessage(), ['exception' => $e]);
return jsonResponseWithErrorMessage(__('auth.something_went_wrong'), 500);
Log::error('Favourite Restaurant service failed: ' . $ex->getMessage());
return jsonResponseWithErrorMessageApi(__('auth.something_went_wrong'), 500);
}
}
public function validateSubscriptionsForm(Request $request)
public function validateSubscriptionsproductForm(Request $request)
{
return Validator::make(
$request->all(),
[
'plan_id' => 'required',
'product_name' => 'required',
'product_value' => 'required',
'product_details' => 'required',
]
);
}
//created by; Hritik
//On - 02th July ,2024
//use - to Create Subscription
public function subscriptionToPlan(Request $request)
{
// dd($request->all());
try {
$userId = $request->user_id;
$subscriptionProductXid = $request->subscription_product_xid;
$stripeSecret = (config('constants.subscription.stripe_secret_key'));
$stripe = new \Stripe\StripeClient($stripeSecret);
// $taxId = (config('services.stripe.tax_id'));
$userData = IamPrincipal::where('id', $userId)->first();
if ($userData) {
$subscriptionPlan = SubscriptionProducts::where('id', $subscriptionProductXid)->first();
if ($subscriptionPlan && $subscriptionPlan->stripe_price_id && $subscriptionPlan->stripe_price_id != null) {
$checkout = $stripe->checkout->sessions->create([
'customer_email' => $userData->email_address,
'line_items' => [
[
'price' => $subscriptionPlan->stripe_price_id,
'quantity' => 1,
// 'tax_rates'=>[$taxId],
],
],
'mode' => 'subscription',
// 'allow_promotion_codes' => true,
// 'tax_id_collection' => ['enabled' => true],
'metadata' => [
'userId' => $userData->id,
'userEmail' => $userData->email_address,
'subscriptionProductXid' => $subscriptionProductXid
],
'success_url' => "{{route('thankyou')}}",
// 'cancel_url' => "http://localhost/cheerstothe_season_2_o/my-subscription-page",
]);
return Redirect::away($checkout->url);
//note:-for now i am just sending the cveonly=0 and lmacve=1 for reference .'&lmacve=1&cveonly=0'
}else{
return redirect()->back()->with(['error' => "Something went wrong while subscription!" ]);
}
}
} catch (\Exception $e) {
Log::error("An error occurred in " . __METHOD__ . ": " . $e->getMessage(), ['exception' => $e]);
return jsonResponseWithErrorMessage(__('auth.something_went_wrong'));
// return redirect()->back()->with(['error' => "Something went wrong while subscription!" . $e->getMessage()]);
}
}
public function thankyou(Request $request)
{
$userId = $request->query('user_xid');
if ($userId) {
//store data in DATABSE
RazorpayWebhookUsers::updateOrCreate(
['iam_principal_xid' => $userId],
['isSuccessPayment' => 1]
);
}
return view('admin-dashboard.pages.razorpay-subscription.thankyou');
return view('Admin.pages.subscriptions.thank-you');
}
public function cancelThankYou(Request $request)
{
$endAt = $request->query('end_date');
if ($endAt) {
$endDate = $endAt;
} else {
$endDate = null;
}
return view('admin-dashboard.pages.razorpay-subscription.cancel-thank-you', compact('endDate'));
}
//created by; Hritik
//On - 28th May ,2024
//use - To cancel the subscription of user on end of subscription end period
@@ -307,7 +319,7 @@ class SubscriptionController extends Controller
// {
// // dd($request->all());
// $razorPayPlanId = $request->razorpay_plan_id;
// $razorPaysubscriptionProductXid = $request->razorpay_plan_id;
// $productTypeId = $request->product_type_xid;
// $productTierId = $request->product_tier_xid;
// $iamId = $request->iam_principal_xid;
@@ -323,7 +335,7 @@ class SubscriptionController extends Controller
// $products = Products::where('product_type_xid', $productTypeId)
// ->where('product_tier_xid', $productTierId)
// ->where('razorpay_plan_id', $razorPayPlanId)
// ->where('razorpay_plan_id', $razorPaysubscriptionProductXid)
// ->where('is_active', '1')->first();
// if (!$products) {