From 5b6186ede18f7f41f12ae14b0080d8a001a483bb Mon Sep 17 00:00:00 2001 From: Hritikkk9 Date: Mon, 8 Jul 2024 13:05:55 +0530 Subject: [PATCH 1/3] subscription webhook updated --- .../Customer_API/StripeWebhookController.php | 86 +++++++++++++++++-- .../Customer_API/SubscriptionController.php | 22 +++-- routes/web.php | 4 +- 3 files changed, 98 insertions(+), 14 deletions(-) diff --git a/app/Http/Controllers/APIs/Customer_API/StripeWebhookController.php b/app/Http/Controllers/APIs/Customer_API/StripeWebhookController.php index 8258df1..ce05ea0 100644 --- a/app/Http/Controllers/APIs/Customer_API/StripeWebhookController.php +++ b/app/Http/Controllers/APIs/Customer_API/StripeWebhookController.php @@ -15,13 +15,15 @@ use Stripe\Stripe; use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\DB; +use DateTime; class StripeWebhookController extends Controller { // - - public function getWebhook(Request $request){ + + public function getWebhook(Request $request) + { // dd("ssssss",$request); Log::info('Stripe Webhook Received= in getWebhook '); Log::info('Stripe Webhook Received: ' . $request->getContent()); @@ -81,6 +83,47 @@ class StripeWebhookController extends Controller $userEmail = $metadata->userEmail; $subscriptionProductId = $metadata->subscriptionProductXid; + + $isReferralSubscription = $metadata->is_referral_subscription; + $referralUserId = $metadata->referral_user_id; + + if ($isReferralSubscription == 1) { + //who has refer the Subscription to Current user + Log::info("Referral User Subscription Updating Function Starts"); + + $referralUserSubscriptionData = Subscriptions::where('iam_principal_xid', $referralUserId)->where('subscription_status', '=', 'active')->first(); + if ($referralUserSubscriptionData && $referralUserSubscriptionData->is_cancelled_subscription == 0) { + //update subscription add 30 days trial period to this subscription + $nextPaymentDate = $referralUserSubscriptionData->next_payment_date; + $date = new DateTime($nextPaymentDate); + $date->modify('+30 days'); + $newDate = $date->format('Y-m-d H:i:s'); + Log::info("new Date = "); + Log::info($newDate); + $timestampForReferralUser = $date->getTimestamp(); + + $updateSubscription = $stripe->subscriptions->update( + $referralUserSubscriptionData->subscription_id, + ['trial_end' => $timestampForReferralUser] + ); + + $SubscriptionObject = $stripe->subscriptions->retrieve($referralUserSubscriptionData->subscription_id, []); + + $upcoming_invoice = $stripe->invoices->upcoming([ + 'subscription' => $referralUserSubscriptionData->subscription_id, // use retrieved id from subscription + ]); + $referralUserSubscriptionData->current_period_start = date('Y-m-d H:i:s', $SubscriptionObject->current_period_start); + $referralUserSubscriptionData->current_period_end = date('Y-m-d H:i:s', $SubscriptionObject->current_period_end); + $referralUserSubscriptionData->next_payment_date = date('Y-m-d H:i:s', $upcoming_invoice->next_payment_attempt); + $referralUserSubscriptionData->save(); + + Log::info("Referral User Subscription Updated with Referral"); + + //updated the Referral Users Subscription. + + } + } + $subscriptionProductData = SubscriptionProducts::where('id', $subscriptionProductId)->first(); //checkout store in db @@ -115,6 +158,41 @@ class StripeWebhookController extends Controller ] ); + if ($isReferralSubscription == 1) { + + Log::info("new User Subscription Updating Function Starts"); + + //update Current User subscription to add 30 days additional to their subscription end + $SubscriptionObject = $stripe->subscriptions->retrieve($subscriptionData->subscription, []); + $newUserSubscriptionDetails = Subscriptions::where('iam_principal_xid', $userId) + ->where('subscription_product_xid', $subscriptionProductId)->first(); + + $nextPaymentDate = $newUserSubscriptionDetails->next_payment_date; + $date = new DateTime($nextPaymentDate); + $date->modify('+30 days'); + $newDate = $date->format('Y-m-d H:i:s'); + Log::info("new Date = "); + Log::info($newDate); + $timestampForReferralUser = $date->getTimestamp(); + + $updateSubscription = $stripe->subscriptions->update( + $newUserSubscriptionDetails->subscription_id, + ['trial_end' => $timestampForReferralUser] + ); + + $SubscriptionObject = $stripe->subscriptions->retrieve($newUserSubscriptionDetails->subscription_id, []); + + $upcoming_invoice = $stripe->invoices->upcoming([ + 'subscription' => $newUserSubscriptionDetails->subscription_id, // use retrieved id from subscription + ]); + $newUserSubscriptionDetails->current_period_start = date('Y-m-d H:i:s', $SubscriptionObject->current_period_start); + $newUserSubscriptionDetails->current_period_end = date('Y-m-d H:i:s', $SubscriptionObject->current_period_end); + $newUserSubscriptionDetails->next_payment_date = date('Y-m-d H:i:s', $upcoming_invoice->next_payment_attempt); + $newUserSubscriptionDetails->save(); + + Log::info("new User Subscription Updated with Referral"); + } + $getUserData = IamPrincipal::where('id', $userId)->first(); $title = "Congratulations you subscription is now active"; @@ -140,10 +218,6 @@ class StripeWebhookController extends Controller } - - - - return response('Webhook received', 200); } } \ No newline at end of file diff --git a/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php b/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php index 687aaae..5a684b3 100644 --- a/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php +++ b/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php @@ -27,14 +27,14 @@ class SubscriptionController extends Controller { try { // dd($request->header('access-token')); - $token = readHeaderToken(); + // $token = readHeaderToken(); // dd("acc",$token); - // $token = true; + $token = true; // dd($token, Session::get('vendorToken')); if ($token) { - // $user_id = 12; - $user_id = $token['sub']; + $user_id = 12; + // $user_id = $token['sub']; $dateTime = now(); $formattedDateTime = $dateTime->format('Y-m-d H:i:s'); @@ -183,6 +183,13 @@ class SubscriptionController extends Controller // dd($request->all()); try { + $isReferralSubscription = 0; + $referralUserId = $request->referral_user_id; + if( $referralUserId && $referralUserId != null){ + $isReferralSubscription = 1; + }else{ + $isReferralSubscription = 0; + } $userId = $request->user_id; $subscriptionProductXid = $request->subscription_product_xid; @@ -214,9 +221,12 @@ class SubscriptionController extends Controller // 'tax_id_collection' => ['enabled' => true], 'metadata' => [ 'userId' => $userData->id, - 'userEmail' => $userData->email_address, - 'subscriptionProductXid' => $subscriptionProductXid + 'subscriptionProductXid' => $subscriptionProductXid , + + 'is_referral_subscription'=>$isReferralSubscription, + 'referral_user_id'=>$referralUserId, + ], 'success_url' => route('thankyou'), diff --git a/routes/web.php b/routes/web.php index b42ab13..57fb14d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -220,10 +220,10 @@ Route::group(['middleware' => ['checkStatus']], function () { //subscription ROutes -Route::group(['middleware' => ['customer.jwt.verify']], function () { +// Route::group(['middleware' => ['customer.jwt.verify']], function () { Route::get('my-subscription-page', [SubscriptionController::class, 'mySubscription'])->name('my-subscription-page'); -}); +// }); From fb998f22ab42a2c8aabc7526959ab157cef6b08b Mon Sep 17 00:00:00 2001 From: Hritikkk9 Date: Mon, 8 Jul 2024 13:06:59 +0530 Subject: [PATCH 2/3] subscription webhook updated solved --- app/Models/Subscriptions.php | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/app/Models/Subscriptions.php b/app/Models/Subscriptions.php index 2acea0e..bdd96eb 100644 --- a/app/Models/Subscriptions.php +++ b/app/Models/Subscriptions.php @@ -18,30 +18,6 @@ class Subscriptions extends Model } - protected $fillable = [ - 'id', - 'subscription_product_xid', - 'iam_principal_xid', - 'amount', - 'stripe_customer_id', - 'payment_intent_id', - 'payment_intent_client_secret', - 'subscription_id', - 'subscription_status', - 'current_period_start', - 'current_period_end', - 'status', - 'next_payment_date', - 'is_cancelled_subscription', - 'cancelled_at', - 'is_active', - 'deleted_at', - 'created_by', - 'modified_by', - 'created_at', - 'updated_at' - ]; - public function iamPrincipal() { From b73d4dab68607003e48a87b051f88a44c546d763 Mon Sep 17 00:00:00 2001 From: Hritikkk9 Date: Mon, 8 Jul 2024 13:08:01 +0530 Subject: [PATCH 3/3] subscription U --- .../APIs/Customer_API/SubscriptionController.php | 8 ++++---- routes/web.php | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php b/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php index 5a684b3..3abda2a 100644 --- a/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php +++ b/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php @@ -27,14 +27,14 @@ class SubscriptionController extends Controller { try { // dd($request->header('access-token')); - // $token = readHeaderToken(); + $token = readHeaderToken(); // dd("acc",$token); - $token = true; + // $token = true; // dd($token, Session::get('vendorToken')); if ($token) { - $user_id = 12; - // $user_id = $token['sub']; + // $user_id = 12; + $user_id = $token['sub']; $dateTime = now(); $formattedDateTime = $dateTime->format('Y-m-d H:i:s'); diff --git a/routes/web.php b/routes/web.php index 57fb14d..b42ab13 100644 --- a/routes/web.php +++ b/routes/web.php @@ -220,10 +220,10 @@ Route::group(['middleware' => ['checkStatus']], function () { //subscription ROutes -// Route::group(['middleware' => ['customer.jwt.verify']], function () { +Route::group(['middleware' => ['customer.jwt.verify']], function () { Route::get('my-subscription-page', [SubscriptionController::class, 'mySubscription'])->name('my-subscription-page'); -// }); +});