Decision Engine 分析接口报 “x-tenant-id not found in headers“ 怎么排查? 📅 发布时间:2026/9/13 1:57:14 👁 浏览次数: Decision Engine 分析接口报 x-tenant-id not found in headers 怎么排查【免费下载链接】hyperswitchOpen source, composable payments platform | PCI compliant | SaaS and Self-host options | Enables connectivity to multiple payment, payout, fraud, vault and tokenization providers | Uplifts authorization with intelligent routing and revenue recovery | Reduce payment processing costs with cost observability | Reduces payment ops with reconciliation项目地址: https://gitcode.com/GitHub_Trending/hy/hyperswitch调用 Hyperswitch 的 Decision Engine 分析类接口/analytics/*时请求返回TE_03: x-tenant-id not found in headers即使Authorization或x-api-key完全有效也无法通过。这篇文章给出这条报错的成因、只受影响的接口清单、修复命令和验证方式适用于本地源码运行、Docker Compose 部署以及通过 Hyperswitch Sandbox 访问 Decision Engine 的环境。先理解这个报错的触发机制TE_03是请求头缺失错误不是认证错误。官方文档中的原文说明TENANT_HEADERx-tenant-id没有任何回退值——在需要它的路由上省略该头即使携带了有效的AUTH_HEADER也会失败。容易误判的原因在于大部分 Decision Engine 路由/decide-gateway、/routing/*、/rule/*、/merchant-account/*、/update-gateway-score、/auth/*、/api-key/*会在内部自行解析租户不需要这个头。只有以下路由必须显式携带x-tenant-id见 API Guide路由额外要求所有GET /analytics/*AUTH_HEADER之外必须加TENANT_HEADERGET /health/diagnostics仅需TENANT_HEADER无需认证POST /gateway-score/reset同分析路由AUTH_HEADERTENANT_HEADER因此排查的第一步是确认你请求的到底是哪类路由如果报TE_03几乎可以断定你打的是上表中的路由之一。第一步确认服务本身可达排除服务未启动的情况访问无需任何请求头的公共健康检查路由export BASE_URLhttp://localhost:8080 curl $BASE_URL/health文档给出的预期响应{ message: Health is good }如果这一步就不通先按 本地部署指南 把服务拉起Docker Compose 需显式指定 profile例如docker compose --profile postgres-ghcr up -d再回到本文排查请求头问题。第二步给受影响的请求补上x-tenant-id头随部署配置分发的配置文件中只定义了public这一个租户[tenant_secrets]段见 配置文档。所以默认环境下修复方式就是在请求中显式带上export TENANT_HEADERx-tenant-id: public以分析概览接口为例完整的修复后请求为curl $BASE_URL/analytics/overview?range1d \ --header $AUTH_HEADER \ --header $TENANT_HEADER其中$AUTH_HEADER是Authorization: Bearer jwt_token登录/注册后取得的 JWT或x-api-key: DE_api_key二者取其一即可。诊断路由GET /health/diagnostics是文档中给出的最小验证用例——它不需要认证只验证租户头解析curl $BASE_URL/health/diagnostics \ --header x-tenant-id: public文档示例响应标注为文档给出的示例实际字段值以你的部署为准{ key_custodian_locked: false, database: { database_connection: Working, database_read: Working, database_write: Working, database_delete: Working } }能拿到这样的诊断 JSON 而不是TE_03说明租户头已被正确解析。第三步仅在需要自定义租户时检查[tenant_secrets]配置如果你发送的不是public而是自己定义的租户标识报TE_03时还应检查配置文件中的[tenant_secrets]段——它把租户标识映射到数据库 schema[tenant_secrets] public { schema public }随仓库分发的config/development.toml源码运行和config/docker-configuration.tomlDocker/Compose 运行只定义public租户要支持其他租户需要在这段中新增条目具体编辑哪个文件取决于你的运行方式见 配置文档。配置修改后需重启服务生效文档未说明热加载行为此处不展开。Sandbox 环境的额外条件如果$BASE_URL是https://sandbox.hyperswitch.ioDecision Engine 经 Hyperswitch Sandbox 提供除x-tenant-id外还必须携带路由特征头export FEATURE_HEADERx-feature: decision-engine curl https://sandbox.hyperswitch.io/analytics/overview?range1d \ --header $AUTH_HEADER \ --header $TENANT_HEADER \ --header $FEATURE_HEADER本地或自托管部署不需要这个头。验证修复结果按以下顺序确认对照验证同一请求去掉x-tenant-id头应复现TE_03: x-tenant-id not found in headers加上后不再出现该错误。这个对照直接确认了根因是请求头缺失而非权限或网络问题。分析接口返回数据带三个头的请求认证 租户 sandbox 特征头如适用应返回 JSON 分析数据例如/analytics/overview?range1d返回request_count、top_gateway、gateway_share等字段数值为文档示例实际取决于你的流量。健康检查兜底curl $BASE_URL/health仍应返回{message:Health is good}确认排查过程没有影响服务状态。限制与边界x-tenant-id没有缺省值文档明确它是最容易被漏掉的请求头组因为其他路由都不需要它代码或脚本里容易只在部分请求上附带。租户值不是任意字符串默认部署下只能使用public其他租户必须在[tenant_secrets]中先行定义。分析接口的租户头要求与认证要求是叠加关系GET /analytics/*同时要求有效认证和x-tenant-id缺少任一项都不会成功本文标题对应的TE_03只表示缺的是租户头。更多路由的请求与响应结构见 API Guide 和 Analytics Endpoints。【免费下载链接】hyperswitchOpen source, composable payments platform | PCI compliant | SaaS and Self-host options | Enables connectivity to multiple payment, payout, fraud, vault and tokenization providers | Uplifts authorization with intelligent routing and revenue recovery | Reduce payment processing costs with cost observability | Reduces payment ops with reconciliation项目地址: https://gitcode.com/GitHub_Trending/hy/hyperswitch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考