DRIFT FREE SOURCE CODE
Open in Telegram
Show more
The country is not specifiedThe category is not specified
2 599
Subscribers
+3824 hours
+3287 days
+42130 days
Posts Archive
🐱 Dɢ Dʀɪғᴛ — Sᴇʀᴠᴇʀ Hᴏsᴛɪɴɢ Bᴏᴛ
🚀 Yᴏᴜʀ Pᴇʀsᴏɴᴀʟ Hᴏsᴛɪɴɢ Mᴀɴᴀɢᴇʀ!
🤖 Bᴏᴛ Lɪɴᴋ: https://t.me/DG_HOSTINGPANEL_BOT?start=ref_8348660678
☁️ Hᴏsᴛɪɴɢ Fᴇᴀᴛᴜʀᴇs
🐍 Pʏᴛʜᴏɴ Pᴀɴᴇʟ Cʀᴇᴀᴛɪᴏɴ
🟢 Nᴏᴅᴇ.ᴊs Pᴀɴᴇʟ Cʀᴇᴀᴛɪᴏɴ
⚡ Iɴsᴛᴀɴᴛ Pᴀɴᴇʟ Rᴇǫᴜᴇsᴛ
😋 Mʏ Pᴀɴᴇʟs Mᴀɴᴀɢᴇᴍᴇɴᴛ
🔑 Pᴀɴᴇʟ Lᴏɢɪɴ Dᴇᴛᴀɪʟs
🌐 Dɪʀᴇᴄᴛ Pᴀɴᴇʟ Dᴀsʜʙᴏᴀʀᴅ Aᴄᴄᴇss
😡 U sᴇʀ Fᴇᴀᴛᴜʀᴇs
📊 Pᴇʀsᴏɴᴀʟ U sᴇʀ Pʀᴏғɪʟᴇ
👱♂️ U sᴇʀ Iᴅᴇɴᴛɪғɪᴄᴀᴛɪᴏɴ
🔗 Pᴇʀsᴏɴᴀʟ Rᴇғᴇʀʀᴀʟ Lɪɴᴋ
🎁 Rᴇғᴇʀ & Eᴀʀɴ Sʏsᴛᴇᴍ
📈 Rᴇғᴇʀʀᴀʟ Cᴏᴜɴᴛ
📁 Eᴀsʏ Sʜᴀʀᴇ Fᴜɴᴄᴛɪᴏɴ
🤖 Sᴛᴀʀᴛ Yᴏᴜʀ Hᴏsᴛɪɴɢ Jᴏᴜʀɴᴇʏ!
🚀 Dɢ Dʀɪғᴛ — Gᴀʀᴇɴᴀ FF Wᴇʙsɪᴛᴇ Uᴘᴅᴀᴛᴇ
🌐 Wᴇʙsɪᴛᴇ: https://drift-garena-ff.vercel.app/
⚡ Oᴜʀ Gᴀʀᴇɴᴀ FF Wᴇʙsɪᴛᴇ Nᴇᴇᴅs A Cᴏᴍᴘʟᴇᴛᴇ Eʀʀᴏʀ Fɪxɪɴɢ & Iᴍᴘʀᴏᴠᴇᴍᴇɴᴛ Uᴘᴅᴀᴛᴇ!
🇷🇺 Aᴠᴀɪʟᴀʙʟᴇ Tᴏᴏʟs:
🔹 Bɪᴏ Cʜᴀɴɢᴇʀ 🔹 JWT Gᴇɴᴇʀᴀᴛᴏʀ 🔹 Pᴇʀᴍᴀɴᴇɴᴛ Bᴀɴ 🔹 FF Eᴀᴛ Tᴏᴋᴇɴ 🔹 Bɪɴᴅ Tᴏᴏʟs 🔹 Fʀɪᴇɴᴅ Mᴀɴᴀɢᴇʀ 🔹 Gᴜɪʟᴅ Mᴀɴᴀɢᴇʀ ⚙ Wᴏʀᴋ Iɴ Pʀᴏɢʀᴇss:
✅ Fɪx Aʟʟ Wᴇʙsɪᴛᴇ Eʀʀᴏʀs ✅ Fɪx API & Sᴇʀᴠᴇʀ Issᴜᴇs ✅ Fɪx Lᴏᴀᴅɪɴɢ Pʀᴏʙʟᴇᴍs ✅ Fɪx Bʀᴏᴋᴇɴ Bᴜᴛᴛᴏɴs & Pᴀɢᴇs ✅ Iᴍᴘʀᴏᴠᴇ Wᴇʙsɪᴛᴇ Sᴘᴇᴇᴅ ✅ Iᴍᴘʀᴏᴠᴇ Sᴇᴄᴜʀɪᴛʏ & Sᴛᴀʙɪʟɪᴛʏ ✅ Mᴀᴋᴇ Aʟʟ Sᴜᴘᴘᴏʀᴛᴇᴅ Tᴏᴏʟs Wᴏʀᴋ Pʀᴏᴘᴇʀʟʏ 👑 Cᴏɴᴛᴀᴄᴛ Oᴡɴᴇʀ: @DG_DRIFT
✦ Pᴇʀᴍᴀɴᴇɴᴛ Fʀɪᴇɴᴅ API ✦
━━━━━━━━━━━━━━━━━━
➕
import requests
url = "https://drift-garena-ff.vercel.app/api/friend_action"
headers = {
"X-API-Key": API_KEY
}
data = {
"uid": "12345678",
"jwt": "eyJ...",
"action": "add"
}
r = requests.post(url, headers=headers, json=data)
print(r.json())
━━━━━━━━━━━━━━━━━━
➖
import requests
url = "https://drift-garena-ff.vercel.app/api/friend_action"
headers = {
"X-API-Key": API_KEY
}
data = {
"uid": "12345678",
"jwt": "eyJ...",
"action": "remove"
}
r = requests.post(url, headers=headers, json=data)
print(r.json())
━━━━━━━━━━━━━━━━━━
🔑 Gᴇᴛ API Kᴇʏ
🌐 Wᴇʙsɪᴛᴇ:
https://drift-garena-ff.vercel.app/
1. Oᴘᴇɴ Tʜᴇ Wᴇʙsɪᴛᴇ.
2. Gᴇɴᴇʀᴀᴛᴇ / Gᴇᴛ Yᴏᴜʀ API Kᴇʏ.
3. Cᴏᴘʏ Yᴏᴜʀ API Kᴇʏ.
4. Aᴅᴅ Iᴛ Iɴ Yᴏᴜʀ Pʏᴛʜᴏɴ Cᴏᴅᴇ.
━━━━━━━━━━━━━━━━━━
⚙ API Dᴇᴛᴀɪʟs
• Eɴᴅᴘᴏɪɴᴛ: /api/friend_action
• Mᴇᴛʜᴏᴅ: POST
• Aᴜᴛʜ: X-API-Key
• Aᴄᴛɪᴏɴs: add / remove
• Tʏᴘᴇ: Pᴇʀᴍᴀɴᴇɴᴛ API
━━━━━━━━━━━━━━━━━━
🔴 Mᴀᴅᴇ Bʏ - @DG_DRIFT🚀 𝘞𝘦𝘣𝘐𝘯𝘵𝘰𝘈𝘱𝘱 Wᴇʙsɪᴛᴇ Fᴜʟʟ Sᴏᴜʀᴄᴇ Cᴏᴅᴇ Aᴠᴀɪʟᴀʙʟᴇ 🔥
💻 Kɪsɪ Kᴏ 𝘞𝘦𝘣𝘐𝘯𝘵𝘰𝘈𝘱𝘱 Wᴇʙsɪᴛᴇ Kᴀ Fᴜʟʟ Sᴏᴜʀᴄᴇ Cᴏᴅᴇ Cʜᴀʜɪʏᴇ Tᴏ Dɪʀᴇᴄᴛ Dᴍ Kʀᴏ! ✍️
⚡️ Fᴜʟʟ Wᴇʙsɪᴛᴇ Sᴏᴜʀᴄᴇ Cᴏᴅᴇ ⚙️ Dᴇᴠᴇʟᴏᴘᴍᴇɴᴛ &
Cᴜsᴛᴏᴍɪᴢᴀᴛɪᴏɴ 🥶 Gᴇᴛ Tʜᴇ Sᴏᴜʀᴄᴇ Cᴏᴅᴇ Fᴏʀ Yᴏᴜʀ Pʀᴏᴊᴇᴄᴛ
💰 Iɴᴛᴇʀᴇsᴛᴇᴅ? Dᴍ Fᴏʀ Pʀɪᴄᴇ & Dᴇᴛᴀɪʟs!
🚩 Dᴍ Fᴏʀ Bᴜʏ — @DG_DRIFT
Repost from DrIfT ARMY
✨ Mʏ 1 Tᴏᴏʟ • 3 Pʟᴀᴛғᴏʀᴍs 🚀
⚡ Oɴᴇ Tᴏᴏʟ, Tʜʀᴇᴇ Wᴀʏs Tᴏ Usᴇ!
1️⃣ Aᴘᴋ Vᴇʀsɪᴏɴ
📱 Usᴇ Mʏ Aᴘᴋ
😀 Wᴇʙsɪᴛᴇ Vᴇʀsɪᴏɴ
🌐 https://drift-garena-ff.vercel.app/
3️⃣ Tᴇʟᴇɢʀᴀᴍ Bᴏᴛ Vᴇʀsɪᴏɴ
🤖 @ff_longbio_rebot
🔥 Cʜᴏᴏsᴇ Yᴏᴜʀ Pʟᴀᴛғᴏʀᴍ & Eɴᴊᴏʏ!
👑 Pᴏᴡᴇʀᴇᴅ Bʏ Dʀɪғᴛ
📢 Mᴀɪɴ Cʜᴀɴɴᴇʟ: @DGDRIFT
🦁 Fʀᴇᴇ Fɪʀᴇ ID Bᴀɴ Tᴏ Uɴʙᴀɴ SRC Fᴏʀ Sᴀʟᴇ 🧞♀️
🔥 Fᴇᴀᴛᴜʀᴇs & Dᴇᴛᴀɪʟs
🚫 Pᴇʀᴍᴀɴᴇɴᴛ Bᴀɴ Tᴏ Uɴʙᴀɴ
🟢 7 Dᴀʏs Uɴʙᴀɴ Tɪᴍᴇʀ
🟢 Pᴇʀᴍᴀ Bᴀɴ Tᴏ Uɴʙᴀɴ Fᴇᴀᴛᴜʀᴇ
💻 Fᴜʟʟ Wᴏʀᴋɪɴɢ SRC
😒 Dᴍ Tᴏ Bᴜʏ — @DG_DRIFT ✅
💐 Tɪᴍᴇ Pᴀss Nᴏᴛ Aʟʟᴏᴡᴇᴅ ❌
💳 FᴀᴍPᴀʏ Pᴀʏᴍᴇɴᴛ Gᴀᴛᴇᴡᴀʏ
🔥 FᴀᴍPᴀʏ Pᴀʏᴍᴇɴᴛ Gᴀᴛᴇᴡᴀʏ Wᴇʙsɪᴛᴇ Kᴀ Sᴏᴜʀᴄᴇ Cᴏᴅᴇ Aᴠᴀɪʟᴀʙʟᴇ!
💻 Fᴜʟʟ Wᴇʙsɪᴛᴇ Sᴏᴜʀᴄᴇ Cᴏᴅᴇ
✉️ Iɴᴛᴇʀᴇsᴛᴇᴅ? Dᴍ Nᴏᴡ — @DG_DRIFT
⚡ Sᴇʀɪᴏᴜs Bᴜʏᴇʀs Oɴʟʏ!
🚀 Nᴇᴡ Wᴇʙsɪᴛᴇ Lᴀᴜɴᴄʜᴇᴅ! 🔴 Gᴀʀᴇɴᴀ Fʀᴇᴇ Fɪʀᴇ Tᴏᴏʟs ✨ Aʟʟ Fᴇᴀᴛᴜʀᴇs Aᴅᴅᴇᴅ Tᴏ Tʜᴇ Wᴇʙsɪᴛᴇ! 🌐 Wᴇʙsɪᴛᴇ Lɪɴᴋ ✅ https://drift-garena-ff.vercel.app/ ⚡️ Eɴᴅᴘᴏɪɴᴛs Aᴠᴀɪʟᴀʙʟᴇ 💻 Uꜱᴇ Tʜᴇ Wᴇʙsɪᴛᴇ Eɴᴅᴘᴏɪɴᴛs Iɴ Yᴏᴜʀ Oᴡɴ Bᴏᴛ Oʀ Wᴇʙsɪᴛᴇ! 🔗 Eɴᴅᴘᴏɪɴᴛs Lɪɴᴋ ✅ https://drift-garena-ff.vercel.app/endpoints 📜 Tᴇʀᴍs & Cᴏɴᴅɪᴛɪᴏɴs 🔐 Pʀɪᴠᴀᴄʏ Pᴏʟɪᴄʏ ━━━━━━━━━━━━━━━━━━ 👑 Mᴀᴅᴇ Bʏ : @DG_DRIFT 🔥 Dʀɪғᴛ Aʀᴍʏ ━━━━━━━━━━━━━━━━━━
🔥 Fʀᴇᴇ Fɪʀᴇ Aᴜᴛᴏ Lɪᴋᴇꜱ 🔥 ✨ Gᴇᴛ Dᴀɪʟʏ Aᴜᴛᴏ Lɪᴋᴇꜱ Fᴏʀ Yᴏᴜʀ Fʀᴇᴇ Fɪʀᴇ Iᴅ!
🚀 Fᴀꜱᴛ • Eᴀꜱʏ • Sɪᴍᴘʟᴇ 🌐 Wᴇʙꜱɪᴛᴇ Lɪɴᴋ 👇 https://auto-likes.vercel.app
❤️ Eɴᴊᴏʏ Yᴏᴜʀ Dᴀɪʟʏ Aᴜᴛᴏ Lɪᴋᴇꜱ!
🔥 Fʀᴇᴇ Fɪʀᴇ Lɪᴋᴇs Pᴀᴄᴋᴀɢᴇ ❤️
💎 Pʀɪᴄᴇ Lɪsᴛ 💰
🔹 ₹15 ➜ 200 ❤️ Lɪᴋᴇs ➜ 1 Dᴀʏ
🔹 ₹59 ➜ 1,500 ❤️ Lɪᴋᴇs ➜ 7 Dᴀʏs
🔹 ₹109 ➜ 3,000 ❤️ Lɪᴋᴇs ➜ 15 Dᴀʏs
🔹 ₹179 ➜ 6,000 ❤️ Lɪᴋᴇs ➜ 30 Dᴀʏs
🔹 ₹299 ➜ 12,000 ❤️ Lɪᴋᴇs ➜ 60 Dᴀʏs
🔹 ₹399 ➜ 18,000 ❤️ Lɪᴋᴇs ➜ 90 Dᴀʏs
🔹 ₹549 ➜ 24,000 ❤️ Lɪᴋᴇs ➜ 120 Dᴀʏs
🌍 Aʟʟ Sᴇʀᴠᴇʀs Sᴜᴘᴘᴏʀᴛᴇᴅ ✅
✍️ Cᴏɴᴛᴀᴄᴛ Oᴡɴᴇʀ 👑
✅ @DG_DRIFT
🔗 Tᴇʟᴇɢʀᴀᴍ ✈️
https://t.me/DG_DRIFT
#FreeFire #FreeFireLikes #LikesPackage
#FFLikes #DGDRIFT #FreeFireCommunity
❤️ Gᴜʏss, Tʜᴏʀᴀ Sᴀ Sᴜᴘᴘᴏʀᴛ Dɪᴋʜᴀᴏ 🥹❤️
🎥 Nᴇᴡ Vɪᴅᴇᴏ 👇
https://youtu.be/8B9GrDVcmBI
❤️ Lɪᴋᴇ 👍 Cᴏᴍᴍᴇɴᴛ 💬 Sᴜʙsᴄʀɪʙᴇ 🔔
🚀 Hᴏᴡ Tᴏ Mᴀᴋᴇ Gᴜɪʟᴅ Gʟᴏʀʏ Bᴏᴛ 🔥
🍂 Sᴏᴜʀᴄᴇ Cᴏᴅᴇ Fɪʟᴇ 👇
https://t.me/DRIFT_FREE_SOURCE_CODE_BoT?start=9PMJPogWxJ
🎥 Fᴜʟʟ Tᴜᴛᴏʀɪᴀʟ Vɪᴅᴇᴏ 👇
https://youtu.be/g614F1fKnK0
💻 Wᴀᴛᴄʜ Tʜᴇ Tᴜᴛᴏʀɪᴀʟ & Fᴏʟʟᴏᴡ Tʜᴇ Sᴛᴇᴘs! ⚡️
🔥 Mᴏʀᴇ Uᴘᴅᴀᴛᴇs & Fʀᴇᴇ Sᴏᴜʀᴄᴇ Cᴏᴅᴇs:
📢 Main Channel: https://t.me/DGDRIFT
#DGDRIFT #GuildGloryBot #FreeFire #BotTutorial
Repost from DrIfT ARMY
New major login code
import json
import base64
import httpx
from Crypto.Cipher import AES
from google.protobuf import json_format
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
from google.protobuf.internal import builder as _builder
# ============================================================
# Proto: LoginReq + LoginRes
# ============================================================
_sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
b'\n\x0e\x46reeFire.proto"c\n\x08LoginReq\x12\x0f\n\x07open_id\x18\x16 \x01(\t'
b'\x12\x14\n\x0copen_id_type\x18\x17 \x01(\t\x12\x13\n\x0blogin_token\x18\x1d '
b'\x01(\t\x12\x1b\n\x13orign_platform_type\x18\x63 \x01(\t"]\n\x10\x42lacklist'
b'InfoRes\x12\x1e\n\nban_reason\x18\x01 \x01(\x0e\x32\n.BanReason\x12\x17\n'
b'\x0f\x65xpire_duration\x18\x02 \x01(\r\x12\x10\n\x08\x62\x61n_time\x18\x03 '
b'\x01(\r"f\n\x0eLoginQueueInfo\x12\r\n\x05\x61llow\x18\x01 \x01(\x08\x12'
b'\x16\n\x0equeue_position\x18\x02 \x01(\r\x12\x16\n\x0eneed_wait_secs\x18'
b'\x03 \x01(\r\x12\x15\n\rqueue_is_full\x18\x04 \x01(\x08"\xa0\x03\n\x08'
b'LoginRes\x12\x12\n\naccount_id\x18\x01 \x01(\x04\x12\x13\n\x0block_region'
b'\x18\x02 \x01(\t\x12\x13\n\x0bnoti_region\x18\x03 \x01(\t\x12\x11\n\tip_'
b'region\x18\x04 \x01(\t\x12\x19\n\x11\x61gora_environment\x18\x05 \x01(\t'
b'\x12\x19\n\x11new_active_region\x18\x06 \x01(\t\x12\x19\n\x11recommend_'
b'regions\x18\x07 \x03(\t\x12\r\n\x05token\x18\x08 \x01(\t\x12\x0b\n\x03ttl'
b'\x18\t \x01(\r\x12\x12\n\nserver_url\x18\n \x01(\t\x12\x16\n\x0e\x65mul'
b'ator_score\x18\x0b \x01(\r\x12$\n\tblacklist\x18\x0c \x01(\x0b\x32\x11.'
b'BlacklistInfoRes\x12#\n\nqueue_info\x18\r \x01(\x0b\x32\x0f.LoginQueue'
b'Info\x12\x0e\n\x06tp_url\x18\x0e \x01(\t\x12\x15\n\rapp_server_id\x18'
b'\x0f \x01(\r\x12\x0f\n\x07\x61no_url\x18\x10 \x01(\t\x12\x0f\n\x07ip_city'
b'\x18\x11 \x01(\t\x12\x16\n\x0eip_subdivision\x18\x12 \x01(\t*\xa8\x01\n'
b'\tBanReason\x12\x16\n\x12\x42\x41N_REASON_UNKNOWN\x10\x00\x12\x1b\n\x17'
b'\x42\x41N_REASON_IN_GAME_AUTO\x10\x01\x12\x15\n\x11\x42\x41N_REASON_'
b'REFUND\x10\x02\x12\x15\n\x11\x42\x41N_REASON_OTHERS\x10\x03\x12\x16\n'
b'\x12\x42\x41N_REASON_SKINMOD\x10\x04\x12 \n\x1b\x42\x41N_REASON_IN_GAME'
b'_AUTO_NEW\x10\xf6\x07\x62\x06proto3'
)
_g = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _g)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "FreeFire_pb2", _g)
LoginReq = _g["LoginReq"]
LoginRes = _g["LoginRes"]
# ============================================================
# Constants
# ============================================================
MAIN_KEY = base64.b64decode("WWcmdGMlREV1aDYlWmNeOA==")
MAIN_IV = base64.b64decode("Nm95WkRyMjJFM3ljaGpNJQ==")
RELEASEVERSION = "OB55"
USERAGENT = "UnityPlayer/2018.4.12f1 (UnityWebRequest/1.0, libcurl/8.5.0-DEV)"
LOGIN_URL = "https://loginbp.ppmainecoonghj.com/"
_client = httpx.Client(
limits=httpx.Limits(max_keepalive_connections=20, max_connections=50),
timeout=httpx.Timeout(15.0, connect=5.0),
verify=False,
)
def _pad(t: bytes) -> bytes:
n = AES.block_size - (len(t) % AES.block_size)
return t + bytes([n] * n)
def _aes(key, iv, pt: bytes) -> bytes:
return AES.new(key, AES.MODE_CBC, iv).encrypt(_pad(pt))
# ============================================================
# LoginRes Parser
# ============================================================
def _try_parse(data: bytes):
try:
m = LoginRes(); m.ParseFromString(data)
if m.account_id and m.account_id > 0:
return json.loads(json_format.MessageToJson(m))
except Exception:
pass
return None
def _extract(raw: bytes) -> dict:
p = _try_parse(raw)
if p: return p
i = 0
while True:
i = raw.find(b"\x08", i)
if i == -1: break
p = _try_parse(raw[i:])
if p: return p
i += 1
j = raw.find(b"eyJhbGciOiJIUzI1NiIs")
if j != -1:
for k in range(j - 1, max(j - 300, -1), -1):
if raw[k] == 0x42:
p = _try_parse(raw[k:])
if p: return p
break
raise Exception("Could not parse LoginRes from server response")
# ============================================================
# MAJOR LOGIN
# ============================================================
def major_login(uid: str, password: str) -> dict:
"""
Returns:
{
"jwt_token": str,
"account_id": int,
"region": str,
"server_url": str,
"open_id": str,
"access_token": str,
"raw": dict # full LoginRes
}
Raises Exception on failure.
"""
# 1) Garena guest token
r = _client.post(
"https://ffmconnect.live.gop.garenanow.com/oauth/guest/token/grant",
data={
"uid": str(uid),
"password": str(password),
"response_type": "token",
"client_type": "2",
"client_secret": "2ee44819e9b4598845141067b281621874d0d5d7af9d8f7e00c1e54715b7d1e3",
"client_id": "100067",
},
headers={
"User-Agent": USERAGENT,
"Connection": "Keep-Alive",
"Accept-Encoding": "gzip",
"Content-Type": "application/x-www-form-urlencoded",
},
).json()
access_token = r.get("access_token")
open_id = r.get("open_id")
if not access_token or not open_id:
raise Exception("Invalid UID or Password")
# 2) Build LoginReq proto
msg = LoginReq()
json_format.ParseDict({
"open_id": open_id,
"open_id_type": "4",
"login_token": access_token,
"orign_platform_type": "4",
}, msg)
# 3) AES-128-CBC encrypt
payload = _aes(MAIN_KEY, MAIN_IV, msg.SerializeToString())
# 4) POST /MajorLogin
resp = _client.post(
f"{LOGIN_URL}MajorLogin",
data=payload,
headers={
"User-Agent": USERAGENT,
"Accept": "*/*",
"Accept-Encoding": "deflate, gzip",
"X-Ga-Sv": "1789534056",
"Authorization": "Bearer",
"X-Ga": "v1 1",
"Releaseversion": RELEASEVERSION,
"Content-Type": "application/x-www-form-urlencoded",
"X-Unity-Version": "2018.4.12f1",
"PlAy_VeR": "1.132.1",
"Ob_VeR": RELEASEVERSION,
},
)
# 5) Parse
res = _extract(resp.content)
return {
"jwt_token": res.get("token"),
"account_id": res.get("accountId"),
"region": res.get("lockRegion") or res.get("notiRegion"),
"server_url": res.get("serverUrl"),
"open_id": open_id,
"access_token": access_token,
"raw": res,
}