From bf22a2d21aae6e0feee3266540bc3bd1f0f9e6d4 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 12 Jul 2025 12:49:37 +0530 Subject: [PATCH] Add webhook debugging to troubleshoot payment balance updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add detailed logging to Stripe webhook handler - Log webhook events, user processing, and balance updates - Help identify if webhooks are being received and processed correctly - Temporary debugging to resolve wallet balance not updating after payment 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- core/views.py | 7 +++++++ wallet/stripe_handler.py | 23 +++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/core/views.py b/core/views.py index 26b42a0..ca16627 100644 --- a/core/views.py +++ b/core/views.py @@ -147,12 +147,19 @@ def wallet_topup_cancel_view(request): @require_http_methods(["POST"]) def stripe_webhook_view(request): """Handle Stripe webhook events""" + print("đŸŽ¯ Stripe webhook received!") + payload = request.body sig_header = request.META.get('HTTP_STRIPE_SIGNATURE') + print(f"đŸ“Ļ Payload length: {len(payload)} bytes") + print(f"🔐 Signature header: {sig_header is not None}") + stripe_handler = StripePaymentHandler() result = stripe_handler.handle_webhook(payload, sig_header) + print(f"✅ Webhook result: {result}") + if result['success']: return JsonResponse({'status': 'success'}) else: diff --git a/wallet/stripe_handler.py b/wallet/stripe_handler.py index 5742fcd..32bb735 100644 --- a/wallet/stripe_handler.py +++ b/wallet/stripe_handler.py @@ -81,33 +81,52 @@ class StripePaymentHandler: def handle_webhook(self, payload, signature): """Handle Stripe webhook events""" + print(f"🔍 Processing webhook with signature: {bool(signature)}") + try: event = stripe.Webhook.construct_event( payload, signature, settings.STRIPE_WEBHOOK_SECRET ) - except ValueError: + print(f"📋 Event type: {event['type']}") + except ValueError as e: + print(f"❌ Invalid payload: {e}") return {'success': False, 'error': 'Invalid payload'} - except stripe.error.SignatureVerificationError: + except stripe.error.SignatureVerificationError as e: + print(f"❌ Invalid signature: {e}") return {'success': False, 'error': 'Invalid signature'} if event['type'] == 'checkout.session.completed': session = event['data']['object'] + print(f"đŸ’ŗ Processing checkout session: {session['id']}") # Process successful payment user_id = session.get('client_reference_id') amount = session['amount_total'] / 100 # Convert from cents + print(f"👤 User ID: {user_id}, Amount: {amount} AED") + if user_id: try: user = User.objects.get(id=user_id) + print(f"✅ Found user: {user.email}, Current balance: {user.wallet_balance}") + user.add_balance( amount=amount, description=f"Wallet top-up via Stripe", stripe_session_id=session['id'] ) + user.refresh_from_db() + print(f"💰 New balance: {user.wallet_balance}") + return {'success': True, 'message': 'Payment processed successfully'} except User.DoesNotExist: + print(f"❌ User not found: {user_id}") return {'success': False, 'error': 'User not found'} + else: + print("❌ No user_id in session") + return {'success': False, 'error': 'No user reference'} + else: + print(f"â„šī¸ Ignored event type: {event['type']}") return {'success': True, 'message': 'Event processed'}