Skip to Content

API 参考

{API_BASE_URL} 使用开发者中心为当前客户端分配的 API Base URL,完整保留其路径前缀。本页业务接口路径追加到该地址;用户信息使用单独分配的 {USERINFO_ENDPOINT}。所有接口均使用 OAuth Access Token:

Authorization: Bearer {ACCESS_TOKEN}

成功响应直接返回 JSON,不包含统一的 data 外层。业务写请求使用 Content-Type: application/json。客户端权限、用户授权权限和资源归属共同决定访问范围;通用错误见 错误与排查。

接口索引

方法与路径Scope令牌主体
GET /oauth/userinfoopenid用户
GET /openapi/v1/merchantmerchant.profile.read用户或客户端
GET /openapi/v1/productsproducts.read用户或客户端
POST /openapi/v1/ordersorders.create用户
GET /openapi/v1/orders/{order_no}orders.read用户
POST /openapi/v1/orders/{order_no}/paymentpayments.create用户
GET /openapi/v1/orders/{order_no}/paymentpayments.read用户
GET /openapi/v1/merchant-payment-channelsmerchant_payments.read仅客户端
POST /openapi/v1/merchant-paymentsmerchant_payments.create仅客户端
GET /openapi/v1/merchant-payments/{order_no}merchant_payments.read仅客户端
GET /openapi/v1/merchant-paymentsmerchant_payments.read仅客户端
GET /openapi/v1/merchant-payments/{order_no}/notificationsmerchant_payments.read仅客户端
POST /openapi/v1/merchant-payments/{order_no}/notifications/{event_id}/retrymerchant_payments.create仅客户端

令牌交换和用户信息的参数、响应见 OAuth 授权。网站授权页与 API 域名上的内部授权确认接口属于不同调用边界,见 端点与调用方。

外部业务订单的通用收款

merchant-payments 使用商户服务端 Client Credentials,不创建 TDCloud 商品订单,也不要求买家先授权 OAuth。建单提交 external_reference、idempotency_key、amount_minor、currency、payment_no 和可选 description、expires_in、return_url,以及可选 notify_enabled、成对的 notify_url / notify_secret。商户可在支付与结算页启用默认通知;单笔 notify_enabled: false 可关闭通知,默认配置变更不影响已建订单。同键同参数返回同单;改参数返回 409。

return_url 为建单时保存的可选 HTTPS 地址,仅服务端确认 paid 后自动返回商户。USD 10.50 的 amount_minor 是 1050,不能复用下方商品订单的八位定点金额;收款状态使用字符串。完整参数、返回字段、渠道目录、对账过滤和错误码见 通用商户收款。

读取商户

GET /openapi/v1/merchant

权限:merchant.profile.read。客户端须绑定启用中的商户。无请求参数,商户身份由令牌和客户端绑定确定。

成功响应:HTTP 200。

字段类型说明
merchant_nostring商户编号
namestring店铺名称
logo_urlstring店铺标志地址
short_descriptionstring简短介绍
descriptionstring店铺介绍
business_scopestring经营范围
website_urlstring店铺网站
contactstring对外联系信息

查询商品

GET /openapi/v1/products

权限:products.read。仅返回绑定商户的已启用商品。

Query 参数:

参数类型必填默认值与约束
pageinteger否默认 1;非法或小于 1 时回退为 1
limitinteger否默认 20;范围 1–100,非法或越界时回退为 20
gd_nostring否按商品编号精确过滤
search_valuestring否按商品名称或关键词搜索

成功响应:HTTP 200。

{"list":[],"total":0,"page":1,"limit":20}

list 为商品对象数组,total 为匹配总数,page 和 limit 为本次生效的分页值。商品对象中与接入相关的字段如下:

字段类型说明
gd_no、gd_namestring商品编号、名称
gd_descriptionstring商品介绍
actual_price、retail_priceinteger实际售价、参考价;八位定点金额
currencystring商品计价币种
currency_decimalsinteger币种显示精度,不改变金额缩放比例
in_stockinteger库存
buy_limit_numinteger单次最大购买量;0 表示不限制
payment_policystringautomatic 或 allowlist
payment_methodsstring[]可选,支付渠道编号;不提供渠道名称和结算报价
other_ipu_cnfstring[]可选,商品附加输入配置,见 交易接入约定
wholesale_price_cnfstring[]可选,批发价格配置;最终订单金额以平台计算结果为准
buy_promptstring可选,购买提示

