9eaa987a81
企业微信「会话内容存档」侧新增上游入口:用户把美团小程序卡片/截图发给成员(非客服) → 轮询 GetChatData 拉取 → RSA+AES 解密 → 识别 weapp/image → set_pending。下游(心跳→ 弹窗→比价)与 wx_kf/服务号版完全复用。补微信客服收不了第三方小程序卡片分享的短板。 - wx_finance_sdk: WeWorkFinanceSdk C 库 ctypes 绑定(NewSdk/Init/GetChatData/DecryptData) + RSA(PKCS1v15)解 encrypt_random_key。.so 实例化时才加载, 无 .so 机器可安全 import。 - wx_finance_worker: 独立线程轮询(阻塞 C 调用不入 asyncio)+ seq 游标文件持久化; 只处理外部用户(from≠接收成员)发来的 weapp/image。 - scripts/wx_finance_probe.py: 上 worker 前的连通性探针(云上验 .so/Init/GetChatData/解密)。 - config 增 WX_FINANCE_*(ENABLED 默认关 → 未配好零影响)+ wx_finance_configured; main lifespan 起停 worker;corpid 复用 WX_KF_CORP_ID。无新依赖、无 migration。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
"""会话存档 SDK 连通性探针 —— 上 worker 前,在【云服务器】单独验证整条链路是否打通。
|
|
|
|
在 /opt/shaguabijia-app-server 下跑: .venv/bin/python scripts/wx_finance_probe.py
|
|
|
|
依次验证:加载 .so → NewSdk/Init(corpid+存档Secret+可信IP)→ GetChatData(0)→ 试解第一条。
|
|
只读、不写任何比价信号。任一步报错都会明确指出卡在哪(便于逐项排:.so 缺依赖 / Init 失败 /
|
|
可信IP 没放行 / 私钥不匹配)。全绿了再把 WX_FINANCE_ENABLED 置 true 上 worker。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from app.core.config import settings
|
|
from app.integrations.wx_finance_sdk import WxFinanceSdk
|
|
|
|
|
|
def main() -> None:
|
|
print(f"[cfg] sdk_path = {settings.WX_FINANCE_SDK_PATH}")
|
|
print(f"[cfg] corpid = {settings.WX_KF_CORP_ID}")
|
|
print(f"[cfg] secret_set = {bool(settings.WX_FINANCE_SECRET)}")
|
|
print(f"[cfg] privkey = {settings.WX_FINANCE_PRIVATE_KEY_PATH}")
|
|
|
|
sdk = WxFinanceSdk(
|
|
settings.WX_FINANCE_SDK_PATH,
|
|
settings.WX_KF_CORP_ID,
|
|
settings.WX_FINANCE_SECRET,
|
|
Path(settings.WX_FINANCE_PRIVATE_KEY_PATH).read_bytes(),
|
|
)
|
|
print("[1] 加载 .so + Init 成功")
|
|
|
|
msgs = sdk.get_chat_data(0, limit=100)
|
|
print(f"[2] GetChatData(0) 成功, 拉到 {len(msgs)} 条")
|
|
if msgs:
|
|
first = msgs[0]
|
|
print(f" 第一条 seq={first.get('seq')} publickey_ver={first.get('publickey_ver')}")
|
|
plain = sdk.decrypt(first["encrypt_random_key"], first["encrypt_chat_msg"])
|
|
print(f"[3] 解密成功, msgtype={plain.get('msgtype')} from={plain.get('from')}")
|
|
else:
|
|
print("[3] 暂无历史消息(先让用户加接收成员好友、发条消息, 再跑一次)")
|
|
sdk.close()
|
|
print("探针完成:链路全通 ✓")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|