nordabiz/scripts/debug_fb_token.py

80 lines
2.8 KiB
Python

#!/usr/bin/env python3
"""Debug Facebook tokens - check what me/accounts returns."""
import os, sys, requests, json
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
os.chdir(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from dotenv import load_dotenv
load_dotenv('.env')
from database import *
db = SessionLocal()
token = db.query(OAuthToken).filter(OAuthToken.company_id==11, OAuthToken.provider=="meta").first()
if not token:
print("No token found")
sys.exit(1)
user_token = (token.metadata_json or {}).get("user_access_token", "")
current_token = token.access_token
print("=== CURRENT STATE ===")
print(f"access_token prefix: {current_token[:40]}")
print(f"user_token prefix: {user_token[:40]}")
print(f"Same token: {current_token == user_token}")
print()
app_id = os.environ["META_APP_ID"]
app_secret = os.environ["META_APP_SECRET"]
app_token = f"{app_id}|{app_secret}"
print("=== me/accounts with USER TOKEN ===")
r = requests.get("https://graph.facebook.com/v21.0/me/accounts", params={
"fields": "id,name,category,access_token,fan_count",
"access_token": user_token
})
data = r.json()
print(f"Status: {r.status_code}")
if "data" in data:
for page in data["data"]:
pt = page.get("access_token", "")
print(f"\nPage: {page.get('name')} | ID: {page.get('id')} | fans: {page.get('fan_count')}")
print(f" Page token prefix: {pt[:40] if pt else 'NONE'}")
print(f" Same as current access_token: {pt == current_token}")
print(f" Same as user_token: {pt == user_token}")
# Debug
dr = requests.get("https://graph.facebook.com/debug_token", params={
"input_token": pt, "access_token": app_token
})
dd = dr.json().get("data", {})
print(f" Debug type: {dd.get('type')}")
print(f" Debug scopes: {dd.get('scopes')}")
print(f" Debug profile_id: {dd.get('profile_id')}")
elif "error" in data:
print(f"Error: {data['error'].get('message')}")
else:
print(f"Unexpected: {json.dumps(data)[:500]}")
print()
print("=== me/accounts with CURRENT (access_token) ===")
r2 = requests.get("https://graph.facebook.com/v21.0/me/accounts", params={
"fields": "id,name,category,access_token,fan_count",
"access_token": current_token
})
data2 = r2.json()
print(f"Status: {r2.status_code}")
if "data" in data2:
for page in data2["data"]:
pt = page.get("access_token", "")
print(f"\nPage: {page.get('name')} | ID: {page.get('id')}")
print(f" Page token prefix: {pt[:40] if pt else 'NONE'}")
dr = requests.get("https://graph.facebook.com/debug_token", params={
"input_token": pt, "access_token": app_token
})
dd = dr.json().get("data", {})
print(f" Debug type: {dd.get('type')}")
elif "error" in data2:
print(f"Error: {data2['error'].get('message')}")
db.close()