fix: 企微回调验证 — 返回纯文本而非 JSON

企微后台保存时要求响应为原始解密明文(Content-Type: text/plain),
FastAPI 默认 JSON 序列化会加引号导致验证失败。
改用 PlainTextResponse 返回纯文本。

验证: 本地 + 生产域名均返回 text/plain, 解密内容正确

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-06-26 09:46:19 +08:00
parent 36ba9338f1
commit eae7fdafb8
+3 -1
View File
@@ -4,6 +4,7 @@ import base64
import uuid
from typing import Optional
from fastapi import APIRouter, Depends, HTTPException, Query, Request
from fastapi.responses import PlainTextResponse
from pydantic import BaseModel
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
@@ -73,7 +74,8 @@ async def wecom_callback_verify(
try:
plaintext = _decrypt_echostr(echostr)
return plaintext
# Must return raw plaintext (not JSON) — WeChat Work requires exact match
return PlainTextResponse(content=plaintext, status_code=200)
except Exception as e:
raise HTTPException(status_code=500, detail=f"Decrypt failed: {e}")