中国道商户接入中心

把 SDK 接入、OpenAPI 文档、订单流程、资金安全和回调说明合并到一个入口。普通商户优先用 SDK;技术型商户/系统服务端可使用 OpenAPI;两者底层共用同一套价格、授权、资金与订单中转体系。

1. 接口定位

推荐

SDK 接入

适合大部分商户。商户嵌入 SDK 页面/组件,SDK 负责商品展示、下单参数收集和部分体验封装。测试联调请登录商户后台操作。

面向:商户前端 + 商户后台配置

高级

OpenAPI 接入

适合有自研后端能力的商户或系统级合作方。使用 AppId/AppSecret/HMAC 签名调用商品、余额、下单、查单接口。

面向:商户服务端/合作方系统

结论:这些接口是“对授权商户开放的外部能力”,但不是给普通 C 端用户裸调。C 端用户在商户页面付款,商户确认收款后再通过 SDK/OpenAPI 通知平台履约。联调测试统一放在商户后台,避免公开文档暴露测试工具。

2. 完整业务流程

渠道商成本价我方同步商品/价格平台基准结算价授权商户商户零售价用户支付给商户商户调用 SDK/OpenAPI平台校验授权/价格/余额冻结预存款服务履约/充值成功确认扣款/失败解冻回调商户用户端展示结果

资金安全 当前测试环境已经采用冻结/确认/解冻机制,不再直接扣款后再履约。

价格体系与调价规则

平台采用三层价格治理,商户端展示和下单金额必须以平台后端快照为准,不能相信前端裸传金额。

三层价格

  1. 服务成本价:平台向权益供应商采购/结算的底价,仅平台内部可见。
  2. 平台基准结算价:平台给商户的默认结算价,必须大于等于服务成本价,是平台毛利底线。
  3. 商户零售价:商户展示给用户并向用户收款的价格,必须大于等于商户结算价。

价格安全底线

  • 平台基准结算价 >= 服务成本价。
  • 商户结算价 >= 平台基准结算价。
  • 用户支付价/商户零售价 >= 商户结算价。
  • 发现倒挂、空价格、过期报价时,平台会拒单或回退到安全建议价。

价格模式

模式适用场景下单要求
固定价 fixed话费、会员、洗车、洁牙、标准权益券等按后台授权价格下单,前端金额仅展示,后端重算。
动态锁价 quote餐饮、商超、酒店、景区、电影、票务等价格波动或SKU组合类先由平台后端查询真实商品并生成 quoteId,再用 quoteId 创建订单;quoteId短期有效。
实时/H5价 h5打车、外跳H5、展码付、第三方收银等实时场景用户在实时页面完成选品/支付,平台按回调和订单快照核验。

商户调价边界

  • 商户可在平台授权范围内设置零售价、建议价、最低价、最高价。
  • 低于结算价的零售价不允许保存;已存在历史倒挂数据会被治理脚本拉回安全价。
  • 动态价产品不允许商户自行填写最终履约价,必须使用 quoteId 或平台实时价格快照。
  • 建议零售价默认按平台基准结算价加合理毛利生成,后续可按商户等级、行业、城市、活动配置差异化规则。

3. SDK 接入路径

商户最短接入

  1. 平台开通商户、商品授权、SDK 域名白名单。
  2. 商户页面引入 /sdk/sdk.js
  3. 调用 SDK 渲染商品和下单组件。
  4. 用户在商户端付款。
  5. 商户确认收款后调用支付确认接口。
  6. 平台履约并回调商户。

关键入口

SDK Demo
商户实际嵌入效果演示
推荐
统一开发文档
SDK、OpenAPI、回调、餐饮锁价统一入口
文档

4. OpenAPI 接入路径

OpenAPI 给技术型商户/合作方后端使用。所有核心接口需要签名。

