diff options
| author | Ben Sima <ben@bsima.me> | 2025-11-12 19:01:35 -0500 |
|---|---|---|
| committer | Ben Sima <ben@bsima.me> | 2025-11-12 19:01:35 -0500 |
| commit | 59cb3c00fb74dd9c6d7155f0e00045bf033eaa79 (patch) | |
| tree | f507aa3957ee940b870eaa3c32dc209d132ea102 | |
| parent | 906a90276d2adfe039f9e56908b86ce59cd6b307 (diff) | |
Fix TypeError in checkout webhook when client_reference_id is None
- Handle case where client_reference_id is None or missing - Fall back
to checking metadata.user_id if client_reference_id not available -
Add try/except for int() conversion with proper error logging - Use
safe .get() for session ID in error messages - Prevents TypeError:
int() argument must be a string when webhook has None value
| -rw-r--r-- | Biz/PodcastItLater/Billing.py | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/Biz/PodcastItLater/Billing.py b/Biz/PodcastItLater/Billing.py index a58c1fa..46e67ff 100644 --- a/Biz/PodcastItLater/Billing.py +++ b/Biz/PodcastItLater/Billing.py @@ -284,13 +284,25 @@ def handle_webhook_event(payload: bytes, sig_header: str) -> dict[str, str]: def _handle_checkout_completed(session: dict[str, typing.Any]) -> None: """Handle checkout.session.completed event.""" - user_id = int(session.get("client_reference_id", 0)) + client_ref = session.get("client_reference_id") or session.get( + "metadata", + {}, + ).get("user_id") customer_id = session.get("customer") - if not user_id or not customer_id: + if not client_ref or not customer_id: logger.warning( "Missing user_id or customer_id in checkout session: %s", - session["id"], + session.get("id", "unknown"), + ) + return + + try: + user_id = int(client_ref) + except (ValueError, TypeError): + logger.warning( + "Invalid user_id in checkout session: %s", + client_ref, ) return |
