Finalize SuperOffice production migration and multi-campaign architecture (v1.8)
This commit is contained in:
@@ -43,7 +43,11 @@ class SuperOfficeClient:
|
||||
|
||||
def _refresh_access_token(self):
|
||||
"""Refreshes and returns a new access token."""
|
||||
url = "https://online.superoffice.com/login/common/oauth/tokens"
|
||||
# OAuth token endpoint is ALWAYS online.superoffice.com for production,
|
||||
# or sod.superoffice.com for sandbox.
|
||||
token_domain = "online.superoffice.com" if "online" in self.env.lower() else "sod.superoffice.com"
|
||||
url = f"https://{token_domain}/login/common/oauth/tokens"
|
||||
|
||||
logger.debug(f"DEBUG: Refresh URL: '{url}' (Env: '{self.env}')")
|
||||
|
||||
data = {
|
||||
@@ -56,11 +60,18 @@ class SuperOfficeClient:
|
||||
|
||||
try:
|
||||
resp = requests.post(url, data=data)
|
||||
|
||||
# Catch non-JSON responses early
|
||||
if resp.status_code != 200:
|
||||
logger.error(f"❌ Token Refresh Failed (Status {resp.status_code})")
|
||||
logger.error(f"Response Body: {resp.text[:500]}")
|
||||
return None
|
||||
|
||||
resp.raise_for_status()
|
||||
return resp.json().get("access_token")
|
||||
except requests.exceptions.HTTPError as e:
|
||||
logger.error(f"❌ Token Refresh Error (Status: {e.response.status_code}): {e.response.text}")
|
||||
logger.debug(f"Response Headers: {e.response.headers}")
|
||||
except requests.exceptions.JSONDecodeError:
|
||||
logger.error(f"❌ Token Refresh Error: Received non-JSON response from {url}")
|
||||
logger.debug(f"Raw Response: {resp.text[:500]}")
|
||||
return None
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Connection Error during token refresh: {e}")
|
||||
|
||||
Reference in New Issue
Block a user