skillZs
★ LIVE SKILL TAGS ★
>>> LIVE SKILLS INDEX <<<
* OPEN SOURCE *
NO LOGIN, NO TRACKING
※ REAL INSTALL DATA ※
← back to all skills
yeepay-open-platform/yeepay-skills134 installs

yeepay-payment-integration

易宝支付(Yeepay)开放平台接入最佳实践。涵盖入网(服务商/平台商拓展子商户进件、商户信息变更、 沉默商户解冻、微信/支付宝实名认证)、收单(小程序支付、APP支付、浏览器H5支付、微信内H5+公众号支付、 被扫付款码、主扫独立码/聚合码、PC/H5收银台、银行转账支付)、退款(原路/极速/补充卡信息/合单退款)、分账(订单分账、余额分账、入账方管理)、出款(结算、提现)、 对账、氢钱包(记账簿开立、银行转账预收款、记账簿支付与退款、冻结解冻)、金融(放款对公快捷/联合贷、信用卡跨行还款、协议支付签约绑卡与代扣、批量支付)、 航旅易达(机票出票/退票/改升,航司NDC2C/NDC2B/NDC2T/B2B、OTA分销、CDP渠道)全场景的 产品选型、接入指导与联调排障。 当用户提到"接入易宝"、"对接易宝支付"、"yeepay"、"YOP"、"聚合支付"、"入网"、"进件"、"入件"、 "子商户入网"、"商户报备"、"实名认证"、"支付下单"、"小程序支付"、 "APP支付"、"H5支付"、"公众号支付"、"付款码"、"扫码收款"、"聚合码"、"收银台"、"易宝收银台"、"托管收银台"、"cashierUrl"、"银行转账支付"、"对公转账收款"、"动态收款账号"、"动态附言"、"退款"、"分账"、"入账方"、 "结算"、"提现"、"对账单"、"氢钱包"、"记账簿"、"记账薄"、"预收款"、"来账通知"、"记账簿支付"、"放款"、"对公快捷"、"联合贷"、"信用卡还款"、"跨行还款"、"协议支付"、"代扣"、 "签约绑卡"、"一键绑卡"、"存量签约"、"绑卡id"、"批量支付"、"周期扣款"、"自动续费"、"保费代扣"、 "航旅易达"、"TSP"、"机票接口"、"NDC2C"、"NDC2B"、"NDC2T"、"航司B2B"、 "出票"、"退票"、"改签"、"验舱验价"、"电子行程单"、"机票开票"、"政策池",或提及南航、厦航、国航、东航、深航、山航、 昆航、港航等航司机票对接时,或咨询验签失败、回调收不到、查单、错误码排查、沙箱联调、上线检查等 问题时使用此 Skill。 涉及需要平台实时数据的排障时同样使用本 Skill,触发词包括"排障助手"、"接入诊断"、"实时诊断"、 "诊断凭证"、"通知没收到查一下"、"帮我查一下这笔"。

How do I install this agent skill?

npx skills add https://github.com/yeepay-open-platform/yeepay-skills --skill yeepay-payment-integration
view source ↗

Is this agent skill safe to install?

  • Gen Agent Trust Hubpass

    This skill is a vendor-provided toolkit for integrating with YeePay (易宝支付) services. It offers detailed documentation, product selection guidance, and Python-based local debugging tools for cryptographic operations (RSA and SM2). It also includes a remote diagnostic feature for troubleshooting with the YeePay agent service, which is implemented with strong security measures including mandatory user consent, strict data field whitelisting, and local redaction of PII and secrets before any data transmission. All behaviors and external references are consistent with legitimate financial service integration requirements.

  • Socketpass

    No alerts

  • Snykwarn

    Risk: MEDIUM · 1 issue

What does this agent skill do?

易宝支付接入技能(统一入口)

本技能是唯一入口:以商户可理解的语言协助选型、接入与排障;技术实现依赖 references/ 中的产品决策、场景流程与在线文档。

面客原则:先听懂商户在说什么、再确认要做什么、最后才给参数和代码。严禁在场景未明确时直接输出接口字段清单或示例代码。


面客交互纪律(最高优先级,所有对话遵守)

与商户沟通分四步,前一步未完成不得进入下一步。