接口方法用途
/openapi/v1/product/listGET查询授权商品
/openapi/v1/balance/queryGET查询商户余额/冻结/消费
/openapi/v1/order/queryGET查询订单
/openapi/v1/order/createPOST传统 OpenAPI 下单
/openapi/v1/sdk/order-createPOSTSDK 模式创建本地待支付订单
/openapi/v1/sdk/order-payPOST商户确认收款后支付确认/履约

签名规则

METHOD + "\n" + URI_PATH + "\n" + timestamp + "\n" + nonce + "\n" + body
sign = Base64URL(HMAC-SHA256(上述原文, app_secret)) 去掉 =

注意:URI 只签 path,不包含 query;timestamp 是秒级;GET body 为空但 nonce 后仍保留换行。

4.1 统一产品接口与智能路由

对外原则:下游客户只接中国道标准产品接口,不按服务通道分别适配。电影票、票务、快递、打车、生活服务 H5 等同一业务产品保持统一请求字段、统一响应字段、统一订单状态、统一错误码和统一回调通知。

后台路由:中国道根据商户授权、产品配置、服务通道可用性、成本价、城市/资源覆盖、接口健康状态、履约成功率和风控策略,在后台自动选择最合适的服务通道。下游文档不暴露服务方私有字段为必接字段,下游客户无需感知具体服务方。

标准产品标准入口后台路由能力对外口径
电影票中国道电影票标准接口支持多服务通道路由城市、影院、影片、场次、座位、报价、下单、查单字段保持统一;服务方差异由后台适配。
票务中国道票务标准接口支持当前及后续服务通道扩展城市、航司/车次/票务资源、预订、查单、退款字段保持统一。
快递中国道快递标准接口支持当前及后续服务通道扩展寄件、收件、重量、保价、价格、下单、轨迹字段保持统一。
打车中国道打车标准接口支持当前及后续服务通道扩展起点、终点、车型、估价、下单、结算、查单字段保持统一。
生活服务 H5中国道生活服务 H5 标准入口支持多类生活服务通道路由中国道校验商户授权后返回服务访问地址;客户只处理统一的跳转、订单、支付和回调结果。

内部系统可保留服务方名称用于成本、路由、运维和排障;开放平台、SDK 文档和商户接入文档统一使用“标准产品接口 / 服务通道 / 服务访问地址”等中性口径。

4.2 H5 产品入口接口

适用场景:生活服务、权益服务、到店服务、商超、生鲜、票务等已有成熟服务页面的 H5 类产品。

核心模式:下游客户请求中国道标准 H5 入口;中国道校验商户授权、用户参数和产品配置;后台选择服务通道并完成签名;中国道返回服务访问地址 h5Url/url 给下游。客户只需要跳转用户访问,并接收中国道统一订单状态和异步通知。

商用详细文档:完整请求参数、响应字段、签名算法、Node.js/Java/PHP 示例、curl 示例、产品编码和错误码请查看 《H5 单产品外放接口详细接入文档》

服务端 OpenAPI 入口(推荐系统对接)

适合客户服务端直接获取单个 H5 访问地址,不依赖浏览器 Origin;必须使用 OpenAPI App 签名。

POST /openapi/v1/h5/entry
Content-Type: application/json
app_id: app_xxx
timestamp: 1783510000
nonce: random16
sign: HMAC_SHA256_BASE64URL

{
  "typeCode": "Weg",
  "interfaceTypeCode": "weg_interface",
  "deliveryMode": "h5_page",
  "userId": "merchant-user-001",
  "phone": "13800138000",
  "outRequestNo": "REQ202607080001"
}

签名明文:METHOD + " " + URI_PATH + " " + timestamp + " " + nonce + " " + body;签名路径为 /openapi/v1/h5/entry,不要带 /prod-api

H5 订单查询

用户进入 H5 后,商户可按请求号或订单号查询是否已创建中国道订单。

POST /openapi/v1/h5/query
Content-Type: application/json
app_id: app_xxx
timestamp: 1783510000
nonce: random16
sign: HMAC_SHA256_BASE64URL

{
  "outRequestNo": "REQ202607080001"
}

