Multi Search Engine
一个面向 Research 场景的 Agent 技能。原始说明:Multi search engine integration with 16 engines (7 CN + 9 Global). Supports advanced search operators, time filters, site search, privacy engines, and Wolfra...
name: huifu-pay-integration
description: "汇付/斗拱接入最佳实践:聚合支付、托管支付、H5/PC 收银台、checkout-js、查单/关单/对账、退款、异步通知与 Webhook 验签、签名验签与来源头规则。覆盖栈:Java(dg-java-sdk、dg-lightning-sdk、TradePaymentCreateRequest)、PHP(huifurepo/dg-php-sdk、BsPaySdk、Payment::create)、Python(dg-sdk、dgsdk.Payment、V2TradeHostingPaymentPreorder、V2TradeCheckFilequery)、Browser/JS(@dg-elements/js-sdk、createPreOrder)。Use when user mentions: 汇付、斗拱、聚合支付、托管支付、checkout-js、H5/PC 收银台、扫码、付款码、原扫/正扫、微信/支付宝/银联、小程序、退款查询、关单、对账、异步通知、notifyurl、callbackurl、projectid、Webhook、jpt-x-skill-source、jpt-x-skill-huifuid、MerConfig、skillsource、HUIFUSYSID/PRODUCTID/RSAPRIVATEKEY/RSAPUBLIC_KEY、huifu pay/sdk、bspay、dougong。不覆盖需触发硬检查点的栈:Go、Rust、Node、.NET、Ruby、Kotlin、Scala、Swift、C++。"
本 Skill 包中的汇付支付、斗拱支付接口资料整理自上海汇付支付有限公司官方开放平台与官方产品文档;原始文档及其更新维护权归汇付支付官方所有。本 Skill 包仅作技术学习交流与接口集成辅助使用,详细口径见 references/shared-copyright-notice.md。
目标:只读取当前场景必须的 3-5 份本地文档;优先暴露缺口和能力边界,不拼凑看似完整但当前链路不支持的方案;PHP 一旦需要落代码,默认体现官方 dg-php-sdk 落地;Python 一旦需要落代码,默认体现官方 dg-sdk / dg_sdk 落地。
这段用于先让用户看懂“当前问题该走哪条接入路径”;实际执行时仍按下方 最少澄清规则、检查点机制、执行工作流 和 输出模板 裁决。
树中的 .md 文件默认都位于 references/ 目录。
汇付支付接入
├─ 还没确定产品线
│ └─ 先读 shared-overview.md,再判断聚合支付 / 托管支付 / checkout-js
├─ 聚合支付:服务端直接下单、扫码 / 付款码、小程序支付
│ ├─ 首次接入:aggregation-quickstart.md → aggregation-customer-preparation.md → aggregation-base.md
│ ├─ 下单:aggregation-order.md → 按渠道补 aggregation-order-method-*.md
│ ├─ 查询 / 关单 / 对账:aggregation-query.md
│ ├─ 退款 / 退款查询:aggregation-refund.md
│ ├─ PHP 落地:aggregation-php-adapter.md → aggregation-query-php-scenarios.md
│ └─ Python 落地:aggregation-python-adapter.md → aggregation-python-scenarios.md
├─ 托管支付:项目制预下单、H5 / PC 收银台、小程序预下单
│ ├─ 首次接入:hostingpay-quickstart.md → hostingpay-customer-preparation.md → hostingpay-base.md
│ ├─ 预下单:hostingpay-preorder.md → 按端形态补 hostingpay-preorder-*.md
│ ├─ 查询 / 关单 / 对账:hostingpay-query.md
│ ├─ 退款 / 退款查询:hostingpay-refund.md
│ ├─ PHP 落地:hostingpay-php-adapter.md → hostingpay-*-php-scenarios.md
│ └─ Python 落地:hostingpay-python-adapter.md → hostingpay-python-scenarios.md
├─ checkout-js:商户自有页面内嵌支付组件
│ ├─ 前置能力:必须已有托管预下单
│ ├─ 页面接入:checkout-js.md → checkout-js-readme.md
│ ├─ 预下单契约:checkout-js-create-preorder-contract.md
│ └─ 最终确认:checkout-js-callback-and-confirmation.md → hostingpay-query.md / hostingpay-async-webhook.md
└─ 高风险或缺口
├─ 要生产代码但缺真实参数:先补 project_id / notify_url / sys_id / 商户号等
├─ 当前技术栈没有模板:只给阅读路径,不现场编造模板
└─ 文档与 SDK 口径冲突:先触发硬检查点
*-quickstart.md 和 *-base.md,直接进入当前阶段文档hostingpay-preorder.md、hostingpay-query.md 列为本轮主阅读文档;只补 checkout-js 专题和 hostingpay-async-webhook.md只允许两类检查点:软检查点 和 硬检查点。
软检查点不等待用户回复,触发后直接继续给主路径。
触发条件:
*-quickstart.md、*-base.md 或已完成的主文档checkout-js 依赖托管预下单和最终结果确认闭环输出要求:
硬检查点必须等待用户确认后再继续。
只在以下情况触发:
dg-java-sdk / dg-lightning-sdk"作为首选回退;并保留"协议级阅读路径"作为备选shared-signing-v2.md + shared-request-header-policy.md + shared-webhook-signing.md + 对应业务接口的 *-request.md / *-response.md)作为首选回退;并保留"切到 Java / PHP / Python 任一主链路"作为备选checkout-js、只看前端回调、或只做页面集成,但是否已具备托管预下单和最终查单 / 异步通知闭环还不明确;即使用户要求“不用问”“直接给路线”“最省事”,也必须触发硬检查点project_id、notify_url、sys_id、渠道标识、商户号等关键真实值,继续输出会制造伪完整代码硬检查点输出要求:
硬检查点当前判断为什么不能直接继续checkout-js 先决能力未确认的硬检查点,不输出安装步骤、前端接法或文档阅读顺序以下情况不要触发硬检查点:
H5 / PC 收银台、project_id、checkout-js、createPreOrder、商户自有页面嵌入组件,默认先走托管支付H5 / PC 收银台 时,先按托管 onboarding 读准备链路:hostingpay-quickstart.md + hostingpay-customer-preparation.md;不要直接跳到 H5/PC 字段表checkout-js 且要求“支付完成后确认最终结果 / 最终确认 / 服务端确认”时,hostingpay-query.md 与 hostingpay-async-webhook.md 是并列必读;不要只列查单checkout-js 组件接入、callback 确认和异步通知,不要把既有查单主文档重新抬成主阅读顺序references/shared-overview.md硬检查点;如果触发,只输出检查点并等待用户确认软检查点references/*.md*-{lang}-adapter.md 与 *-{lang}-scenarios.md(PHP / Python 已覆盖;Java 直接读 *-java-adapter.md + *-java-sdk-quickstart.md + *-java-tech-spec.md)## Java SDK / 模板读取规则、## PHP SDK / 模板读取规则、## Python SDK / 模板读取规则;这些段落是语言特定的 SDK 入口、安装命令、版本核对、来源头规则与可运行代码强制项的唯一准绳shared-request-field-preservation.md,保证外部请求字段不被默认值覆盖。仅在需要核对来源头、签名、验签等协议级口径时,再追读 shared-request-header-policy.md 与 shared-signing-v2.md;控台 Webhook 验签场景再补 shared-webhook-signing.md,必要时再检查项目实际安装的官方 SDK 源码。协议级 shared-*.md 文档不计入第 7 步的 3-5 份配额下文提到的 .md 文件默认都位于 references/ 目录。
只在触发 硬检查点 时,按下面最短话术澄清:
请先确认你的接入目标:
1. 标准服务端支付接入,优先快速上线
2. 需要托管收银台、项目制预下单或更完整的托管支付闭环
3. 需要在商户自己的页面中嵌入 checkout 或支付按钮
请确认你当前要做的是哪一步:
1. 初始化 / 公共配置
2. 下单 / 预下单
3. 查询 / 关单 / 对账
4. 退款
5. 前端页面接入
6. 签名 / 异步通知 / 共享协议确认
请先分清当前问题属于哪一侧:
1. 服务端:配置凭据、下单、查询、退款、异步通知处理
2. 前端:渲染 checkout、支付按钮、接收前端流程回调
3. 闭环确认:即使前端返回成功,也仍需服务端查单或依赖异步通知确认最终状态
当前仓库没有这条组合的现成模板代码。
请确认你接下来要哪条路:
1. 切到当前受支持的主链路
2. 保持当前技术栈,只看协议级阅读路径
`checkout-js` 不能单独成立。
请先确认你的服务端是否已经具备:
1. 托管预下单
2. 最终查单或异步通知确认
当前还缺少可直接联调代码必需的真实参数。
请确认你要我继续哪一种:
1. 先补关键真实值,再按生产口径继续
2. 先只看阅读顺序和待补参数清单
| 组合 | 当前结论 | 正确处理方式 |
| --- | --- | --- |
| 聚合支付 + Java + 下单 / 查询 / 关单 / 退款 / 对账 | 已支持官方 Java SDK 主链路 | 先读 aggregation-java-adapter.md 与 aggregation-java-sdk-quickstart.md;版本与字段口径以 aggregation-java-tech-spec.md 为准;优先官方 dg-lightning-sdk request 类,不要回到自维护 client |
| 托管支付 + Java + 预下单 / 查询 / 关单 / 退款 / 对账 | 已支持官方 Java SDK 主链路 | 先读 hostingpay-java-adapter.md 与 hostingpay-java-sdk-quickstart.md;版本与字段口径以 hostingpay-java-tech-spec.md 为准;优先官方 dg-java-sdk request 类,不要回到手写 HTTP |
| Java + 当前已支持场景 + 用户要代码 | 必须体现官方 Java SDK 落地 | 不要默认生成自维护 HostingClient、AggregationClient 或手写 HttpClient / OkHttp 版本;MerConfig.setSkillSource(...) 后由官方 SDK 自动补来源头 |
| 聚合支付 + PHP + 下单 | 已支持官方 PHP SDK 主链路 | 先读 aggregation-php-adapter.md 与 aggregation-query-php-scenarios.md;优先 Payment::create() + TradePaymentCreateRequest |
| 聚合支付 + PHP + 交易查询 / 关单 / 关单查询 | 已支持官方 PHP SDK 主链路 | 交易查询优先 Payment::query();关单 / 关单查询优先 Payment::close() / closeQuery();原交易定位键必须来自落库结果 |
| 聚合支付 + PHP + 退款 / 退款查询 | 已支持官方 PHP SDK 主链路 | 优先 Payment::refund() / refundQuery();退款最终状态仍以查询或异步通知为准 |
| 聚合支付 + PHP + 对账 | 已支持官方 request 类路径 | 走 BsPayClient::postRequest() + V2TradeCheckFilequeryRequest |
| PHP + 当前已支持场景 + 用户要代码 | 必须体现官方 phpsdk 落地 | 聚合支付核心主链路优先 BsPaySdk\core\Payment;聚合对账与托管支付优先 BsPayClient::postRequest();不要默认生成 HostingClient、AggregationClient 或自写 curl 版本 |
| 聚合支付 + Python + 下单 / 查询 / 关单 / 关单查询 | 已支持官方 Python SDK 主链路 | 先读 aggregation-python-adapter.md 与 aggregation-python-scenarios.md;优先 dg_sdk.Payment + Payment*Request |
| 聚合支付 + Python + 退款 / 退款查询 | 已支持官方 Python SDK 主链路 | 优先 dg_sdk.Payment.refund() / refund_query();退款最终状态仍以查询或异步通知为准 |
| 聚合支付 + Python + 对账 | 已支持官方 request 类路径 | 走 V2TradeCheckFilequeryRequest().post({}) |
| 托管支付 + Python + 预下单 / 查询 / 关单 / 退款 / 对账 | 已支持官方 request 类路径 | 先读 hostingpay-python-adapter.md 与 hostingpay-python-scenarios.md;使用 V2TradeHostingPayment*Request 和 V2TradeCheckFilequeryRequest |
| Python + 当前已支持场景 + 用户要代码 | 必须体现官方 Python SDK 落地 | 不要默认生成自维护 HostingClient、AggregationClient 或手写 requests 版本 |
| Python + 来源头 | SDK 可带来源头,并从最终请求 data.huifu_id 推导 jpt-x-skill-huifu_id | 初始化必须配置 MerConfig.jpt_x_skill_source;每次请求对象仍必须设置本次真实 huifu_id |
| 不支持组合 + 用户要求现成模板代码 | 不允许现场补自造模板 | 固定输出“当前仓库无现成模板代码”,并停止在阅读路径、支持边界和缺失参数层 |
| checkout-js 单独使用 | 不成立 | 必须先有 hostingpay-preorder 服务端能力,最终状态还要回到 hostingpay-query |
| 非官方 Java SDK 自动补头以外的服务端调用 | 需要手动补头 | 必须额外读取 shared-request-header-policy.md |
当当前组合不支持,且用户要求“现成模板代码”“直接给代码”“按当前技术栈落地”时,固定按下面 4 句处理:
现成模板代码结论:当前仓库无按顺序读取:
references/shared-overview.mdaggregation-quickstart.mdaggregation-customer-preparation.mdaggregation-base.mdaggregation-payload-construction.md按顺序读取:
references/shared-overview.mdhostingpay-quickstart.mdhostingpay-customer-preparation.mdhostingpay-base.mdhostingpay-payload-construction.md按顺序读取:
references/shared-overview.mdhostingpay-quickstart.mdhostingpay-preorder.mdcheckout-js.mdhostingpay-query.md| 阶段 | 聚合支付 | 托管支付 | checkout |
| --- | --- | --- | --- |
| 初始化 / 公共配置 | aggregation-base.md | hostingpay-base.md | 先回到 hostingpay-preorder.md |
| 下单 / 预下单 | aggregation-order.md | hostingpay-preorder.md | hostingpay-preorder.md |
| 查询 / 关单 / 对账 | aggregation-query.md | hostingpay-query.md | 最终确认同时读 hostingpay-query.md + hostingpay-async-webhook.md |
| 退款 | aggregation-refund.md | hostingpay-refund.md | 不单独成立,仍是服务端退款 |
| 前端支付组件 | 不适用 | 可协同 checkout-js.md | checkout-js.md;若已完成托管预下单和查单,补 checkout-js-callback-and-confirmation.md + hostingpay-async-webhook.md |
| 技术栈 | 聚合支付 | 托管支付 | checkout |
| --- | --- | --- | --- |
| Java | aggregation-java-adapter.md、aggregation-java-sdk-quickstart.md、aggregation-java-tech-spec.md | hostingpay-java-adapter.md、hostingpay-java-sdk-quickstart.md、hostingpay-java-tech-spec.md | 服务端仍走托管 Java,前端再接 checkout-js.md |
| PHP | aggregation-php-adapter.md + aggregation-query-php-scenarios.md 已覆盖下单、扫码交易查询、关单 / 关单查询、退款 / 退款查询、对账;核心支付主链路优先 BsPaySdk\core\Payment,对账走 BsPayClient::postRequest(),且代码必须体现官方 dg-php-sdk | hostingpay-php-adapter.md、hostingpay-preorder-php-scenarios.md、hostingpay-query-php-scenarios.md、hostingpay-refund-php-scenarios.md,且代码必须体现官方 dg-php-sdk | 服务端 PHP 先读托管预下单,再读 checkout-js.md |
| Python | aggregation-python-adapter.md + aggregation-python-scenarios.md 已覆盖下单、扫码交易查询、关单 / 关单查询、退款 / 退款查询、对账;核心支付主链路优先 dg_sdk.Payment,对账走 V2TradeCheckFilequeryRequest().post({}),且代码必须体现官方 dg-sdk | hostingpay-python-adapter.md、hostingpay-python-scenarios.md,且代码必须体现官方 dg-sdk | 服务端 Python 先读托管预下单,再读 checkout-js.md |
| Browser / JS | 不直接承担聚合服务端职责 | 商户页面配合托管服务端能力 | shared-frontend-sdk-matrix.md、checkout-js.md、checkout-js-readme.md |
| 用户表达 | 判断结果 | 优先文档 |
| --- | --- | --- |
| “第一次接汇付,不知道走哪条线” | 先做产品线判断 | references/shared-overview.md + 对应 *-quickstart.md + 对应 *-customer-preparation.md |
| “我要做聚合微信小程序支付,Java” | 聚合支付 + 下单 + Java + 微信小程序 | aggregation-base.md、aggregation-order.md、aggregation-order-method-wechat.md |
| “我要做支付宝正扫” | 聚合支付 + 下单 + 渠道细分 | aggregation-order.md、aggregation-order-method-alipay.md |
| “我要做托管微信小程序预下单” | 托管支付 + 预下单 + 微信小程序 | hostingpay-preorder.md、hostingpay-preorder-wechat-mini.md、hostingpay-query.md |
| “我要做 H5 / PC 收银台” | 托管支付 + H5/PC 预下单 | hostingpay-preorder.md、hostingpay-preorder-h5-pc.md、hostingpay-query.md |
| “我要接 checkout-js” | checkout + 托管预下单协同 | hostingpay-preorder.md、checkout-js.md、checkout-js-callback-and-confirmation.md、hostingpay-query.md、hostingpay-async-webhook.md |
| “我要接 checkout-js 并确认最终结果” | checkout + 最终确认闭环 | checkout-js-integration-flow.md、checkout-js-callback-and-confirmation.md、hostingpay-query.md、hostingpay-async-webhook.md |
| “已完成托管预下单和查单,现在只接 checkout-js” | checkout 组件专题 + 复用既有服务端确认链路 | checkout-js-integration-flow.md、checkout-js.md、checkout-js-create-preorder-contract.md、checkout-js-callback-and-confirmation.md、hostingpay-async-webhook.md |
| “我要查单 / 关单 / 对账” | 查询链路 | aggregation-query.md 或 hostingpay-query.md,按产品线选一条 |
| “我要退款” | 退款链路 | aggregation-refund.md 或 hostingpay-refund.md,按产品线选一条 |
| “原交易既有分账又有补贴,退款字段怎么传” | 聚合支付 + 退款字段口径 | aggregation-refund.md、aggregation-refund-query.md |
| “托管支付退款字段、loanflag、riskcheckdata、bankinfo_data” | 托管支付 + 退款字段口径 | hostingpay-refund.md、hostingpay-refund-query.md |
shared-overview.md、hostingpay-quickstart.md、hostingpay-customer-preparation.md。checkout-js 且用户要求支付完成后确认最终结果时,实际读取和最终回答都必须包含 checkout-js-callback-and-confirmation.md、hostingpay-query.md、hostingpay-async-webhook.md,并明确前端 callback 不等于最终支付成功;不得只写服务端查单确认,必须写异步通知闭环。loan_flag、risk_check_data、bank_info_data 时,实际读取和最终回答都必须包含 hostingpay-refund-query.md。terminal_device_data.device_type=4 时,最终回答必须显式写明:请求侧不传 tx_metadata 包装层,而是直接传 acct_split_bunch、combinedpay_data 和 terminal_device_data.device_type=4。req_date、req_seq_id、hf_seq_id。req_seq_id 被重写或 req_date 被重写时,最终回答必须保留 req_seq_id、req_date 原始字段名,并逐字包含:外部 DTO / Controller 已接收字段必须保留入参或原样映射;缺失或非法时显式报错;不能用当前日期、随机流水号、环境变量或示例默认值覆盖。skill_source / MerConfig.skill_source,并说明官方 SDK 在配置后自动补 jpt-x-skill-source 和 jpt-x-skill-huifu_id;不能只写 require_once loader.php 后省略来源头配置结论。init.php 和 request 类必须使用 require_once,不要改成 require。下表用于在 5 个标签判断后落到唯一文档分支;命中表内任意一行后,可直接进入对应文档,不再回到路由树。
| 意图关键词 | 命中产品线 / 阶段 | 主文档 | 配套文档 |
| --- | --- | --- | --- |
| 微信公众号 / 微信 JSAPI / T_JSAPI | 聚合支付 + 下单 + 微信 | aggregation-order-method-wechat.md | aggregation-order.md、aggregation-order-request.md |
| 微信小程序 / T_MINIAPP / sub_appid / sub_openid | 聚合支付 + 下单 + 微信小程序 | aggregation-order-method-wechat.md | aggregation-order-tx-metadata.md |
| 微信付款码 / 微信反扫 / T_MICROPAY / auth_code | 聚合支付 + 下单 + 微信付款码 | aggregation-order-method-wechat.md | aggregation-order-errors.md |
| 支付宝 JS / A_JSAPI / buyer_id / buyer_logon_id | 聚合支付 + 下单 + 支付宝 JS | aggregation-order-method-alipay.md | aggregation-order-tx-metadata.md |
| 支付宝正扫 / A_NATIVE | 聚合支付 + 下单 + 支付宝正扫 | aggregation-order-method-alipay.md | aggregation-order.md |
| 支付宝付款码 / 支付宝反扫 / A_MICROPAY | 聚合支付 + 下单 + 支付宝付款码 | aggregation-order-method-alipay.md | aggregation-order-errors.md |
| 银联 JS / U_JSAPI | 聚合支付 + 下单 + 银联 JS | aggregation-order-method-unionpay.md | aggregation-order.md |
| 银联正扫 / U_NATIVE | 聚合支付 + 下单 + 银联正扫 | aggregation-order-method-unionpay.md | — |
| 银联付款码 / U_MICROPAY | 聚合支付 + 下单 + 银联付款码 | aggregation-order-method-unionpay.md | aggregation-order-errors.md |
| 聚合扫码交易查询 / out_ord_id / hf_seq_id | 聚合支付 + 查询 | aggregation-query-payment-query.md | aggregation-query.md |
| 聚合扫码关单 | 聚合支付 + 关单 | aggregation-query-trade-close.md | aggregation-query.md |
| 聚合扫码关单查询 | 聚合支付 + 关单查询 | aggregation-query-close-query.md | aggregation-query.md |
| 聚合扫码退款 | 聚合支付 + 退款 | aggregation-refund.md | aggregation-refund-quickstart.md |
| 聚合扫码退款查询 | 聚合支付 + 退款查询 | aggregation-refund-query.md | aggregation-refund.md |
| 托管 H5 收银台 / pre_order_type=H / jump_url | 托管支付 + 预下单 + H5/PC | hostingpay-preorder-h5-pc.md | hostingpay-preorder-h5-pc-request.md、hostingpay-preorder-h5-pc-response.md、hostingpay-preorder-h5-pc-channel.md、hostingpay-preorder-h5-pc-errors.md |
| 托管 PC 收银台 | 托管支付 + 预下单 + H5/PC | hostingpay-preorder-h5-pc.md | hostingpay-preorder-h5-pc-request.md、hostingpay-preorder-h5-pc-response.md |
| 托管微信小程序预下单 / pre_order_type=W / miniapp_data | 托管支付 + 预下单 + 微信小程序 | hostingpay-preorder-wechat-mini.md | hostingpay-preorder.md |
| 托管支付宝小程序预下单 / pre_order_type=A / app_data | 托管支付 + 预下单 + 支付宝小程序 | hostingpay-preorder-alipay-mini.md | hostingpay-preorder.md |
| 托管交易查询 / org_req_seq_id 查单 | 托管支付 + 查询 | hostingpay-query-payment-status-query.md | hostingpay-query.md |
| 托管交易关单 | 托管支付 + 关单 | hostingpay-query-trade-close.md | hostingpay-query.md |
| 托管交易退款 / htRefund / risk_check_data / bank_info_data | 托管支付 + 退款 | hostingpay-refund.md | hostingpay-refund-query.md、hostingpay-refund-quickstart.md |
| 托管交易退款查询 | 托管支付 + 退款查询 | hostingpay-refund-query.md | hostingpay-refund.md |
| 对账文件 / 对账单 / V2TradeCheckFilequery / bill_type | 通用 + 对账 | aggregation-query-reconciliation.md 或 hostingpay-query-reconciliation.md | 视产品线选一条 |
| 异步通知 / notify_url / 接口异步签名 | 通用 + 异步消息 | shared-async-notify.md | shared-signing-v2.md |
| 控台 Webhook / webhook / 验签 | 通用 + Webhook | shared-webhook-signing.md | shared-async-notify.md |
| 接口加签 / 验签 / RSA / sign | 通用 + 协议级 | shared-signing-v2.md | — |
| 来源头 / jpt-x-skill-source / jpt-x-skill-huifu_id / skill_source | 通用 + 协议级 | shared-request-header-policy.md | — |
| 字段保留 / 入参被覆盖 / req_seq_id 被重写 / req_date 被重写 | 通用 + 代码生成约束 | shared-request-field-preservation.md | 对应产品线 payload 文档 |
| 凭据 / 公私钥 / HUIFU_RSA_PRIVATE_KEY / HUIFU_RSA_PUBLIC_KEY | 通用 + 准备 | shared-credential-boundary.md | aggregation-customer-preparation.md 或 hostingpay-customer-preparation.md |
| checkout-js 接入 / createPreOrder / @dg-elements/js-sdk | 前端 + checkout 组件 | checkout-js.md | checkout-js-readme.md、checkout-js-create-preorder-contract.md、checkout-js-callback-and-confirmation.md |
| 前端 SDK 矩阵 / 浏览器端能力对照 | 前端 + 选型 | shared-frontend-sdk-matrix.md | — |
| 错误码 / resp_code / bank_message 排查 | 通用 + 排错 | aggregation-error-codes.md 或 hostingpay-error-codes.md | 视产品线选一条 |
| FAQ / 常见问题 / 卡 case 排查 | 通用 + FAQ | aggregation-faq.md 或 hostingpay-faq.md | 视产品线选一条 |
dg-java-sdk(Maven group/artifact 见 aggregation-java-tech-spec.md),聚合支付主链路用 dg-lightning-sdk;不要回到自维护 HostingClient、AggregationClient 或手写 HttpClient / OkHttpdg-java-sdk 3.0.37,聚合支付 SDK 为 dg-lightning-sdk 1.0.5;如果项目锁定版本不一致,必须先核对 AbstractRequest.SDK_VERSION 常量(托管:com.huifu.bspay.sdk.opps.core.net.AbstractRequest.SDK_VERSION;聚合:com.huifu.dg.lightning.biz.net.AbstractRequest.SDK_VERSION),不要在未知版本上继续生成新字段或新接口代码MerConfig.setSkillSource(...);官方 SDK 在配置后自动补 HTTP 请求头 jpt-x-skill-source,并在请求 data.huifu_id 存在且非空时自动补 jpt-x-skill-huifu_id;这两项必须明确称为 HTTP 请求头,不是 data 业务字段MerConfig 历史拼写为 procutId,对应 setter 是 setProcutId(...);不要"修正"成 setProductId(...),否则会破坏现有 Java 客户编译。dg-lightning-sdk 是常规拼写 setProductId(...),两套 Java SDK 互不兼容HUIFU_SYS_ID、HUIFU_PRODUCT_ID、HUIFU_RSA_PRIVATE_KEY、HUIFU_RSA_PUBLIC_KEY、HUIFU_SKILL_SOURCE、HUIFU_MERCHANT_ID 等环境变量准备;HUIFU_RSA_* 不允许写死在源码或公开仓库req_date、req_seq_id、hf_seq_idhuifurepo/dg-php-sdkhuifurepo/dg-php-sdk 2.0.27;如果用户现有项目低于该版本,必须先提示调整 composer.json 版本约束并升级 SDK,不要在旧 SDK 上继续生成新字段或新接口代码BsPaySdk\core\Payment + 官方 request 类;聚合对账与托管支付优先 BsPayClient::postRequest() + request 类composer require "huifurepo/dg-php-sdk:^2.0.27"、composer update huifurepo/dg-php-sdk --with-all-dependencies、vendor/huifurepo/dg-php-sdk/BsPaySdk/init.php 存在性检查,以及 HUIFU_SYS_ID、HUIFU_PRODUCT_ID、HUIFU_RSA_PRIVATE_KEY、HUIFU_RSA_PUBLIC_KEY、HUIFU_SKILL_SOURCE、HUIFU_MERCHANT_ID 等环境变量准备HUIFU_SDK_ROOT 且校验 init.php;不要把官方 SDK 文档里可访问的旧版本 OSS 包当作当前版本替代品composer update huifurepo/dg-php-sdk --with-all-dependencies 和当前基线备用下载地址 https://api.github.com/repos/huifurepo/bspay-php-sdk/zipball/refs/tags/2.0.27loader.php 初始化模板,显式加载 BsPaySdk/init.php、调用 BsPay::init(...),并定义 HUIFU_SDK_ROOT 供业务代码显式加载 request 类init.php 和 request 类必须使用 require_once,不要改成 requireskill_source / MerConfig.skill_source,并说明官方 SDK 在配置后自动补 jpt-x-skill-source,请求参数存在非空 huifu_id 时自动补 jpt-x-skill-huifu_id;这两项必须明确称为 HTTP 请求头,不是 data 业务字段req_date、req_seq_id、hf_seq_idBsPay::post(funcCode, ...) 散落在业务层HostingClient、AggregationClient 或自写 curl 的业务代码shared-request-header-policy.mddg-sdk,import 名为 dg_sdkdg-sdk 2.0.21;如果项目安装版本不一致,必须先运行 python3 -c "import dg_sdk; print(dg_sdk.DGClient.__version__)" 核对,不要在未知版本上继续生成新字段或新接口代码dg_sdk.Payment + Payment*Request;聚合对账与托管支付优先 SDK request 类 .post({})python3 -m pip install "dg-sdk==2.0.21"、import/version 检查,以及 Python adapter 文档里的生产环境变量清单;安装或版本核对失败时显式报错并停止,不要无版本安装或降级MerConfig(private_key, public_key, sys_id, product_id, jpt_x_skill_source);jpt_x_skill_source 最终成为 HTTP 请求头 jpt-x-skill-source,不是 data 业务字段huifu_id 自动生成 HTTP 请求头 jpt-x-skill-huifu_id;多商户或代调用场景不需要重置 MerConfig 的 huifu 头字段,但必须确保每次 request 对象的 huifu_id 是本次真实商户号req_date、req_seq_id、hf_seq_id输出时固定按下面结构组织:
检查点硬检查点;写清当前判断、阻塞原因和唯一确认问题;未确认前禁止输出完整阅读顺序、代码骨架、技术栈切换方案、checkout-js 安装步骤判断结果现成模板代码结论:当前仓库无先读这些*-request.md / *-response.md / *-channel.md / *-errors.md)按需追加,不计入 3-5 份配额;执行工作流第 8c 步指出的共享约束文档(shared-request-field-preservation.md / shared-signing-v2.md / shared-request-header-policy.md / shared-webhook-signing.md / shared-async-notify.md / shared-credential-boundary.md)同样不计入配额暂时不要读还缺的真实参数 / 前置动作禁止动作(每条都要按当前回答情况显式确认或省略,不允许整段静默)HUIFU_RSA_PRIVATE_KEY、HUIFU_RSA_PUBLIC_KEY 写入前端、仓库、示例常量或日志project_id、callback_url、notify_url、sub_openid、buyer_id、buyer_logon_id、auth_code、devs_id、fee_sign、req_seq_id、hf_seq_id、org_req_seq_id 等运行时值req_date、req_seq_id、金额、商户号、项目号、通知地址或原交易定位键jpt-x-skill-source、jpt-x-skill-huifu_id 当成 data 业务字段;它们必须是 HTTP 请求头HostingClient / AggregationClient / 自写 curl / 自写 requests / 自写 OkHttp 这些非官方自维护 client 路径| 项目 | 当前口径 | 安装 / 引入 | 版本核对入口 |
| --- | --- | --- | --- |
| Skill 包版本 | 1.2.2 | — | — |
| 托管支付 Java SDK | dg-java-sdk 3.0.37 | Maven 引入 dg-java-sdk:3.0.37 | com.huifu.bspay.sdk.opps.core.net.AbstractRequest.SDK_VERSION 常量 |
| 聚合支付 Java SDK | dg-lightning-sdk 1.0.5 | Maven 引入 dg-lightning-sdk:1.0.5 | com.huifu.dg.lightning.biz.net.AbstractRequest.SDK_VERSION 常量 |
| PHP SDK | huifurepo/dg-php-sdk 2.0.27,命名空间 BsPaySdk | composer require "huifurepo/dg-php-sdk:^2.0.27";fallback:https://api.github.com/repos/huifurepo/bspay-php-sdk/zipball/refs/tags/2.0.27 | vendor/huifurepo/dg-php-sdk/BsPaySdk/init.php 中 SDK_VERSION 常量 |
| Python SDK | dg-sdk 2.0.21,import 名 dg_sdk | python3 -m pip install "dg-sdk==2.0.21" | python3 -c "import dg_sdk; print(dg_sdk.DGClient.__version__)" |
| 前端收银台 JS SDK | @dg-elements/js-sdk 当前 Skill 包基线 1.x;接入时以项目锁定版本为准,升级前查询 npm registry | npm install @dg-elements/js-sdk 或 <script> 直接引用 | package.json 锁定版本 / npm view @dg-elements/js-sdk version |
| HUIFU_SKILL_SOURCE 最终上送格式 | <skill_source>,原样透传,不再追加 sys_id | — | — |
project_id、callback_url、notify_url、sub_openid、buyer_id、buyer_logon_id、auth_code、devs_id、fee_sign 等运行时值req_date、req_seq_id、金额、商户号、项目号、通知地址或原交易定位键,生成代码时必须保留入参或原样映射;缺失或非法时显式报错,不要静默生成默认值覆盖HUIFU_RSA_PRIVATE_KEY、HUIFU_RSA_PUBLIC_KEY 写入前端、仓库或示例常量HUIFU_SKILL_SOURCE 如果存在,最终上送值保持 <skill_source> 原样透传,不再追加 sys_idjpt-x-skill-source;如果请求 data.huifu_id 存在且非空,还要额外带 HTTP 请求头 jpt-x-skill-huifu_idMerConfig.setSkillSource(...) 生效后自动补来源头;当前 Skill 包对齐的官方 PHP SDK 主链路也会在 MerConfig.skill_source 已配置时,自动补 jpt-x-skill-source,并在请求参数里的 huifu_id 存在且非空时自动补 jpt-x-skill-huifu_idhuifurepo/dg-php-sdk 落地;当前 Skill 包不再内置 PHP 模板资产或非官方自维护 clientrequire_once 或空 loader.php;必须包含 SDK 安装、init.php 存在性检查和环境变量缺失时报错init.php 外,业务代码仍要通过 HUIFU_SDK_ROOT 显式加载所需 request 类dg-sdk 2.0.21 会从最终请求 data.huifu_id 自动推导 jpt-x-skill-huifu_id;不要在 MerConfig 中传固定 huifu 头字段,也不要把 jpt-x-skill-huifu_id 写入业务 data