快速通道(需求已明确时允许合并步骤):当用户已清晰给出场景(如「我用的微信小程序支付,要 Java 下单代码」),可将①②③合并为一次简短确认(复述场景 + 列出还缺的关键信息 + 告知将输出什么),用户确认后直接进入实现,无需逐条澄清。快速通道 ≠ 跳过易错点:合并面客步骤后,仍须按「技术执行顺序」步骤 2 完整阅读已锁定场景 md 的 ## 易错点(及该节引用的关联文档),再 curl doc_md 或生成代码。但以下安全底线在任何通道下都不可省略:①必须确认环境(沙箱/生产);②生产环境实际调用仍需④的显式二次确认;③输出接口字段/代码前仍须按「文档加载协议」curl doc_md,不得凭记忆编造字段;④缺失实现必需信息(场景、环境、SDK 与否)时仍要补齐;⑤生成参数/代码前必须完整阅读场景 md 的 ## 易错点(见技术执行顺序步骤 2)。场景仍不明确或仅说「接入易宝」时,不适用快速通道,回到逐步澄清。

① 明确需求

  • 先复述理解,给出初步判断(例如「听起来像小程序内收款」或「更像线下扫码枪收款」),可附 1~2 句原因分析。
  • 禁止一上来就堆参数清单、接口路径、代码块。
  • 需求模糊时,读 references/产品能力/产品决策.md 的「场景关键词匹配」与「标准澄清模板」,用商户能听懂的话追问,而不是技术枚举。

典型入口——商户仅说「要接入易宝支付」且未说明场景时:

  1. 先判断是新接入还是已有对接在排障(问一句即可)。
  2. 新接入:不得直接生成代码;须用 产品决策.md 模板 1(业务场景总澄清) 或按关键词命中情况选用模板 2~6,请商户描述具体业务(载体、线上/线下、谁扫谁)。
  3. 场景仍不明确时,只输出澄清问题,停止后续步骤。
  4. 场景明确后,用一句话告知推荐方案(如「您的情况适合小程序支付」),并说明为什么,仍不输出实现细节。

典型入口——商户描述具体现象(验签失败、回调收不到、退款卡住):

  1. 先归纳现象(环境、接口/产品、错误码或单号),引用 troubleshooting.md 的自查顺序;不要列出「可能原因 1~3 条」。
  2. 立刻进入下方「排障链路(L1 / L2)」。用户说「帮我查一下这笔 / 帮忙看看这笔」时走「直接索要平台事实」分流,不要先堆自查清单。
  3. 未连接平台实时数据时一律按 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: falseD1 即终答,不调远端,也不要劝商户去连排障服务
命中条目且 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。

  1. python scripts/diag/diag_env.py --env <SANDBOX|PRODUCT> —— 自检(不外发任何用户数据)。未通过不继续。
  2. 无 token 时先经纪律⑤确认(话术见上,不要引导去开放平台兑换),再引导 diag_auth.py --app-key <k> --private-key <私钥文件路径> --env <env>。只索要私钥文件路径(PEM 私钥文件,或商户已有的 yop_sdk_config*.json),商户粘贴私钥内容时提示已在本地丢弃。RSA 与 SM2 都支持,算法按密钥类型自动选,商户不需要声明。开放平台控制台不能签发这个 token。
  3. diag_session.py create --json <file> 提交现象与槽位;请求走文件,不走命令行参数。
  4. 返回 待补充信息 → 把 needInfos(或仅有 nextQuestion 时的文本)问给用户,一次性问全,等用户给出或确认后再 diag_session.py continue --session <id> --json <file>。禁止自己去工作区、.venv、demo 运行记录、本机日志、配置文件里翻一个 requestId / 单号填进去再 continue——翻到了也只能展示给用户问「是这笔吗」,用户点头之前视同未提供。
  5. 返回 已定位 / 暂未定位 → 按 D2 呈现;知识建议 → 按 D1 呈现并标注未查实时数据;转人工(含查无调用单、无有效证据、轮次耗尽)→ 立刻转人工:原样贴 conclusion(若有),说明平台侧已无法继续诊断,停止 continue、停止再收集时间窗/单号「再查一轮」,预览工单。用户若还要查,只能 create 起新会话,且须先确认有新的可查标识。
  6. 返回 诊断中 → 结果未就绪,不是失败。不要向用户提问、不要补槽、不要提单。立即 diag_session.py get --session <id>;仍为 诊断中 则间隔约 3 秒再 get,最多 10 次。超时仍为 诊断中 → 按远端未完成降级 D1,可预览工单,不要把空结论当已定位。
  7. 返回 已关闭 → 会话终态(≠ 转人工)。有 conclusion 则原样贴出并标明会话已关闭;无则说明会话已结束。禁止 continue / 禁止再补槽。不要自动建单。用户还要排查 → create 起新会话。
  8. 需要回看会话状态、已收集槽位、结论与证据时用 diag_session.py get --session <id>。
  9. 需要人工介入时:diag_ticket.py --session <id> --merchant-no <no> --title <一句话现象> --scene <会话返回的 playbookId 展示值,如 回调未收到> 先不带 --confirm,把预览内容完整展示给商户;商户明确同意后才加 --confirm 建单。playbookId 为空则不传 --scene。duplicated=true 时如实说「命中一天内去重,复用已有工单」,不要说成「已新建」。
  10. 工单需要附日志/报文时: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_mismatchstatus 与 layer 不自洽(如 已定位 却标 L1 知识建议)按较弱的一方呈现:标 L1 就当知识建议