orderCreated=false 表示用户尚未在 H5 内完成下单回调,属于正常状态。

支付成功通知(商户服务端):用户在商户自有收银台支付成功后,商户服务端必须签名调用 POST /openapi/v1/h5/payment/notify,标准请求提交中国道 orderNo 和实际支付金额 amount。普通 H5 无需传 quoteId;仅当特殊锁价订单在建单时已经生成并保存该字段,才原样回传。/h5/entry/h5/query 不返回 quoteId,下游不得自行生成或猜测。中国道校验 AppID 绑定商户、订单归属、IP 白名单、金额、订单已有锁价信息和幂等状态后,按订单冻结配置处理资金并触发服务通道履约。同一 app_id + orderNo 重复通知不会重复扣款或重复履约。公网地址为 https://lukeydao.com/prod-api/openapi/v1/h5/payment/notify,签名路径不带 /prod-api。完整参数、签名及异步通知验签见 H5 商用详细文档

当前可申请的 H5 产品编码

产品typeCodeinterfaceTypeCode说明
打车 H5Taxitaxi_interfaceH5 服务访问入口
叮咚买菜 H5MarketDDding_dong_interfaceH5 服务访问入口
图书 H5Bookbook_v2_interfaceH5 服务访问入口
话费充值 H5PrepaidRefilldirectcharge_interfaceH5 服务访问入口
水电燃 H5Wegweg_interfaceH5 服务访问入口
美团外卖 H5MeituanWaimaimt_waimai_interfaceH5 服务访问入口
美团团购 H5MeituanTuanmt_canyin_interfaceH5 服务访问入口
小象超市 H5FreshMartmt_maicai_interfaceH5 服务访问入口
电影票 H5MovieThreemovie_three_interfaceH5 服务访问入口
飞机票 H5AirTicketH5domestic_air_tickets_h5_interfaceH5 服务访问入口
火车票 H5TrainH5train_h5_interfaceH5 服务访问入口
京东 H5MarketJDH5jd_mall_h5_interfaceH5 服务访问入口
酒店 H5HotelH5hotel_h5_interfaceH5 服务访问入口
口径说明:以上编码表示当前开放平台 H5 入口可按商户授权申请服务访问地址;/h5/entry 返回地址不等于订单已创建或支付已完成。订单创建、支付确认、异步通知、退款/售后需按各产品业务链路单独验收。
注意:/h5/entry 只返回服务访问地址,不代表已经创建中国道本地订单。用户在 H5 页面内下单后,上游会通过 createUrl 回调中国道创建 WAIT_PAY 订单;后续支付成功再按产品类型触发 payNotifypayCallback

4.3 服务通道接入状态

新增服务能力统一进入中国道后台服务通道路由池。对下游仍按中国道标准产品接口输出,不要求客户直接适配任何服务方私有字段。

标准产品通道形态状态说明
电影票API 标准产品ready已接入城市、影院、影片、场次、座位、订单参数映射,归入电影票标准能力。
票务API 标准产品ready按中国道票务标准字段输出。
快递API 标准产品ready按中国道快递标准字段输出。
企业打车H5 / API 标准产品ready按中国道打车标准字段输出。
开放能力总入口内部调试能力testing仅用于内部接入验证;状态变更动作禁止通过公开查询入口直接触发。

5. 客户常用入口

以下仅保留商户接入必须使用的正式入口。

商户后台

商品授权、域名白名单、密钥配置和订单查询请在商户工作台完成。

6. 回调与订单状态

订单状态

WAIT_PAY 待商户确认收款 → PAID 已确认 → PROCESSING 履约处理中 → SUCCESS 成功 / CLOSED 失败关闭 / REFUNDED 已退款。

回调要求

商户按 orderNo 做幂等。平台可能因网络失败重试通知,同一订单重复通知不得重复发货/重复退款。

{
  "orderNo":"SDK202605201812405703",
  "status":"SUCCESS",
  "merchantId":1,
  "payAmount":"105.00",
  "event":"ORDER_SUCCESS"
}

