# 架构决策：微信出站调用敏感日志边界

> 日期：2026-08-02  
> 决策：微信接口异常只记录低敏诊断维度，不记录请求/响应原文  
> 本体：`rule:BR-AUTH-003`

## 背景

`jscode2session`、`getuserphonenumber` 和 `access_token` 都涉及一次性 code、openid、手机号或 AppSecret。原异常分支曾把微信完整响应体或原始手机号写入日志，并把 `Exception#getMessage()` 拼入客户端错误文案。网络异常消息可能包含含 query 的请求 URI，从而间接暴露 AppSecret、access_token 或一次性 code；完整微信响应也可能包含手机号。

## 决策

1. 微信出站日志只允许 HTTP 状态码、微信数值错误码和 Java 异常类型。
2. 禁止把完整响应体、手机号、openid/unionid、access_token、AppSecret、`phoneCode/jsCode`、含 query 的 URL 或异常消息作为日志参数。
3. 网络或解析异常返回固定低敏文案；微信明确返回的业务错误仍可通过受控 `errcode` 映射成可理解提示。
4. `SensitiveLoggingContractTest` 扫描微信服务及相邻的身份、session、邀请和上传边界，阻止敏感变量、外部错误文案、异常消息或完整异常重新成为日志参数，并禁止把异常消息拼入客户端响应。

## 边界

- 该决策不降低线上可观测性；HTTP 状态、微信错误码、异常类型和现有请求级 trace 足以定位网络、凭据和 code 生命周期问题。
- 运维排障不得临时打开完整 HTTP body 或 query 日志。确需与微信支持协查时，只记录时间窗、匿名化请求关联和错误码。
- 微信真实 AppID/AppSecret 仍须在生产前轮换并由受控环境变量提供；本变更不读取、生成或验证真实凭据。
