用一条接口就能把 NFT 上架到主流交易市场,听起来不可思议?掌握「Order API」后,开发者只需不到 5 分钟即可完成 NFT 挂单 流程。本指南围绕 Web3 API 的「Create a listing」接口,拆分链路地址、参数说明、示例代码、验签要点与 智能合约 交互细节,让你一次性学会“从钱包签名到市场曝光”的所有步骤。
1. 接口职责与应用场景
核心关键词:NFT 挂单、订单创建、Web3 API、市场销售、区块链
Order API 属于 Marketplace API 套件,解决以下高频需求:
- 单条或多条 NFT 一键挂牌
- 设定出售币种、价格与到期时间
- 将挂单信息同步到公链与多平台缓存,提升成交率
与传统 DEX 仅支持 Token Swap 不同,该接口专为 ERC-721 / ERC-1155 设计,实现链上挂单 + 撮合的完整闭环。
2. 请求地址 & 网络环境
POST
https://web3.okx.com/api/v5/mktplace/nft/markets/create-listing
请求头需带 Content-Type: application/json
,并用 API Key 完成鉴权;若身处 企业内网,需开放出网 443 端口。👉 跟着示例 3 分钟生成你的第一条挂单
3. 必传参数逐条拆解
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
chain | String | 是 | 欲挂载的 区块链网络。例如 Ethereum 、OKTC 、Polygon 等,仅支持已在官方支持链列表中备案的链。 |
walletAddress | String | 是 | 卖家钱包地址。接口会先对该地址做 链上余额校验 与 授权检测。 |
collectionAddress | String | 是 | NFT 合约地址。格式需符合该链地址规范,字母大小写不敏感。 |
tokenId | String | 是 | NFT 标识符,支持字符串形式数字或十六进制。 |
price | String | 是 | NFT 挂单价格,以最小精度单位的十进制字符串表示。举例:"2000000" 表示 2 USDT,因为 USDT 精度为 6。 |
currencyAddress | String | 是 | 支付代币地址。若使用链原生币(ETH、OKT、BNB),固定填 0x0000000000000000000000000000000000000000 。 |
count | String | 是 | NFT 数量。1 针对单个 ERC-721;若为 ERC-1155,则可填大于 1 的数量。 |
validTime | String | 是 | 挂单过期时间,Unix 时间戳(秒)。示例:2200000000 对应 2039-09-19 07:06:40。 |
platform | String | 是 | 目标市场,可在集成市场清单中选择,如 "OKX.market" 、"Element" 、"OpenSea" 等,支持多平台同时曝光。 |
4. 组合请求报文实例
以下 JSON 将单个 ERC-721 NFT 以 2 USDT 的价格挂在以太坊主网 OKX.market,有效期 2030-01-01 00:00:00:
{
"chain": "Ethereum",
"walletAddress": "0xABC123...",
"collectionAddress": "0x09e...",
"tokenId": "1234",
"price": "2000000",
"currencyAddress": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"count": "1",
"validTime": "1893456000",
"platform": "OKX.market"
}
发请求前,确保钱包已 Approve collectionAddress
给系统托底合约地址,否则接口会返回 403 Unauthorized
.
5. 幂等签名机制
为防止重放攻击,系统在后台要求:
- 计算 plaintext:把全部参数按 ASCII 升序排序后组合
- 读取钱包私钥对上述字符串签名
- 把签名值 + 公钥放入 Header
X-Signature
示例做法(JavaScript):
const sorted = JSON.stringify(payload, Object.keys(payload).sort());
const signature = await signer.signMessage(sorted);
headers['X-Signature'] = signature;
若签名不匹配,会返回 401 Signature Error
。
6. 成功响应 JSON
合规响应统一格式,状态码 200
:
{
"code": 0,
"msg": "success",
"data": {
"orderId": "ord-20250604-00001",
"hash": "0xf8f...",
"platformStatus": {
"OKX.market": "listing",
"Element": "pending"
}
}
}
拿到 orderId
即可在 SDK 中监听订单状态或通过 Webhook 实时推送。👉 检查挂单状态变化,别忘了这一步
异常码速查手册
错误码 | 含义 | 解决建议 |
---|---|---|
40001 | 参数格式错误 | 请检查 price 是否为十进制字符串 |
40002 | invalid contract | collectionAddress 未部署或 ABI 不符 |
40003 | insufficient approval | NFT 授权数量不足,重新 Approve |
50001 | internal error | 服务端繁忙,15 分钟后重试 |
FAQ
Q1:可以一次挂多件同合约不同 tokenId 吗?
A1:该接口一次单件。批量场景建议并发调用,或使用 batchCreateListing
进阶接口。
Q2:挂单后 NFT 会不会立刻被转移?
A2:不会。系统仅在撮合成功时才真正链上划转,挂单期间 NFT 仍在你的地址内。
Q3:是否支持自定义版税?
A3:版税跟随合约为准,平台不支持额外抬高。
Q4:validTime
能否设在过去?
A4:限制严格,若时间早于当前时间戳 60 秒,将直接返回 400 Bad Request
。
Q5:取消挂单怎么做?
A5:使用同一套 Order API 的 cancelListing
端点,加传 orderId
及相同签名即可。
Q6:挂在多个市场会不会出现双重成交?
A6:前端撮合逻辑会自动去重;真正成交以链上事件为准,平台会第一优先实时广播撤单。
结语
通过 Order API 创建挂单,你的 NFT 多平台可见度、流动性与交易效率都将大幅提升。关注 validTime
、签名校验与链上授权三步,就能安心把注意力转回艺术创作与社区运营。若正准备上线大型 NFT 系列,不妨立刻动手调用接口,体验秒级上架的丝滑!