7. 异步通知与商户退款责任

平台订单状态变化后,会向商户配置的 notifyUrl 发起异步通知。商户必须按 orderNo + event 做幂等;重复通知只更新状态,不得重复发货或重复退款。

事件口径

event含义商户处理
ORDER_SUCCESS平台履约成功标记订单成功,按业务发放权益/展示成功结果。
ORDER_FAIL平台履约失败或履约失败,订单关闭标记失败/关闭;若用户已在商户侧支付,商户需按原支付渠道退款给用户。
ORDER_REFUND退款结果通知仅当 refundStatus=SUCCESSrefundAmount>0 时,才可视为退款完成。
ADMIN_RETRY后台人工重推用于补发通知留痕;业务语义以 payload 中订单状态和履约状态为准。

失败退款规则

  • orderStatus=CLOSED 只表示订单关闭,不等于退款成功。
  • upstreamStatus=FAILED 表示上游履约失败;平台会回退/解冻商户在平台侧预存款。
  • 用户支付发生在商户侧时,平台无法替商户原路退用户款;商户收到需退款失败通知后,应自行按原支付渠道退款。
  • 商户不得只凭 closed 自动退款;必须结合 eventupstreamStatus、支付是否已成功、退款字段判断。

通知报文示例

{
  "event":"ORDER_FAIL",
  "orderNo":"SDK202606131806064067",
  "merchantId":37,
  "typeCode":"DirectchargeNew",
  "orderStatus":"CLOSED",
  "payAmount":50,
  "userPayAmount":50,
  "merchantSettleAmount":50,
  "upstreamStatus":"FAILED",
  "upstreamErrorMsg":"接口未授权(错误码:...)",
  "timestamp":1781416601000
}

商户接口返回 SUCCESS 或 HTTP 2xx 仅表示“已接收通知”,不代表用户侧退款完成。

餐饮/券类 quoteId 报价锁价

餐饮、咖啡、兑换券等 SKU 价格不能由前端裸传金额。商户端应先让平台后端重查真实菜单并生成短期 quoteId,再用 quoteId 创建订单。

正式流程

  1. 查询真实门店和菜单 SKU。
  2. 调用 POST /openapi/v1/sdk/food/quote?merchantId=3 生成报价快照。
  3. 订单创建只提交 quoteId,不要提交前端计算金额。
  4. 后端按 Redis 价格快照写入订单金额,保障 quote/order/DB 一致。

星巴克正式服验收样例

商品:双杯美式咖啡

productId:sbk_135533136191685166

价格:43.20

测试订单:TEST202605202018285095

验收:quote = order = DB = 43.20

报价接口

POST /prod-api/openapi/v1/sdk/food/quote?merchantId=3
Content-Type: application/json

{
  "merchantId": 3,
  "shopType": "XBK",
  "shopId": "ff6f2064-8bf7-4f4a-9c83-4bf201714971",
  "productId": "sbk_135533136191685166",
  "quantity": 1
}

下单接口

POST /prod-api/openapi/v1/sdk/order-create?merchantId=3
Content-Type: application/json

{
  "merchantId": 3,
  "typeCode": "Food",
  "testMode": true,
  "quoteId": "foodq_xxx",
  "phoneNumber": "18100348861"
}

安全要求:正式餐饮/券类下单必须使用 quoteId;quoteId 5分钟有效,后续应增加一次性消费、防重放和 SKU 级成本校验。

7. 安全与正式上线

  • SDK:必须配置商户域名白名单,避免任意站点盗用 merchantId。
  • OpenAPI:必须使用 AppId/AppSecret/HMAC 签名,建议配置 IP 白名单。
  • 价格:动态价格/券类/餐饮类必须使用平台后端价格快照 quoteId,不能相信前端裸传金额。
  • 资金:正式环境只允许冻结/确认/解冻闭环,不允许回到直接扣款模式。
  • 上线:正式环境同步前必须备份代码、JAR、关键表,并重新跑价格/商户/补偿检查。