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..3abda2a 100644 --- a/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php +++ b/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php @@ -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/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() {