empty_conclusion终态但 conclusion 为空说明服务端未给出结论,不要自行补写,转工单
bad_confidenceconfidence 不是 0~1 数值不呈现置信度徽标,其余照常
bad_*_typeevidence / 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丢弃响应,不呈现任何结论,转工单

技术执行顺序(商户已确认场景且同意继续后)

  1. 核对前提:对照 references/产品能力/产品决策.md 核对已确认的方案与收款主体(标准/平台/服务商);核对不通过(场景或主体仍有歧义)→ 退回面客纪律①②继续澄清,不进入后续步骤。
  2. 【强制】阅读场景 md 与易错点:先按下方「业务域路由」定位业务域(入网/收单/退款/分账/出款/对账/氢钱包/金融/航旅易达),收单再按「收单场景索引」锁定具体场景文件,航旅易达再按场景 md「渠道决策」锁定渠道;完整阅读 references/产品能力/<业务域>/<场景>.md 全文,其中 ## 易错点 章节为必读(及该节引用的关联文档,如 prePayTn唤起方式速查.md)。未完成本步禁止进入步骤 5(curl doc_md)及步骤 7(生成代码/参数表)。若映射不到任何业务域/场景(需求超出覆盖范围或仍有歧义)→ 用 产品决策.md 模板 7(超出产品能力范围) 回复或退回面客纪律①②澄清,不臆造场景路径。
  3. 写代码任务:按「写代码任务路由」确认 SDK 使用意愿,锁定 L1 / L2 / L2' 之一(L3 不在此步选择,见步骤 5~7)。
  4. 按路径与任务类型读平台文档(用 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)」。

  1. 在 references/产品能力/api-index.yaml 定位接口 doc_md(L3 起点;前置条件:步骤 2 易错点已读)。
  2. 生成或核对接口字段/错误码前,必须执行文档加载协议(curl doc_md)(L3 拉取;前置条件:步骤 2 易错点已读)。
  3. 依据 doc_md、步骤 2 易错点与所选 L1/L2 路径生成代码/参数表(遵守「示例代码节纪律(L3)」;参数取值须与易错点一致,冲突时以 doc_md 字段定义为准、易错点约束业务选型与组合)。
  4. 需要本地验证时,经④确认后先运行 python scripts/tools/check_python_env.py(Python ≥3.10 与依赖就绪);未通过则引导用户升级 Python / pip install -r scripts/requirements.txt,不得继续执行其他脚本。通过后再使用 scripts/(见 scripts/README.md)。
  5. 按「标准输出模板」回复。

文档加载协议(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/产品能力/入网/入网.mdmerchant-netin
实名认证/开户意愿确认/商户报备后认证references/产品能力/入网/实名认证.mdmerchant-netin
下单/小程序/APP/H5/主扫/被扫/收银台/银行转账/查单references/产品能力/收单/acquiring
退款/退款查询references/产品能力/退款/退款.mdrefund
分账/分账查询/资金归还/入账方references/产品能力/分账/profit-sharing
结算/提现/提现卡references/产品能力/出款/payout
对账/账单下载/差异处理references/产品能力/对账/reconciliation
氢钱包/记账簿/预收款/B2B 买家专属收款账号/来账通知/记账簿支付references/产品能力/氢钱包/氢钱包(记账簿).mdhydrogen-wallet
放款/联合贷/信用卡还款/协议支付/代扣/签约绑卡/批量支付references/产品能力/金融/financial
机票/出票/退票/改签/验舱验价/NDC/航旅易达/航司对接/电子行程单/机票开票references/产品能力/航旅易达/航旅易达.mdairline
验签失败/回调收不到/上线检查先读上方「排障链路(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 索引)

Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.

<a href="https://skillzs.dev/skills/yeepay-open-platform/yeepay-skills/yeepay-payment-integration">View yeepay-payment-integration on skillZs</a>