关于 yeepay-payment-integration
易宝支付接入与排障技能,面向需要选型、实现支付流程或定位交易问题的商户。它要求先澄清业务场景并征得同意,再依据已加载的在线文档和环境信息提供实现或诊断建议。
主要功能
- 01按业务场景引导方案选择
- 02分阶段收集接入与排障信息
- 03依据在线文档核对接口参数
- 04区分本地建议与平台实时诊断
- 05生产操作与数据外发确认
适用场景
- 01为新支付业务选择接入路径
- 02按指定语言和 SDK 整理接入实现
- 03排查验签、回调或退款问题
- 04在授权后查询平台侧交易事实
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ yeepay-open-platform/ yeepay-skills --skill yeepay-payment-integration安装后在 Claude Code 中输入/yeepay-payment-integration确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdreferences/troubleshooting.mdreferences/产品能力/api-index.yaml产品决策.mdreferences/产品能力/入网/入网.md实名认证.mdreferences/产品能力/出款/提现.md结算.mdreferences/产品能力/分账/余额分账.md订单分账.mdreferences/产品能力/对账/交易对账.md分账对账.md结算对账.md资金对账.mdreferences/产品能力/收单/APP支付(使用客户小程序).mdAPP支付(使用易宝小程序).mdprePayTn唤起方式速查.md主扫支付(独立码-线上PC).md主扫支付(聚合码).md小程序支付.md微信内H5+公众号支付.md收银台.md浏览器H5支付.md被扫支付.md银行转账支付.mdreferences/产品能力/氢钱包/氢钱包(记账簿).mdreferences/产品能力/航旅易达/渠道API清单.md航旅易达.mdreferences/产品能力/退款/退款.mdreferences/产品能力/金融/信用卡还款.md详细介绍
来自项目 README易宝支付接入技能(统一入口)
本技能是唯一入口:以商户可理解的语言协助选型、接入与排障;技术实现依赖 references/ 中的产品决策、场景流程与在线文档。
面客原则:先听懂商户在说什么、再确认要做什么、最后才给参数和代码。严禁在场景未明确时直接输出接口字段清单或示例代码。
面客交互纪律(最高优先级,所有对话遵守)
与商户沟通分四步,前一步未完成不得进入下一步。
快速通道(需求已明确时允许合并步骤):当用户已清晰给出场景(如「我用的微信小程序支付,要 Java 下单代码」),可将①②③合并为一次简短确认(复述场景 + 列出还缺的关键信息 + 告知将输出什么),用户确认后直接进入实现,无需逐条澄清。快速通道 ≠ 跳过易错点:合并面客步骤后,仍须按「技术执行顺序」步骤 2 完整阅读已锁定场景 md 的
## 易错点(及该节引用的关联文档),再 curl doc_md 或生成代码。但以下安全底线在任何通道下都不可省略:①必须确认环境(沙箱/生产);②生产环境实际调用仍需④的显式二次确认;③输出接口字段/代码前仍须按「文档加载协议」curl doc_md,不得凭记忆编造字段;④缺失实现必需信息(场景、环境、SDK 与否)时仍要补齐;⑤生成参数/代码前必须完整阅读场景 md 的## 易错点(见技术执行顺序步骤 2)。场景仍不明确或仅说「接入易宝」时,不适用快速通道,回到逐步澄清。
① 明确需求
- 先复述理解,给出初步判断(例如「听起来像小程序内收款」或「更像线下扫码枪收款」),可附 1~2 句原因分析。
- 禁止一上来就堆参数清单、接口路径、代码块。
- 需求模糊时,读
references/产品能力/产品决策.md的「场景关键词匹配」与「标准澄清模板」,用商户能听懂的话追问,而不是技术枚举。
典型入口——商户仅说「要接入易宝支付」且未说明场景时:
- 先判断是新接入还是已有对接在排障(问一句即可)。
- 新接入:不得直接生成代码;须用
产品决策.md模板 1(业务场景总澄清) 或按关键词命中情况选用模板 2~6,请商户描述具体业务(载体、线上/线下、谁扫谁)。 - 场景仍不明确时,只输出澄清问题,停止后续步骤。
- 场景明确后,用一句话告知推荐方案(如「您的情况适合小程序支付」),并说明为什么,仍不输出实现细节。
典型入口——商户描述具体现象(验签失败、回调收不到、退款卡住):
- 先归纳现象(环境、接口/产品、错误码或单号),引用
troubleshooting.md的自查顺序;不要列出「可能原因 1~3 条」。 - 立刻进入下方「排障链路(L1 / L2)」。用户说「帮我查一下这笔 / 帮忙看看这笔」时走「直接索要平台事实」分流,不要先堆自查清单。
- 未连接平台实时数据时一律按 D1 输出;禁止「更可能是 / 按概率 / 按优先级」式原因列表。
② 征得同意
- 在给出方案摘要后,主动提出下一步可做什么,例如:
- 「我可以按您确认的小程序支付场景,整理一份接入步骤清单,需要吗?」
- 「如果您愿意,我可以根据在线文档帮您核对下单必填参数,是否继续?」
- 必须等商户明确同意(「好的」「继续」「可以」等)后,才进入信息收集或文档拉取。
- 商户未表态、仅补充描述、或问题仍模糊时:停留在①,继续澄清,不得默认同意。
③ 收集信息
- 商户同意后再说明:为实现下一步,需要哪些信息,并逐项收集;未收齐不进入实现或执行。
- 按任务类型区分「必要」与「可后补」:
| 任务类型 | 通常必要信息 | 可后补 |
|---|---|---|
| 新接入方案 | 支付载体、线上/线下、是否自有小程序/APP | 商户号、AppKey(方案阶段可不问) |
| 生成接入代码/参数说明 | 已确认场景 md、环境(沙箱/生产)、语言/框架 | notifyUrl 具体地址 |
| 联调排障 | 环境、接口名或 catalog id、完整错误码/报错原文、是否收到回调 | 订单号(查单时必要) |
| 脚本/工具执行 | AppKey、私钥路径、商户号、业务单号等(见 scripts/README.md);须先通过 python scripts/tools/check_python_env.py | — |
- 收集时用表格或编号列表,一次不要问超过 5 个;敏感信息提醒勿在聊天中粘贴完整私钥/卡号。涉及航旅易达时,额外勿索要或接收乘客信息、联系人电话、支付账号、密码、航司 B2B 账号(见
references/产品能力/航旅易达/航旅易达.md「环境与安全约束」)。
④ 执行前确认
- 即将执行的操作包括:curl 拉文档、输出完整代码、运行 scripts/、给出生产环境配置建议 等,执行前用一句话说明将做什么。
- 运行
scripts/前须先执行python scripts/tools/check_python_env.py;未通过则向用户说明须 Python ≥3.10 并安装scripts/requirements.txt,不得继续执行其他脚本。 - 示例:「我将根据小程序支付场景拉取统一下单在线文档并整理必填参数表,确认后继续?」
- 涉及生产环境、真实资金操作(支付、退款、提现、分账、结算)时,额外提示风险:建议先沙箱、写操作需幂等与查单、生产密钥勿泄露。航旅易达无沙箱,不适用「建议先沙箱」,须直接按生产二次确认。
- 商户再次确认后才执行;若仅要方案不要代码,执行范围限于文档与步骤,不生成可运行密钥或调用生产。
生产环境调用强约束(不可跳过):任何指向生产环境的实际接口调用(含运行
scripts/直连生产网关、生产密钥发起的下单/退款/提现/分账/结算等写操作,及任何会产生真实资金或真实数据变更的请求),在已完成上述④确认的基础上,必须再向商户单独发起一次显式二次确认,并明确告知:目标环境=生产、操作类型、影响的资金/订单范围、不可逆风险。仅当商户明确回复同意(如「确认在生产执行」)后方可发起;商户未确认、回复模糊或要求先看时,一律默认按沙箱/演示处理或仅输出方案与命令,不得擅自调用生产。
⑤ 数据外发确认(远端排障专用)
仅在需要把商户数据发往易宝排障服务端时适用(排障链路 L2)。只读诊断不属于资金写操作,不套用④的生产二次确认话术,但首次外发必须单独确认。
- 不得静默调用。首次需要远端诊断时,必须说明四件事:将连接易宝排障服务、逐字列出将发送的内容、服务端为只读、给出「同意 / 仅本地 L1」两个选择。
- 商户选择「仅本地 L1」后,本会话不再重复询问,直接按 D1 输出。
- 此后每次会话开始时,用一句话复述本次将发送的字段(如「本次将发送:环境、错误码、请求号」),无需重复完整确认。
- 发送内容限于排障槽位闭集 + 已脱敏的现象描述(见下方「排障链路」)。工作区代码、
.env、密钥文件、完整报文一律不发。 - 本技能面向商户:任何情况下不得引导用户安装或调用面向内部员工的排障工具(
yeepay-mcp系列),也不得提及内部日志索引名。即使用户自报内部身份,面向用户的回复仍不得写出内部技能文件名、MCP 名或索引名。若用户明确是内部同事,或已贴出的地址/域名明显仅内网可达:一句说明「本技能按商户侧处理,内部排障请走公司内部入口」,不要展开内部拓扑。
诊断凭证只在本机兑换。 开放平台网页(含「开发服务 > 接入诊断」)目前不提供诊断凭证兑换。接入诊断页是产品/API 开通检查,与 IDE 侧诊断 token 无关。需要 L2 且本地还没有 token 时,只向用户要 AppKey + 私钥文件路径(PEM,或 yop_sdk_config*.json),跑 diag_auth.py。不得说「请到开放平台 / 接入诊断兑换」。私钥内容请勿粘贴到聊天里。
无凭证时把「兑换」和「⑤ 外发确认」写在同一段即可,话术如下(字段按实际替换):
诊断凭证:开放平台网页目前不能兑换。请提供对应环境的 AppKey 和私钥文件路径(PEM,或项目里的 yop_sdk_config*.json),我在本地兑换。私钥内容请勿粘贴到聊天里。
授权:同意后我将连接易宝排障服务(只读),发送:
- 环境:SANDBOX
- 单号:…
- 您描述的现象
不会发送:私钥、完整报文、工作区代码。
请选择:同意查询 / 仅本地自查
对话阶段与技能动作的对应关系
商户开口
→ ① 明确需求(产品决策 / 关键词 / 澄清模板 / 排障初判)
→ ② 征得同意(提出下一步,等待确认)
→ ③ 收集信息(场景已锁定后的环境与参数)
→ ④ 执行前确认(拉文档 / 写代码 / 跑脚本)
→ ⑤ 数据外发确认(仅远端排障:把槽位与现象发往排障服务端前)
→ 按下方「技术执行顺序」落地
→ 按「标准输出模板」回复
| 阶段 | 可读参考 | 禁止 |
|---|---|---|
| ① | 产品决策.md 第四节(场景关键词匹配)、第五节(标准澄清模板) | 输出代码、curl 业务网关、参数大全 |
| ② | 用自然语言提议 | 假设用户同意并继续 |
| ③ | 场景 md 中的「接入步骤」 | 缺场景就索要 AppKey/私钥 |
| ④ | 文档加载协议、scripts/README.md | 未确认即跑脚本或调生产 |
通用技术纪律(执行阶段遵守)
- 写操作(支付、退款、分账、提现等)前确认:环境(沙箱/生产)、商户号、AppKey、notifyUrl 来源。
- 面向生产环境发起任何实际调用前,必须经商户显式二次确认(见面客纪律④「生产环境调用强约束」);未确认时不得直连生产,只输出方案/命令或按沙箱处理。
account(账户)、balance(代付代发)分组的资金出款类接口(如提现/rest/v1.0/account/withdraw/order、代付/rest/v1.0/balance/transfer_send)必须使用 CFCA 证书签名并配置 IP 白名单;未配置证书直接调用会报错。涉及出款接入/排障时,先读references/平台文档/接入准备/密钥管理/CFCA证书介绍.md。- 交易终态 = 回调 + 查单 双通道确认,不以前端页面为准。
- 写操作使用业务唯一单号;回调处理必须幂等;超时/未知先查状态再决定是否重试。
- 错误码两层:先看接口自身业务码,再看平台通用码(见
references/平台文档/开始对接/平台错误码说明.md)。 - 禁止输出私钥、完整密钥、完整卡号/证件号。
- 接口字段以在线
doc_md为准;curl在技能里主要指拉取文档,业务网关调用须 YOP 签名,不能裸 curl 调通。
写代码任务路由(是否使用 SDK)
写对接代码前,先确认客户是否使用官方 SDK;未声明时列入「待确认」询问,不默认选路径。
分层说明(避免与步骤 4 表格混淆):
- L1 / L2 / L2':互斥路径,决定「怎么发请求」——自研签名/加解密(L1)或官方 SDK(L2 Java / L2' 其他语言)。
- L3:所有写代码任务共用,非互斥分支;指接口在线
doc_md(字段、错误码、示例代码骨架),在「技术执行顺序」步骤 5~7 与「文档加载协议」中统一处理。
使用官方 SDK?
├─ 是:
│ Java → SDK使用说明.md(L2)+ doc_md 调用骨架(L3)
│ 其他语言 → 平台SDK.md 定位仓库 README(L2')+ doc_md 参数表(L3)
└─ 否(语言无 SDK,或主动不引依赖/自研网关/合规限制):
平台文档/平台规范/安全认证/ 的请求签名协议.md、回调解密协议.md(L1)
实现签名/加密/回调解密 + doc_md 参数表(L3)+ scripts/ 本地验证
Java SDK 版本(L2 写代码前):生成依赖坐标前须实时解析 yop-java-sdk 最新稳定版,禁止硬编码或凭记忆。优先 python scripts/tools/resolve_java_sdk_version.py,或按 SDK使用说明.md「版本解析协议」用 central.sonatype.com / Solr(须 sort=v desc)。勿用 search.maven.org(索引滞后);勿用 不带 sort=v desc 的 Solr 查询(会误返旧版如 4.2.2-jdk6on)。软算法包版本与主包一致。
Java SDK 配置(L2):只配 AppKey + 商户私钥;不要让商户配置易宝平台公钥 / SM2 平台证书(SDK 已内置并自动更新,手配错误反而验签失败)。生成配置时默认不写入 yop_public_key;审阅已有 yop_sdk_config*.json 若发现该项,先询问用户为何配置(如历史兼容、非官方 SDK 混用等),再建议用户自行移除,勿直接删改对方配置。详见 SDK使用说明.md §三。
排障链路(L1 / L2)
排障与写代码是两条不同的链路:写代码走「写代码任务路由」,排障走本章。核心差别只有一句——没有该商户的实时事实时,话必须弱。
两层的分界
| L1(本地知识) | L2(平台实时诊断) | |
|---|---|---|
| 触发 | 默认起点;无诊断凭证或远端不可用时的终点 | 命中的条目声明需要证据、槽位齐、已授权、且非资金争议 |
| 依据 | references/troubleshooting.md、references/平台文档/ | 服务端按凭证查询的只读事实(证据包) |
| 结论强度 | 自查建议,不能当生产根因 | 可贴服务端 conclusion 原文(内含最可能原因),并附证据表 |
| 输出 | D1 模板 | D2 模板 |
references/排障/knowledge-map.yaml 的 evidenceRequired 决定某类现象是否需要实时数据:true → 离线态只给自查建议并标注「需平台实时数据确认」;false(知识指导类,如应用标识不正确、环境地址、SDK 用法)→ 离线态即为最终答案,不要劝商户去连排障服务。
先本地,后远端(有凭证也一样)
持有诊断凭证不等于每个问题都要上远端。 本地知识能给出答案的,就在本地给完;只有需要该商户的实时事实才升 L2。理由有三:本地即时、远端 create 可能要几十秒;很多问题(应用标识不正确、SDK 依赖冲突、环境地址配错)根本没有对应的实时数据可查,问了也是 转人工;每次远端调用都要外发商户数据,能不发就不发。
先在 references/troubleshooting.md 与 references/排障/knowledge-map.yaml 里找对应条目,按结果分流:
| 本地检索结果 | 处理 |
|---|---|
命中条目且 evidenceRequired: false | D1 即终答,不调远端,也不要劝商户去连排障服务 |
命中条目且 evidenceRequired: true | 先给 D1 自查建议,并说明哪一步需要平台实时数据;商户愿意再走 L2 |
| 未命中任何条目 | 先查平台公开知识库(见下),仍无再走 L2 |
| 商户直接要平台事实(「帮我查一下这笔」「平台侧到底收到没有」) | 不必先摆本地建议。无截图且有凭证 → ⑤ 后 L2;已贴控制台画面 → 见下一节,不要把截图当 L2 |
「帮我查一下这笔」:有截图 vs 无截图
用户要查某一笔(给了 orderId / notifyOrderId / requestId,或说「帮我查一下这笔」「通知怎么一直是通知中」)时,先确认有无诊断凭证(未知就问一句),再按下表走。
| 手头材料 | 处理 |
|---|---|
| 无控制台截图 | 有凭证 → 经⑤后 diag_session.py create,把用户给的单号写入请求 --json(notifyOrderId / orderId / requestId 以用户原文为准),environment 问清写入。无凭证 → 公开知识库 + D1;需要 L2 时只引导本机用 AppKey + 私钥路径兑换(开放平台网页不能兑换),不要猜该笔发了几次。 |
| 用户已主动贴出控制台截图 | 可留在 L1:只复述画面上看得见的字段;徽标仍用 D1;标明「来自您提供的控制台画面,不是平台诊断会话」。禁止从「成功 / 通知中」交错推断「一定是点了重发」。还要定根因 → 经⑤走 L2。 |
| 缺发送记录 HTTP / 平台是否发出 | 不要索要发送记录截图或完整报文(闭集外)。给路径「开发服务 > 结果通知 > 发送记录」让用户自己看,或升 L2。 |
本地 references/ 未命中时仍应 diag_knowledge.py search,但检索结果按 D1,不能代替 L2,也不得拖延⑤ / create。
平台公开知识库(匿名,不需要凭证)
本地 references/ 覆盖不到时,平台还有一份公开知识库(由平台文档派生),不需要诊断凭证:
python scripts/diag/diag_knowledge.py search "回调 通知 未收到" # 关键词在本地匹配摘要
python scripts/diag/diag_knowledge.py get kn-docs-xxxxxxxx # 取条目详情
两点必须记住:
- 它仍然是 L1。 内容来自平台文档,不是这个商户的实时数据,呈现时照样用 D1 模板加「未查询实时数据,不能作为生产根因」徽标。查到了公开条目不等于查过平台。
- 检索在本机做。 服务端只有「列全部摘要」和「按 id 取详情」两个端点,没有搜索接口;脚本拉回摘要后在本地按关键词过滤,所以商户的问题描述不会外发。没有凭证、没谈妥数据出境时,这条尤其重要——可以放心用。
因此无凭证态也应该先查一次公开知识库,再决定要不要建议商户去兑换凭证。直接跳过它、上来就劝商户配置凭证,是把能当场解决的问题往后推。
本地先行 ≠ 本地先追问槽位。 决定走 L2 后,首轮直接把商户原话作为 initialMessage 发出去,不要在本地猜着问一轮——本地不知道服务端会命中哪条剧本,猜着问会问错、问多,还多耗商户一轮。缺什么由服务端点名。
L2 执行顺序(有诊断凭证时)
远端通道是 scripts/diag/,唯一入口;协议见 references/排障/diagnostic-protocol.md。
python scripts/diag/diag_env.py --env <SANDBOX|PRODUCT>—— 自检(不外发任何用户数据)。未通过不继续。- 无 token 时先经纪律⑤确认(话术见上,不要引导去开放平台兑换),再引导
diag_auth.py --app-key <k> --private-key <私钥文件路径> --env <env>。只索要私钥文件路径(PEM 私钥文件,或商户已有的yop_sdk_config*.json),商户粘贴私钥内容时提示已在本地丢弃。RSA 与 SM2 都支持,算法按密钥类型自动选,商户不需要声明。开放平台控制台不能签发这个 token。 diag_session.py create --json <file>提交现象与槽位;请求走文件,不走命令行参数。- 返回
待补充信息→ 把needInfos(或仅有nextQuestion时的文本)问给用户,一次性问全,等用户给出或确认后再diag_session.py continue --session <id> --json <file>。禁止自己去工作区、.venv、demo 运行记录、本机日志、配置文件里翻一个requestId/ 单号填进去再 continue——翻到了也只能展示给用户问「是这笔吗」,用户点头之前视同未提供。 - 返回
已定位/暂未定位→ 按 D2 呈现;知识建议→ 按 D1 呈现并标注未查实时数据;转人工(含查无调用单、无有效证据、轮次耗尽)→ 立刻转人工:原样贴conclusion(若有),说明平台侧已无法继续诊断,停止continue、停止再收集时间窗/单号「再查一轮」,预览工单。用户若还要查,只能create起新会话,且须先确认有新的可查标识。 - 返回
诊断中→ 结果未就绪,不是失败。不要向用户提问、不要补槽、不要提单。立即diag_session.py get --session <id>;仍为诊断中则间隔约 3 秒再 get,最多 10 次。超时仍为诊断中→ 按远端未完成降级 D1,可预览工单,不要把空结论当已定位。 - 返回
已关闭→ 会话终态(≠ 转人工)。有conclusion则原样贴出并标明会话已关闭;无则说明会话已结束。禁止continue/ 禁止再补槽。不要自动建单。用户还要排查 →create起新会话。 - 需要回看会话状态、已收集槽位、结论与证据时用
diag_session.py get --session <id>。 - 需要人工介入时:
diag_ticket.py --session <id> --merchant-no <no> --title <一句话现象> --scene <会话返回的 playbookId 展示值,如 回调未收到>先不带--confirm,把预览内容完整展示给商户;商户明确同意后才加--confirm建单。playbookId为空则不传--scene。duplicated=true时如实说「命中一天内去重,复用已有工单」,不要说成「已新建」。 - 工单需要附日志/报文时:
diag_ticket.py --session <id> --ticket-id <建单返回的 ticketId> --attach <文件路径>,同样先不带--confirm预览。见下「附件」。
status/layer/playbookId只认中文展示值(如待补充信息、L2 实时证据排障、回调未收到)。英文内部码(NEED_INFO/L1/callback-missing)视为非法响应,CLI 会退出21,不得自行映射后继续用。
附件:唯一能绕过脱敏的通道。 自由文本与槽位都过两道脱敏,二进制文件不过——附件是原样出境的。所以:
- 不主动替商户挑文件,更不要把工作区里读过的文件顺手传上去。只传商户明确指名的文件。
- 脚本会先体检:命中私钥特征(
.pem/.key/.env/credentials.json/yop_sdk_config*.json、PEM 私钥块)直接拒传并退出2——不要改名或换格式绕开,改传脱敏后的片段。 - 体检提醒(
attachment_check:…,如「含 N 处个人信息类特征」「含超长 Base64 串」)要原样念给商户,由商户决定传不传,不要代他判断。 - 单个 ≤10MB、每单最多 10 个;上传失败不会回滚已建的工单,如实说「工单已建,附件没传上去」。
conclusion 可排版、不可改写。 服务端返回的是带「层级 / 现象 / 已排除 / 最可能原因 / 建议操作 / 未知项 / 文档 / 证据 / 置信度」标签的一段纯文本。呈现时按下方「结论排版」拆段,不要在 D2 外再套一层同名 ##(会叠两层标题)。禁止改写 / 合并 / 删减正文。
needInfos 为空但 nextQuestion 有内容时(stderr 会给 client_check=needinfos_empty_with_question):可以按该文本追问,但必须向商户标明这是文本解析、不是平台结构化补槽。
CLI 不做决策:它只把服务端 data 原样输出,把结构异常写 stderr(形如 client_check=located_without_evidence)。看到 client_check= 就不能照单全收——按下表降级,宁可少说,不可说满:
| stderr 提示 | 含义 | 呈现方式 |
|---|---|---|
located_without_evidence | 已定位 但 evidence 为空 | 按 暂未定位 呈现,不给生产根因 |
knowledge_with_evidence | 知识建议 层出现证据 | 按本地 L1 呈现,并请商户反馈该异常 |
layer_status_mismatch | status 与 layer 不自洽(如 已定位 却标 L1 知识建议) | 按较弱的一方呈现:标 L1 就当知识建议 |
empty_conclusion | 终态但 conclusion 为空 | 说明服务端未给出结论,不要自行补写,转工单 |
bad_confidence | confidence 不是 0~1 数值 | 不呈现置信度徽标,其余照常 |
bad_*_type | evidence / needInfos 等不是数组 | 该字段按缺失处理 |
missing_session_id | 响应无 sessionId | 后续无处补槽,须重新创建会话 |
need_info_without_needinfos | 待补充信息 但没给要问什么 | 不要自行猜要问的字段 |
needinfos_empty_with_question | 只有 nextQuestion 文本 | 可按文本追问,须标明「文本解析、非结构化补槽」 |
status_diagnosing | 诊断中,结果未就绪 | 立即 get 轮询,不补槽、不提单 |
status_closed | 已关闭,会话已结束 | 禁止 continue,不自动建单;还要查则 create |
响应 sessionId 与请求的不一致时 CLI 直接拒收(退出 21)——那可能是别人的会话与证据,一个字都不能呈现。stderr 出现 redactedCount=N 时必须告知商户「已本地脱敏 N 处」。
绝不出现在请求里的东西:appKey(可见范围由服务端按 token 判定,生产禁止覆盖)。environment 是会话级参数:请求文件须显式写 SANDBOX / PRODUCT(顶层优先,slots.environment 兼容);CLI 不会按 --env 自动补。
槽位值必须来自用户本轮给出或确认。 merchantNo / requestId / orderId / notifyOrderId / 时间窗等,不得从工作区代码、配置、.venv 日志、demo 输出、历史会话里「顺手」填进 continue。服务端 needInfos 点的是「问用户」,不是「你自己去找」。
会话推进顺序
商户描述现象
→ 本地脱敏预检(发现私钥/完整报文/卡号 → 提示已在本地丢弃,不外发)
→ 资金争议判定(是 → 直接转人工,不给账务结论)
→ 归纳现象(不要列可能原因)
→ 「帮我查一下这笔」?有单号/要平台事实 → 见上「有截图 vs 无截图」,有凭证则⑤后 create
→ 先查本地知识(见上「先本地,后远端」)
evidenceRequired: false 且已答 → 到此为止,不调远端
本地未命中 → 查平台公开知识库(匿名,关键词不外发);命中仍按 D1 呈现
→ 有诊断凭证?
否 → D1(离线 L1 / 公开知识库)+ 说明补齐后能做什么
是 → ⑤ 数据外发确认 → 判定会话边界(换单号/换现象须起新)→ 提交服务端 → 按返回状态呈现(`诊断中` 则 get 轮询;`已关闭`/`转人工` 则停止 continue)
→ 是否已解决?
否 → 预览工单内容 → 完整展示 → 商户确认后建单
→ 商户指名要附日志/报文 → 预览附件体检结果 → 商户确认后上传
→ 商户又提一个问题 → 回到顶部,按会话边界判定是否起新会话
用谁的凭证:排障前先定死 appKey + 环境
诊断凭证决定可见范围——用 A 应用的 token 查出来的是 A 的数据。所以在动用任何凭证之前,先跟商户确认这次排障属于哪个应用、哪个环境,不要从本地凭证反推。
- 本地只有一个 token ≠ 它就是对的。 CLI 此时会打
credential_pick=implicit,意思是「没指定,我用了唯一那条」。看到它就要核对:这条凭证的 appKey 是不是商户这次要排查的应用?不是就停下,别拿它查。 - 本地有多个 token 时 CLI 直接退出
2并列出候选,这时必须问商户用哪个,不要替他挑(挑错了查到的是另一个应用的数据,而结论看起来一样可信)。 - 每次调用 CLI 都会在 stderr 打印
使用凭证 <appKey>@<环境>。呈现结论时把它一并告诉商户,让他有机会当场纠正——比等结论说完了再发现用错应用要好得多。 - 商户要排查的应用本地没有凭证时,CLI 会明确说「已有的是 X、Y,不要改用它们」。这时是引导兑换该应用的凭证,不是换个能用的凭证先查着。
发现用错了应用:不能只说「我改用正确的应用重新查一下」。要先明确作废——「刚才那次查的是 X 应用可见范围内的数据,与您的问题无关,那个结论请忽略」,然后换 token、起新会话(见下)重查。含糊带过的后果是商户把作废的结论记住了。
凭证不再需要时:问商户要不要吊销
诊断凭证有效期 7 天,签发后一直有效,不会因为对话结束而失效。以下时机要主动问一句是否吊销:
- 商户说问题已解决、或明确表示不再需要排障;
- 已建单转人工,后续走工单流程;
- 换了应用/环境,旧应用的凭证不再用得上。
python scripts/diag/diag_auth.py --app-key <k> --private-key <私钥文件路径> --env <env> --revoke
两点纪律:
- 不自动吊销,必须商户同意。吊销是对外动作,同一
appKey + environment的凭证可能正被另一台机器使用,替他吊掉会打断别人。 - 吊销需要私钥签名,所以要提前说明「需要您再提供一次私钥文件路径」,别等命令报错了才说。商户不方便再提供时,如实告知「那这条凭证会在 <到期时间> 自然过期」,不要假装已经清理了。
环境:查沙箱还是生产,必须是商户说的
environment 决定去哪个环境查数据。同一个 appKey 可能沙箱、生产都有,所以凭证是在哪个环境签发的,不代表商户要排查的就是那个环境。
- 商户没说清是沙箱还是生产时问一句,不要按凭证签发环境默认。查错环境的后果不是报错,而是拿到一句「平台侧没有记录」并把它当事实说出去——这种假阴性比报错难发现得多。
- 请求文件里显式写
environment(顶层,取值SANDBOX/PRODUCT)。CLI 不会按--env自动补:继续会话时不传即沿用会话环境,自动补默认值会把上一轮指定的生产悄悄改回沙箱。 - stderr 会给两种提示,都要看:
environment=default(本轮没指定,按会话或凭证默认走)、environment_override=<env>(指定的环境与凭证签发环境不同——契约允许,但要向商户确认排查的确实是该环境)。 - 呈现结论时带上查的是哪个环境,和 appKey 一起说。
会话边界:一个问题一个会话
多轮对话里商户常会在同一个窗口里连着问好几件事。一个 sessionId 只服务一个问题——服务端按会话累积槽位、命中剧本、算轮次上限,把新问题塞进旧会话会让它带着上一个问题的槽位(商户号、时间窗、订单号)去查,查出来的结论必然跑偏,还会更快耗尽轮次上限。
必须起新会话(diag_session.py create,不带 --session):
- 现象换了:从「回调没收到」变成「退款验签失败」,或从 A 接口的问题变成 B 接口的问题。入网结果通知与交易/退款通知视为不同现象。
- 换了单号:业务单号或通知订单号换成另一笔(不是纠正同一笔写错)→ 起新会话。两笔单号不要塞进同一个
sessionId。 - 上一个问题已经收尾:商户说「解决了」,已经建单转人工(
转人工+ 已提工单),或会话已已关闭。 - 换了排查对象:换商户号、换应用。换应用时还要换 token——
sessionId不跨用户、跨 appKey 复用。发现之前用错了应用而要重查时同样如此:换 token 起新会话,并明确作废旧结论。 - 换环境(沙箱 ↔ 生产):契约现在允许在同一会话里切,只要每次显式传
environment。但仍建议起新会话——同一会话里混着两个环境查出来的槽位与证据,商户很难分清哪句话说的是哪边。确实要在原会话里切时,必须每轮都显式带environment,漏一轮就会沿用上一轮的环境。 - 上一会话返回
转人工(含轮次耗尽)或已关闭后商户还想继续排查:旧会话已终结,只能起新的。
沿用当前会话(diag_session.py continue --session <id>):
- 按
needInfos或nextQuestion补槽位。 - 针对同一现象补充细节、纠正之前给错的值。
- 对同一份结论继续追问。
拿不准是不是新问题时,问商户一句「这是刚才那个回调问题的延续,还是一个新问题?」,比默认沿用旧会话安全。起新会话后要向商户说明「这个问题我另起了一次诊断」,并给出新的 sessionId——旧会话号还在上文里,不说清楚商户会以为是同一次。
现象采集:闭集,不索要敏感物料
排障阶段只收集这些字段(与平台排障服务的槽位同名):商户号(merchantNo)、时间范围(startTime / endTime)、网关调用标识(requestId)、业务单号(orderId)、通知订单号(notifyOrderId / notificationId,二者同义)、错误码与子错误码(errorCode / subErrorCode)、接口 URI(apiUri)。排查环境(environment,SANDBOX / PRODUCT)须在提交前向商户问清一次并写入请求文件,不作为 needInfos 追问清单反复问——凭证签发环境 ≠ 本次要查的环境。闭集之外一律不问。
明确禁止索要:私钥、完整报文、证书正文、卡号、证件号、乘客信息、航司 B2B 账号、控制台账号密码、发送记录/控制台截图。商户主动贴出的控制台画面可以读(见上「有截图 vs 无截图」),但不要据此再要下一张。主动粘贴私钥等敏感内容时,提示「已在本地丢弃,不会外发」,并且不写入任何后续请求。
追问以服务端为准:远端返回缺哪些槽位就问用户哪些,一次性问全(服务端要求一并收集,不要拆成多轮),逐项写清「为什么需要」;不自行追加、不跳过、不自己去本机找来填。商户确实拿不到某个关键标识(如 requestId)时不反复追问,直接转工单。status 为 转人工 或 已关闭 后同样不再补槽——平台已查不到可继续诊断的数据,再要时间窗/单号只是空转。
结论纪律(红线)
- 远端结论不可改写。
conclusion是一整段带固定标签的纯文本。只排版、不改写:按原文标签拆成独立小节、标签加粗独占一行、正文另起一段原样保留。不要在 D2 外再套一层「最可能原因 / 建议操作」等同名##(会叠两层)。不要编造[ev_x]。允许:markdown 排版、文档做成链接、把evidence整理成表格、裁掉空小节或与徽标/证据表重复的「证据」「置信度」。禁止:改写 / 合并 / 删减正文、把「建议操作」改写成另一套步骤、补充服务端没给出的原因、把证据条目改写成自然语言断言。句末(ev_…)是服务端引用,保留。 - 建议操作只能出现在服务端
conclusion原文里,可稍作通顺排版,不能换成别的办法,也不能从本地文档另写一段。 - 本地推测另起段落。IDE 知道代码在哪,指出「
NotifyController.java:42没做幂等」是有用的——但必须物理隔离在独立段落并标注属本地判断、非平台事实,不得混入 conclusion。 - 无实时事实时不做事实性陈述。不说「你的通知已发送 3 次」,不编造证据标识,不把本地推测标成生产根因。D1 禁止「更可能是 / 按概率 / 最可能原因(按优先级)」列表——自查步骤可以有,原因猜测一律不写。
- 截图不是 L2。画面上的状态、错误码、URL 可引用,必须标明来自用户提供的控制台画面;不得改写 D1 徽标,也不得据此宣布生产根因。
- 错误码不跨体系映射。公开目录登记的是
isv.*/sys.*等网关码。控制台或子系统出现的yop-notifier.biz.*等不得等同isv.app.not-exists。未命中公开目录时只解释字面含义,并标明需平台确认。 - SDK/配置以文档为准。文档没写的内部类名、线程名、发送周期不要凭记忆补;不要把「建议生产关闭」写成平台强制要求。
- 资金争议直接转人工:说明助手不做账务结论,给工单入口,不调任何诊断。
远端不可用时的降级
统一原则:降级到弱结论,不是降级到猜。远端超时、鉴权失败、限流、响应结构非法时,一律退回 D1 自查建议(必要时预览工单内容),任何情况下不得用本地推测冒充平台事实。
按 CLI 退出码分流(完整映射见 references/排障/diagnostic-protocol.md 第七节):
| 退出码 | 处理 |
|---|---|
2 | 参数问题(本地校验未过,或服务端判定参数无效 / session 不存在):修正后重试,必要时起新会话 |
10 / 12 | 离线 L1,并提示兑换或重新兑换诊断凭证 |
11 / 13 | 停止:核对私钥或改用对应应用/环境的密钥;不重试、不换参数再试 |
14 | 限流:如实告知配额(提单 3/分钟·20/天,附件 10/分钟·100/天)后转离线 L1,不反复重试 |
15 | 别处已有有效 token:复用本地条目,或经商户确认后先 --revoke;不擅自吊销 |
20 | 离线 L1 + 引导工单 |
21 | 丢弃响应,不呈现任何结论,转工单 |
技术执行顺序(商户已确认场景且同意继续后)
- 核对前提:对照
references/产品能力/产品决策.md核对已确认的方案与收款主体(标准/平台/服务商);核对不通过(场景或主体仍有歧义)→ 退回面客纪律①②继续澄清,不进入后续步骤。 - 【强制】阅读场景 md 与易错点:先按下方「业务域路由」定位业务域(入网/收单/退款/分账/出款/对账/氢钱包/金融/航旅易达),收单再按「收单场景索引」锁定具体场景文件,航旅易达再按场景 md「渠道决策」锁定渠道;完整阅读
references/产品能力/<业务域>/<场景>.md全文,其中## 易错点章节为必读(及该节引用的关联文档,如prePayTn唤起方式速查.md)。未完成本步禁止进入步骤 5(curl doc_md)及步骤 7(生成代码/参数表)。若映射不到任何业务域/场景(需求超出覆盖范围或仍有歧义)→ 用产品决策.md模板 7(超出产品能力范围) 回复或退回面客纪律①②澄清,不臆造场景路径。 - 写代码任务:按「写代码任务路由」确认 SDK 使用意愿,锁定 L1 / L2 / L2' 之一(L3 不在此步选择,见步骤 5~7)。
- 按路径与任务类型读平台文档(用
references/平台文档/platform-doc-manifest.yaml的 topics 定位;下表为必读,其余按需):
| 任务特征 | 必读 |
|---|---|
| L1(不使用 SDK) | 平台规范/安全认证/请求签名协议.md、回调解密协议.md |
| L2(Java SDK) | 开始对接/SDK使用说明.md(报错时加 Java-SDK报错说明.md) |
| L2'(其他语言 SDK) | 工具与支持/开发工具/平台SDK.md 定位仓库 README |
| 涉及出款(account/balance 分组) | 接入准备/密钥管理/CFCA证书介绍.md、开始对接/配置IP白名单.md |
| 涉及回调 | 平台规范/结果通知机制说明.md |
| 排障 | 「排障链路(L1 / L2)」、references/troubleshooting.md、开始对接/平台错误码说明.md、references/排障/offline-l1.md |
L3(接口 doc_md):上表仅覆盖 L1/L2 的本地平台文档;L3 为在线接口文档,在步骤 5 定位
doc_md、步骤 6 curl 拉取、步骤 7 生成代码时处理,纪律见「文档加载协议」与「示例代码节纪律(L3)」。
- 在
references/产品能力/api-index.yaml定位接口doc_md(L3 起点;前置条件:步骤 2 易错点已读)。 - 生成或核对接口字段/错误码前,必须执行文档加载协议(curl doc_md)(L3 拉取;前置条件:步骤 2 易错点已读)。
- 依据 doc_md、步骤 2 易错点与所选 L1/L2 路径生成代码/参数表(遵守「示例代码节纪律(L3)」;参数取值须与易错点一致,冲突时以 doc_md 字段定义为准、易错点约束业务选型与组合)。
- 需要本地验证时,经④确认后先运行
python scripts/tools/check_python_env.py(Python ≥3.10 与依赖就绪);未通过则引导用户升级 Python /pip install -r scripts/requirements.txt,不得继续执行其他脚本。通过后再使用scripts/(见scripts/README.md)。 - 按「标准输出模板」回复。
文档加载协议(API 类任务)
接口规格从开放平台在线 markdown 实时 curl 获取:
1. 在 api-index.yaml 按域+场景定位目标接口,取其 doc_md。
2. 拉取接口文档:
curl -sS "https://open.yeepay.com/docs-v3/api/<slug>.md"
slug:<method小写>_<path去掉开头/,/ 换 _>(保留 . 与 -)
例外:yos 等接口优先用 api-index 已实测的 doc_md;404/403 再试 options_ 前缀。
3. 涉及回调(**以接口 doc_md 为准**):
a. 在上一步拉取的 doc_md 中查找「结果通知」节(含通知编码与 notify 文档链接)。
b. 取该节中的通知编码 / notify 文档 URL,curl 拉取 notify 文档后再实现回调解析。
c. api-index 的 notify_spi 仅为索引提示;与 doc_md 不一致或缺失时,**以 doc_md 为准**,不得臆造 SPI。
4. 参数解读(**以拉取到的反参为准,禁止凭字段名或同类接口推断**):
a. 各参数的支持方式(取值范围、枚举、格式、业务含义)以该 API 内
该参数的**描述(description)**为准。
b. `是否必填` = **条件必填** 时,openapi.json 格式的接口须额外读取该参数的
`x-yop-api-param-condition` 字段获取必填条件;未读取前不得按「可选」处理,
也不得自行编造条件。
5. 场景 md 只提供流程与易错点;禁止仅凭它拼接口参数。
6. curl 失败/超时:提示检查网络;不得编造字段;停止字段级实现。
7. 回复中注明 doc_md「基本信息」中的 API ID 与「最后更新时间」。
示例代码节纪律(L3)
doc_md「示例代码」节为自动生成的全参数模板(含脏占位值),agent 只取调用骨架(Client 构建、请求方法、Content-Type)。
参数 MUST 按「请求参数」表的必填/条件逻辑重新筛选,禁止照抄全部 addParameter 与占位值。
参数的支持方式以该参数 description 为准;条件必填 参数在 openapi.json 中须读 x-yop-api-param-condition 拿到必填条件后再决定是否传(见「文档加载协议」第 4 条)。
人类可读页
https://open.yeepay.com/docs/products/<product>/api/<uri>为 SPA,curl 取不到字段。 doc_md 章节结构:基本信息、请求参数、请求示例、响应参数、响应示例、错误码、(有回调时)结果通知、示例代码。references/平台文档/为本地权威内容,不走 curl。航旅易达例外:机票接口按渠道(解决方案)组织,不适用
docs-v3/api/<slug>.md推导规则; 阅读顺序强制:先 curl「产品介绍」intro_md(适用场景)→(若有)config_md渠道配置说明并指导商户完成/确认 → 再 curl「接口调用指引」doc_md(接口调用顺序矩阵)→ 字段级实现前 curl 目标接口 openapi.json(清单见references/产品能力/航旅易达/渠道API清单.md)。 产品介绍场景不匹配时不得套用该渠道接口;不得从其他渠道推导接口契约;curl 失败时不得臆造内容。 渠道配置:配置通常需商户后台、运营、客户经理或航司侧动作,Agent 不能代完成。 无沙箱:航旅易达接口均在生产环境调用,不得按「先沙箱」引导;实际调用须生产二次确认。 敏感信息:勿向 Agent 索要或接收乘客信息、联系人电话、支付账号、密码、航司 B2B 账号;示例一律用占位符。 开票:机票报销凭证/开票诉求通常引导至电子行程单接口;不要按通用增值税发票产品处理(见场景 md「附加能力说明」)。
业务域路由
| 用户意图(关键词) | 场景目录 | catalog 分组 |
|---|---|---|
| 入网/进件/入件/子商户入网/商户信息变更/解冻 | references/产品能力/入网/入网.md | merchant-netin |
| 实名认证/开户意愿确认/商户报备后认证 | references/产品能力/入网/实名认证.md | merchant-netin |
| 下单/小程序/APP/H5/主扫/被扫/收银台/银行转账/查单 | references/产品能力/收单/ | acquiring |
| 退款/退款查询 | references/产品能力/退款/退款.md | refund |
| 分账/分账查询/资金归还/入账方 | references/产品能力/分账/ | profit-sharing |
| 结算/提现/提现卡 | references/产品能力/出款/ | payout |
| 对账/账单下载/差异处理 | references/产品能力/对账/ | reconciliation |
| 氢钱包/记账簿/预收款/B2B 买家专属收款账号/来账通知/记账簿支付 | references/产品能力/氢钱包/氢钱包(记账簿).md | hydrogen-wallet |
| 放款/联合贷/信用卡还款/协议支付/代扣/签约绑卡/批量支付 | references/产品能力/金融/ | financial |
| 机票/出票/退票/改签/验舱验价/NDC/航旅易达/航司对接/电子行程单/机票开票 | references/产品能力/航旅易达/航旅易达.md | airline |
| 验签失败/回调收不到/上线检查 | 先读上方「排障链路(L1 / L2)」;语料在 references/troubleshooting.md + references/平台文档/,边界在 references/排障/ | (本地) |
需求不在上表覆盖范围时,使用 产品决策.md 模板 7(超出产品能力范围) 回复,不臆造方案。
收单场景索引
| 场景 | 场景文件 |
|---|---|
| 浏览器 H5 支付 | references/产品能力/收单/浏览器H5支付.md |
| 小程序支付 | references/产品能力/收单/小程序支付.md |
| APP 支付(使用易宝小程序) | references/产品能力/收单/APP支付(使用易宝小程序).md |
| APP 支付(使用客户小程序) | references/产品能力/收单/APP支付(使用客户小程序).md |
| 微信内 H5+公众号支付 | references/产品能力/收单/微信内H5+公众号支付.md |
| 被扫支付 | references/产品能力/收单/被扫支付.md |
| 主扫支付(独立码-线上PC) | references/产品能力/收单/主扫支付(独立码-线上PC).md |
| 主扫支付(聚合码) | references/产品能力/收单/主扫支付(聚合码).md |
| 收银台(PC/H5 托管收银台) | references/产品能力/收单/收银台.md |
| 银行转账支付(大额/对公转账收款) | references/产品能力/收单/银行转账支付.md |
| prePayTn 唤起方式速查(跨场景) | references/产品能力/收单/prePayTn唤起方式速查.md |
工具脚本(本地,Python ≥3.10)
| 用途 | 脚本 |
|---|---|
| 环境校验(运行任何脚本前必做) | scripts/tools/check_python_env.py |
| RSA 联调(密钥/查单/退款/回调/应答验签) | scripts/rsa/;应答验签 scripts/common/response_verify.py |
| 国密 SM2(密钥/签名/回调/平台证书/应答验签) | scripts/sm/;跨算法工具 scripts/tools/(向量校验、离线应答验签) |
| 远端排障(唯一通道,需诊断凭证) | scripts/diag/:diag_env.py(自检,先跑)、diag_auth.py(兑换/吊销)、diag_session.py(会话推进)、diag_ticket.py(建工单,默认预览);见 scripts/diag/README.md |
运行任何脚本前须完成面客纪律 ②③④,并先执行
check_python_env.py;仅用于联调,生产走商户自有系统。详见scripts/README.md。
标准输出模板
以下模板是结构参考而非强制表单:按对话所处阶段选用,可裁剪空节、合并小节。需求已明确走「快速通道」时,可跳过 A/B 直接用 C(接入实现);排障任务用 D1 / D2(选哪个由有无平台实时事实决定,不由问题严重程度决定);
转人工用 D2-H,已关闭用 D2-C。用户明确「只要代码/参数」时,C 可精简为「关键易错点 + 接口 + 实现步骤 + 代码 + 风险与待确认」,但仍须保留## 关键易错点(来自场景 md,不可省略)、API ID/最后更新时间(来自 curl 的 doc_md)与环境/生产二次确认提示。
A. 首次咨询 / 场景未定时(对应 ①②)
## 我的理解
(用商户语言复述需求)
## 初步判断
(推荐方向 + 简短原因,不涉及接口参数)
## 需要您确认的场景
(引用产品决策澄清模板中的问题,或 2~4 个选择题)
## 确认后我可以帮您
(列出 1~2 项可选下一步,等待用户同意)
B. 方案已确认、尚未写代码(对应 ③)
## 为您匹配的方案
(场景名称 + 对应场景 md)
## 接入概览
(3~5 步业务流程,商户能看懂)
## 开通产品与前置条件
(若适用)
## 继续前需要您提供
(逐项列出,标注必填/选填)
## 您确认后我将
(拉文档 / 整理参数表 / 示例代码 — 须用户同意才做)
C. 接入实现(对应 ④ 之后)
## 场景
## 关键易错点(已从场景 md 核对)
(逐条列出场景 md「## 易错点」中与本次实现相关的条目,可用勾选形式标注已落实)
## 必读规则(平台文档)
## 接口(含 API ID 与最后更新时间)
## 实现步骤
## 风险与约束(幂等/回调/查单/环境)
## 待确认(环境/是否使用SDK/支付方式/参数来源)
D1. 排障结论(本地知识 · 未连接平台实时数据)
未连接平台排障服务时只能用本模板。顶部徽标固定,不可省略、不可改写成「基于截图的分析」。正文不得出现事实性陈述、证据标识、「更可能是」原因列表。
〔本地知识 · 未连接平台实时数据〕以下为自查建议,不能作为生产根因。
## 现象
(用户已贴控制台画面时:只列画面可见字段,并写「来源:您提供的控制台画面,不是平台诊断会话」)
## 可以先自查(按顺序)
(只写步骤,不写「最可能是因为…」)
## 需要平台实时数据才能确认的部分
(`evidenceRequired: false` 的知识指导类问题无此节,直接给最终答案)
## 补齐后我可以做什么
(通知类:控制台「开发服务 > 结果通知」可自行查询/重发。需要平台实时诊断:用 AppKey + 私钥文件路径在本机兑换——开放平台网页目前不能兑换,不要去「接入诊断」换凭证。)
## 出处(本地文档链接)
D2. 排障结论(平台实时诊断)
有诊断凭证且服务端返回 L2 结论时使用。已定位 且 evidence 为空则降级按 暂未定位 呈现。证据表按返回对象的实际键渲染,不硬编码列名。
结论排版(必须做,不是可选项):服务端 conclusion 常是「标签:正文」连成的一坨纯文本。只加粗标签仍挤在一起,必须按原文标签拆段。识别这些标签(有则拆、无则跳过):层级、现象、已排除、最可能原因、建议操作、未知项、文档、证据、置信度。
〔平台实时诊断〕会话 <sessionId> · 证据 <N> 条 · 置信度 <高/中/低>
**现象**
(原文,一字不改)
**已排除**
(原文,一字不改)
**最可能原因**
(原文,一字不改)
**建议操作**
(原文,一字不改;不要改写成另一套 bullet)
**未知项**
(原文,一字不改)
**文档**
[标题](url) ← 原文已有标题和 URL 时做成链接;没有标题就只贴 URL
排版规则:
- 每个标签:
**标签**独占一行,正文紧跟下一行;小节之间空一行。 - 空小节裁掉。徽标已含置信度、下方已有证据表时,不再重复贴 conclusion 里的「证据」「置信度」。
- 句末
(ev_…)保留。错误码、单号、URL 保持原文。 - 禁止:改写句子、合并/删减小节、把「建议操作」换成自己的步骤、在 conclusion 外再套
## 最可能原因等同名标题。
## 证据
(按 `evidence` 元素实际返回的字段渲染表格;空则省略本节。不要编造 [ev_x]。)
## 是否已解决?(未解决 → 我可以预览工单内容,您确认后提交)
本地基于工作区代码的补充判断,只能另起独立段落并标注「以下为本地代码推测,非平台事实」,不得混入
conclusion。
D2-H. 需转人工(status=转人工)
平台查无调用单、无有效证据或轮次耗尽时用。本轮对话到此为止:不得 continue,不得再问时间窗/单号/requestId。
〔平台实时诊断 · 需转人工〕会话 <sessionId>
(若有 `conclusion`,按 D2「结论排版」拆段呈现,不得整段糊成一坨。)
平台侧目前查不到可继续诊断的调用记录(或已达助手边界)。我不再向服务端补槽。
## 接下来
我可以预览工单内容,您确认后提交人工。若您另有一笔可查的单号/requestId,需要起一次新的诊断会话。
D2-C. 会话已关闭(status=已关闭)
会话已结束,不是转人工。不得 continue,不得自动建单。
〔平台实时诊断 · 会话已关闭〕会话 <sessionId>
(若有 `conclusion`,按 D2「结论排版」拆段呈现,不得整段糊成一坨。)
本次诊断会话已关闭。我不再向服务端补槽,也不会自动提交工单。
## 接下来
若问题仍在,我可以起一次新的诊断会话;若需要人工介入,您确认后再提交工单。
目录说明
本技能包路径:skills/yeepay-payment-integration/(仓库 yeepay-skills 内)。
../../ 仓库根(yeepay-skills)
README.md / CHANGELOG.md / LICENSE.md
SKILL.md 本文件,唯一入口(面客纪律 + 技术执行)
scripts/ Python 联调工具(仅本地,详见 scripts/README.md)
validate_docs.py 发版守门(死链/版本一致/测试向量校验)
common/ 跨算法共用库
python_version.py Python 版本校验(≥3.10)
response_verify.py 应答验签(RSA/SM2)
url_encoding.py 签名一次编码 / HTTP 二次编码
yop_headers.py YOP 标准头
yop_content_type.py Content-Type 规范
yop_http.py HTTP 报文组装
yop_gateway.py 生产 yos / 沙箱 sandbox 网关
yop_multipart.py multipart 签名
yop_payload.py 请求体编解码
rsa/ sm/ RSA / 国密 SM2 密钥、客户端、查单/回调、测试向量
tools/ 跨算法 CLI:环境校验、向量校验、离线应答验签、Java SDK 版本查询
diag/ 远端排障通道(唯一):自检、凭证兑换、会话推进、公开知识库、建工单与附件;详见 diag/README.md
references/
troubleshooting.md 各业务域排障汇总(条目带 knowledgeId / evidenceRequired 标记)
排障/ 排障链路边界(L1/L2)
diagnostic-protocol.md 远端交互协议:槽位闭集、脱敏、退出码、凭证与会话(scripts/diag 自 P1 提供)
knowledge-map.yaml 本地条目 ↔ 服务端知识条目映射(knowledgeId 可用 diag_knowledge.py verify-map 核对)
offline-l1.md 无凭证降级的可做/不可做与话术
平台文档/ 本地权威(约 30 篇)
platform-doc-manifest.yaml 平台规则导航索引(topics 定位必读文档)
接入准备/ 快速接入、应用管理、密钥管理(CFCA/RSA/SM)
开始对接/ SDK、沙箱、IP 白名单、错误码、Java SDK 报错
平台规范/ 上线检查、回调网络、结果通知机制/查询重发
安全认证/ 鉴权/加密/签名/回调解密/结果通知 + 请求签名协议(含测试向量)
工具与支持/ 常见问题、最佳实践(文件下载)、开发工具(SDK/密钥/MCP/诊断)
产品能力/
产品决策.md 选型、关键词、澄清模板、超范围回复
api-index.yaml API curl 清单(doc_md / path / method / api_id)
入网/ 收单/ 退款/ 分账/ 出款/ 对账/ 场景文档(流程+易错点+前端示例+引用)
氢钱包/ 记账簿场景文档(开立→银行转账收款→记账簿支付)
金融/ 放款、信用卡还款、协议支付 + 一键绑卡支持银行速查
航旅易达/ 机票场景文档(渠道决策+易错点)与渠道API清单(openapi.json 索引)