stripe session

This commit is contained in:
CHIEFSOFT\ameye
2025-08-23 17:04:06 -04:00
parent b1d79d87a3
commit 3b0de8e10a
4 changed files with 138 additions and 4 deletions
+5 -4
View File
@@ -47,9 +47,10 @@ class StripeIntegration:
) )
@staticmethod @staticmethod
def create_checkout_session_subscription(price_id): def create_checkout_session_subscription(price_id, customer_id):
try: try:
checkout_session = stripe.checkout.Session.create( checkout_session = stripe.checkout.Session.create(
customer=customer_id, # Pass the existing customer ID here
line_items=[ line_items=[
{ {
'price': price_id, # Use a pre-defined Stripe Price ID 'price': price_id, # Use a pre-defined Stripe Price ID
@@ -57,10 +58,10 @@ class StripeIntegration:
}, },
], ],
mode='subscription', mode='subscription',
success_url='https://example.com/success?session_id={CHECKOUT_SESSION_ID}', success_url='https://qa-panel.mermsemr.com/subscription-success?session_id={CHECKOUT_SESSION_ID}',
cancel_url='https://example.com/cancel', cancel_url='https://qa-panel.mermsemr.com/subscription',
) )
return checkout_session.url return checkout_session
except stripe.error.StripeError as e: except stripe.error.StripeError as e:
print(f"Error creating subscription Checkout Session: {e}") print(f"Error creating subscription Checkout Session: {e}")
return None return None
+14
View File
@@ -195,6 +195,14 @@ def subscription_products():
response = SubscriptionService.subscription_available_products(data) response = SubscriptionService.subscription_available_products(data)
return response return response
#
@api.route("/panel/subscription/start", methods=["POST"])
def subscription_sessuib_start():
data = request.get_json()
logger.info(f"Route Subscription Session Start ==>>>> {data}")
response = SubscriptionService.subscription_session_start(data)
return response
# /panel/myproduct/subscription # /panel/myproduct/subscription
@api.route("/panel/myproduct/subscription", methods=["POST"]) @api.route("/panel/myproduct/subscription", methods=["POST"])
@@ -219,6 +227,12 @@ def myproduct_provision_actions():
response = MyProductsService.process_provision_actions(data) response = MyProductsService.process_provision_actions(data)
return response return response
@api.route("/stripe/payments", methods=["POST"])
def stripe_payments_webhook():
data = request.get_json()
logger.info(f"Route Stripe Webhook ==>>>> {data}")
# response = MyProductsService.process_provision_actions(data)
return []
# /panel/account/calendar # /panel/account/calendar
+14
View File
@@ -0,0 +1,14 @@
from marshmallow import Schema, fields
class SubscriptionSession(Schema):
token = fields.Str(required=True)
uid = fields.Str(required=True)
customerId = fields.Str(required=True)
priceId = fields.Str(required=True)
# {
# "priceId": "price_1RzLIMLjZLojw6IZ95Eijmdd",
# "customerId": "cus_StebwHVaA1nUjC",
# "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjpbNTFdLCJtZW1iZXJfaWQiOls1MV0sInVpZCI6WyI5NzVlZTQyZS0zMTY5LTQ5NzgtOTJkNy1kMjhlN2UyYWMwMTQiXX0sImV4cCI6MTc1NjE3ODYwM30.rC8KGz7M8PjgMBu-Vh9YcEWgcFp_WDqJUvTEa_OUU8Y",
# "uid": "975ee42e-3169-4978-92d7-d28e7e2ac014"
# }
+105
View File
@@ -4,6 +4,8 @@ from app.api.services.base_service import BaseService
from sqlalchemy import func, desc from sqlalchemy import func, desc
from app.api.helpers.response_helper import ResponseHelper from app.api.helpers.response_helper import ResponseHelper
from app.api.schemas.user import UserSchema from app.api.schemas.user import UserSchema
from app.api.schemas.subscription_session import SubscriptionSession
from marshmallow import ValidationError
from app.models import Members, MembersProducts, SubscriptionOptions, SubscriptionOptionsItems from app.models import Members, MembersProducts, SubscriptionOptions, SubscriptionOptionsItems
from app.extensions import db from app.extensions import db
from app.api.integrations import StripeIntegration from app.api.integrations import StripeIntegration
@@ -145,3 +147,106 @@ class SubscriptionService(BaseService):
# return ['Post Jobs 222', 'advanced instructors search', 'invite candidates', 'post events', # return ['Post Jobs 222', 'advanced instructors search', 'invite candidates', 'post events',
# 'Cancel anytime'] # 'Cancel anytime']
return res_options_items return res_options_items
@staticmethod
def subscription_session_start(data):
try:
with db.session.begin():
logger.info(f"Incoming MyProduct data ==>>>> {data}")
validated_data = SubscriptionService.validate_data(data, SubscriptionSession())
token = validated_data.get('token')
uid = validated_data.get('uid')
customerId = validated_data.get('customerId')
priceId = validated_data.get('priceId')
member_data = Members.get_member_by_uid(uid)
member_id = member_data.id
stripe_session = StripeIntegration.create_checkout_session_subscription(priceId, customerId)
logger.info(f"Inside Stripe_Session ===== : {stripe_session}")
#
# product_id = validated_data.get('product_id')
# product_subscription_uid=''
# product_subscription_external_url = ''
# product_subscription_internal_url = ''
# product_data = Products.get_product_by_product_id(product_id)
# product_description = ProductsDetails.get_product_details_with_product_id('A000002')
# productDataStatus = product_data.status
#
# memberSubscription = MembersProducts.get_member_product_by_product_member_id(member_id, product_id)
# if memberSubscription is not None:
# logger.info(f"Incoming MyProduct data ==>>>> {memberSubscription}")
# productDataStatus = memberSubscription.status
# product_subscription_uid = memberSubscription.uid
# product_subscription_external_url = memberSubscription.external_url
# product_subscription_internal_url = memberSubscription.internal_url
# "banner": "banner.jpg",
# myproduct_data = {
# "myproudct": {
# "banner": product_data.banner,
# "description": product_description.details,
# "sale_text" : product_description.sale_text,
# "internal_url": product_subscription_internal_url,
# "external_url": product_subscription_external_url,
# "price_text": "90 days free and 3.95/Month",
# "product_id": product_data.product_id,
# "product_name": product_data.name,
# "product_subscription_uid": product_subscription_uid,
# "product_uid": product_data.uid,
# "promotion_text": "Start Free Today !",
# "subscription_uid": product_subscription_uid,
# "status": productDataStatus,
# "subscription_text": "Start with your goals in mind and then work possible.ith yand Goals. If the plan doesn\u2019t support the vision then change it!",
# "title": "Your personal professional web presence"
# }
# }
# Simulate processing
response_data = {
"stripe_session":stripe_session.url,
"member_id": member_id,
"uid": uid,
}
return ResponseHelper.success(data=response_data)
except ValidationError as err:
logger.error(f"Validation Error: {getattr(err, 'messages', str(err))}")
db.session.rollback()
return ResponseHelper.unprocessable_entity(result_description="Validation exception")
except ValueError as err:
logger.error(f"{getattr(err, 'messages', str(err))}")
db.session.rollback()
return ResponseHelper.error(result_description=str(err))
except Exception as e:
logger.error(f"An error occurred: {str(e)}", exc_info=True)
db.session.rollback()
return ResponseHelper.internal_server_error()
# items_data = SubscriptionOptionsItems.get_subscription_item(option_name)
# res_options_items = []
# for t in items_data:
# res_options_items.append({
# 'description': t.description
# })
#
# # return ['Post Jobs 222', 'advanced instructors search', 'invite candidates', 'post events',
# # 'Cancel anytime']
# return res_options_items
# {
# "priceId": "price_1RzLIMLjZLojw6IZ95Eijmdd",
# "customerId": "cus_StebwHVaA1nUjC",
# "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjpbNTFdLCJtZW1iZXJfaWQiOls1MV0sInVpZCI6WyI5NzVlZTQyZS0zMTY5LTQ5NzgtOTJkNy1kMjhlN2UyYWMwMTQiXX0sImV4cCI6MTc1NjE3ODYwM30.rC8KGz7M8PjgMBu-Vh9YcEWgcFp_WDqJUvTEa_OUU8Y",
# "uid": "975ee42e-3169-4978-92d7-d28e7e2ac014"
# }