Install
openclaw skills install huifu-pay-integration汇付支付斗拱产品接入最佳实践。涵盖聚合支付、托管支付、H5/PC 收银台、checkout-js、查单关单、退款对账等场景的产品选型与集成指导。
openclaw skills install huifu-pay-integration本 Skill 包中的汇付支付、斗拱支付接口资料整理自上海汇付支付有限公司官方开放平台与官方产品文档;原始文档及其更新维护权归汇付支付官方所有。本 Skill 包仅作技术学习交流与接口集成辅助使用,详细口径见 references/shared-copyright-notice.md。
目标:只读取当前场景必须的 3-5 份本地文档;优先暴露缺口和能力边界,不拼凑看似完整但当前链路不支持的方案;PHP 一旦需要落代码,默认体现官方 dg-php-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
├─ 托管支付:项目制预下单、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
├─ 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 依赖托管预下单和最终结果确认闭环输出要求:
硬检查点必须等待用户确认后再继续。
只在以下情况触发:
checkout-js、只看前端回调、或只做页面集成,但是否已具备托管预下单和最终查单 / 异步通知闭环还不明确;即使用户要求“不用问”“直接给路线”“最省事”,也必须触发硬检查点project_id、notify_url、sys_id、渠道标识、商户号等关键真实值,继续输出会制造伪完整代码硬检查点输出要求:
硬检查点当前判断为什么不能直接继续checkout-js 先决能力未确认的硬检查点,不输出安装步骤、前端接法或文档阅读顺序以下情况不要触发硬检查点:
H5 / PC 收银台、project_id、checkout-js、createPreOrder、商户自有页面嵌入组件,默认先走托管支付checkout-js 组件接入、callback 确认和异步通知,不要把既有查单主文档重新抬成主阅读顺序references/shared-overview.md硬检查点;如果触发,只输出检查点并等待用户确认软检查点references/*.md*-php-adapter.md 和 *-php-scenarios.md;聚合支付核心主链路优先以官方 huifurepo/dg-php-sdk 的 BsPaySdk\core\Payment 落地,对账和托管支付优先 BsPayClient::postRequest();需要核对来源头或签名口径时,读取 shared-request-header-policy.md 与 shared-signing-v2.md,如果是控台 Webhook 验签再补 shared-webhook-signing.md,必要时再检查项目实际安装的官方 SDK 源码下文提到的 .md 文件默认都位于 references/ 目录。
只在触发 硬检查点 时,按下面最短话术澄清:
请先确认你的接入目标:
1. 标准服务端支付接入,优先快速上线
2. 需要托管收银台、项目制预下单或更完整的托管支付闭环
3. 需要在商户自己的页面中嵌入 checkout 或支付按钮
请确认你当前要做的是哪一步:
1. 初始化 / 公共配置
2. 下单 / 预下单
3. 查询 / 关单 / 对账
4. 退款
5. 前端页面接入
6. 签名 / 异步通知 / 共享协议确认
请先分清当前问题属于哪一侧:
1. 服务端:配置凭据、下单、查询、退款、异步通知处理
2. 前端:渲染 checkout、支付按钮、接收前端流程回调
3. 闭环确认:即使前端返回成功,也仍需服务端查单或依赖异步通知确认最终状态
当前仓库没有这条组合的现成模板代码。
请确认你接下来要哪条路:
1. 切到当前受支持的主链路
2. 保持当前技术栈,只看协议级阅读路径
`checkout-js` 不能单独成立。
请先确认你的服务端是否已经具备:
1. 托管预下单
2. 最终查单或异步通知确认
当前还缺少可直接联调代码必需的真实参数。
请确认你要我继续哪一种:
1. 先补关键真实值,再按生产口径继续
2. 先只看阅读顺序和待补参数清单
| 组合 | 当前结论 | 正确处理方式 |
|---|---|---|
| 聚合支付 + 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 版本 |
| 不支持组合 + 用户要求现成模板代码 | 不允许现场补自造模板 | 固定输出“当前仓库无现成模板代码”,并停止在阅读路径、支持边界和缺失参数层 |
| 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 |
| 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 |
| “托管支付退款字段、loan_flag、risk_check_data、bank_info_data” | 托管支付 + 退款字段口径 | hostingpay-refund.md、hostingpay-refund-query.md |
huifurepo/dg-php-sdkhuifurepo/dg-php-sdk 2.0.26;如果用户现有项目低于该版本,必须先提示调整 composer.json 版本约束并升级 SDK,不要在旧 SDK 上继续生成新字段或新接口代码BsPaySdk\core\Payment + 官方 request 类;聚合对账与托管支付优先 BsPayClient::postRequest() + request 类composer require "huifurepo/dg-php-sdk:^2.0.26"、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/cc7bf93d0e77230097efdd610996d237e4a26298loader.php 初始化模板,显式加载 BsPaySdk/init.php、调用 BsPay::init(...),并定义 HUIFU_SDK_ROOT 供业务代码显式加载 request 类skill_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.md输出时固定按下面结构组织:
检查点
判断结果
现成模板代码结论:当前仓库无先读这些
暂时不要读
还缺的真实参数 / 前置动作
禁止动作
| 项目 | 当前口径 |
|---|---|
| Skill 包版本 | 1.2.0 |
| 托管支付 Java SDK 常量版本 | dg-java-sdk 3.0.36 |
| 聚合支付 Java SDK 版本 | dg-lightning-sdk 1.0.5 |
| 前端收银台 JS SDK | @dg-elements/js-sdk,接入时以项目锁定版本为准,升级前查询 npm registry |
HUIFU_SKILL_SOURCE 最终上送格式 | <skill_source> |
project_id、callback_url、notify_url、sub_openid、buyer_id、buyer_logon_id、auth_code、devs_id、fee_sign 等运行时值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 类