商品对象还可能返回展示和管理相关字段;接入方应忽略不使用的字段。金额解析规则见 数据格式。

创建订单

POST /openapi/v1/orders

权限:orders.create,必须为用户授权令牌。商品须属于客户端绑定商户且已启用。买家由令牌中的授权用户确定。

JSON 请求体:

参数类型必填约束
gd_nostring是绑定商户的商品编号
quantityinteger是正整数,受库存及单次购买限制约束
payment_nostring是平台实际支付渠道编号;不是币种代码或渠道显示名称
other_ipuobject条件必填字符串键值对;内容由商品 other_ipu_cnf 决定,没有附加输入时可省略或传 {}
{"gd_no":"PRODUCT_NO","quantity":1,"payment_no":"PAYMENT_CHANNEL_NO","other_ipu":{}}

成功响应:HTTP 201,order_no 为 string。

{"order_no":"ORDER_NO"}

金额由平台计算,客户端不提交订单总价或买家编号。创建成功不代表已付款。该接口没有通用幂等键契约,重复请求可能生成不同订单。

参数解析错误返回 HTTP 400;库存、限购、支付渠道等业务条件未满足时可返回 422。商品编号及资源归属不满足时按实际响应处理,不能据此推断其他商户资源是否存在。

读取订单

GET /openapi/v1/orders/{order_no}

权限:orders.read,必须为用户授权令牌。路径参数 order_no 为 string、必填,来源为创建订单响应。

订单必须同时属于当前授权用户和客户端绑定商户。该接口不支持读取商户全部客户的订单。

成功响应:HTTP 200,订单对象:

字段类型说明
order_no、gd_no、titlestring订单编号、商品编号、订单标题
quantityinteger购买数量
statusinteger0 待支付,1 已付款处理中,2 已取消,3 已完成
status_labelstring状态展示文本;业务判断使用数值状态
currency、currency_decimalsstring、integer商品计价币种及显示精度
total_amount、discount_amountinteger商品总额及优惠金额,八位定点
handling_amount、pay_amountinteger订单手续费和支付金额记录,八位定点;付款展示优先使用下方支付币种字段
payment_currency、payment_currency_decimalsstring、integer支付币种及显示精度
payment_subtotal、payment_handling_amount、payment_pay_amountinteger支付币种下的小计、手续费及实际支付金额,八位定点
payment_no、payment_namestring订单支付渠道编号和名称
payment_methodsstring[]可选,订单记录的支付渠道范围
trade_nostring订单记录的交易编号
paid_time、created_at、updated_atstring 或 nullYYYY-MM-DD HH:mm:ss,不携带时区

发起支付

POST /openapi/v1/orders/{order_no}/payment

权限:payments.create,必须为用户授权令牌。路径参数 order_no 为 string、必填,校验与读取订单相同的用户和商户归属。

JSON 请求体:

参数类型必填约束
payment_nostring是订单绑定且仍可用的支付渠道编号
{"payment_no":"PAYMENT_CHANNEL_NO"}

成功响应:HTTP 200。

字段类型说明
trade_nostring支付会话编号
redirectstring支付跳转地址;相对地址按平台服务地址解析
expire_timeinteger支付会话到期时间,Unix 秒时间戳

该请求会实际发起支付;TDC 渠道可能在请求过程中扣款。HTTP 200 及浏览器回跳均不能单独证明付款完成,应查询支付状态。请求格式错误可返回 400,支付业务条件不满足可返回 422。

查询支付状态

GET /openapi/v1/orders/{order_no}/payment

权限:payments.read,必须为用户授权令牌。路径参数和资源归属规则与读取订单相同。

成功响应:HTTP 200。

{"status":1}
status含义后续处理
0待支付有间隔、有超时上限地轮询
1已付款停止支付轮询;读取订单详情判断交付是否完成
2已取消停止支付轮询

此处状态与订单详情 status 含义不同。业务状态、异常重试和支付副作用详见 交易接入约定。

最后更新于