更新日志
2023-04-24
- 新增C2C接口
GET /sapi/v1/c2c/orderMatch/listUserOrderHistory
POST /sapi/v1/c2c/orderMatch/listOrders
POST /sapi/v1/c2c/paymentMethod/listAll
- 订单取消原因代码更新, 请参考: 订单取消原因 (C2C订单相关)
2022-11-07
- 新增C2C接口
GET /sapi/v1/c2c/ad/getAvailableAdClassify
POST /sapi/v1/c2c/ad/getReferencePrice
POST /sapi/v1/c2c/ad/getDetailByNo
POST /sapi/v1/c2c/ad/listWithPagination
POST /sapi/v1/c2c/ad/post
POST /sapi/v1/c2c/ad/update
POST /sapi/v1/c2c/ad/updateStatus
POST /sapi/v1/c2c/ad/search
2022-11-07
- 新增C2C接口
POST /sapi/v1/c2c/orderMatch/placeOrder
POST /sapi/v1/c2c/orderMatch/markOrderAsPaid
POST /sapi/v1/c2c/orderMatch/releaseCoin
POST /sapi/v1/c2c/orderMatch/cancelOrder
介绍
API Key 设置
- 很多接口需要API Key才可以访问. 请参考这个页面来设置API Key。
- 设置API Key的同时,为了安全,建议设置IP访问白名单。
- 永远不要把你的API key/secret告诉给任何人。
联系我们
基本信息
API 基本信息
- 接口可能需要用户的 API Key,如何创建API-KEY请参考这里
- 本篇列出接口的baseurl: https://api.pexpay.com。
- 所有接口的响应都是 JSON 格式。
- 所有时间、时间戳均为UNIX时间,单位为毫秒。
HTTP 返回代码
- HTTP
4XX
错误码用于指示错误的请求内容、行为、格式。问题在于请求者。 - HTTP
403
错误码表示违反WAF限制(Web应用程序防火墙)。 - HTTP
429
错误码表示警告访问频次超限,即将被封IP。 - HTTP
418
表示收到429后继续访问,于是被封了。 - HTTP
5XX
错误码用于指示Pexpay服务侧的问题。
接口错误代码
每个接口都有可能返回异常。
具体的错误码及其解释在 错误代码.
接口的基本信息
GET
方法的接口, 参数必须在query string
中发送。POST
,PUT
, 和DELETE
方法的接口,参数可以在内容形式为application/x-www-form-urlencoded
的query string
中发送,也可以在request body
中发送。 如果你喜欢,也可以混合这两种方式发送参数。- 对参数的顺序不做要求。
- 但如果同一个参数名在query string和request body中都有,query string中的会被优先采用。
访问限制
访问限制基本信息
以下 是
intervalLetter
作为头部值:- SECOND => S
- MINUTE => M
- HOUR => H
- DAY => D
在
/api/v3/exchangeInfo
rateLimits
数组中包含与交易的有关RAW_REQUESTS,REQUEST_WEIGHT和ORDERS速率限制相关的对象。这些在限制种类 (rateLimitType)
下的枚举定义
部分中进一步定义。违反任何一个速率限制时,将返回429。
IP 访问限制
- 每个请求将包含一个
X-MBX-USED-WEIGHT-(intervalNum)(intervalLetter)
的头,其中包含当前IP所有请求的已使用权重。 - 每一个接口均有一个相应的权重(weight),有的接口根据参数不同可能拥有不同的权重。越消耗资源的接口权重就会越大。
- 收到429时,您有责任停止发送请求,不得滥用API。
- 收到429后仍然继续违反访问限制,会被封禁IP,并收到418错误码
- 频繁违反限制,封禁时间会逐渐延长,从最短2分钟到最长3天。
Retry-After
的头会与带有418或429的响应发送,并且会给出以秒为单位的等待时长(如果是429)以防止禁令,或者如果是418,直到禁令结束。- 访问限制是基于IP的,而不是API Key。
下单频率限制
- 每个成功的下单回报将包含一个
X-MBX-ORDER-COUNT-(intervalNum)(intervalLetter)
的头,其中包含当前账户已用的下单限制数量。 - 当下单数超过限制时,会收到带有429但不含
Retry-After
头的响应。请检查GET api/v3/exchangeInfo
的下单频率限制 (rateLimitType = ORDERS) 并等待封禁时间结束。 - 被拒绝或不成功的下单并不保证回报中包含以上头内容。
- 下单频率限制是基于每个账户计数的。
- 用户可以通过接口
GET api/v3/rateLimit/order
来查询当前的下单量。
/sapi/ 接口限频说明
-
/sapi/*
的接口相关: - 按IP和按UID(account)两种模式分别统计, 两者互相独立。
- 以
/sapi/*
开头的接口采用单接口限频模式。按IP统计的权重单接口权重总额为每分钟12000;按照UID统计的单接口权重总额是每分钟180000。 - 每个接口会标明是按照IP或者按照UID统计, 以及相应请求一次的权重值。
- 按照IP统计的接口, 请求返回头里面会包含
X-SAPI-USED-IP-WEIGHT-1M=<value>
, 包含当前IP所有请求已使用权重。 - 按照UID统计的接口, 请求返回头里面会包含
X-SAPI-USED-UID-WEIGHT-1M=<value>
, 包含当前账户所有已用的UID权重。
接口鉴权类型
- 每个接口都有自己的鉴权类型,鉴权类型决定了访问时应当进行何种鉴权。
- 鉴权类型会在本文档中各个接口名称旁声明,如果没有特殊声明即默认为
NONE
。 - 如果需要 API-keys,应当在HTTP头中以
X-MBX-APIKEY
字段传递。 - API-keys 与 secret-keys 是大小写敏感的。
- API-keys可以被配置为只拥有访问一些接口的权限。 例如, 一个 API-key 仅可用于发送交易指令, 而另一个 API-key 则可访问除交易指令外的所有路径。
- 默认 API-keys 可访问所有鉴权路径。
鉴权类型 | 描述 |
---|---|
NONE | 不需要鉴权的接口 |
TRADE | 需要有效的 API-Key 和签名 |
USER_DATA | 需要有效的 API-Key 和签名 |
TRADE
和USER_DATA
接口是 签名(SIGNED)接口。
SIGNED (TRADE、USER_DATA AND MARGIN) Endpoint security
- 调用
SIGNED
接口时,除了接口本身所需的参数外,还需要在query string
或request body
中传递signature
, 即签名参数。 - 签名使用
HMAC SHA256
算法。 API-KEY所对应的API-Secret作为HMAC SHA256
的密钥,其他所有参数作为HMAC SHA256
的操作对象,得到的输出即为签名。 签名
大小写不敏感。- "totalParams"定义为与"request body"串联的"query string"。
时间同步安全
- 签名接口均需要传递
timestamp
参数,其值应当是请求发送时刻的unix时间戳(毫秒)。 - 服务器收到请求时会判断请求中的时间戳,如果是5000毫秒之前发出的,则请求会被认为无效。这个时间空窗值可以通过发送可选参数
recvWindow
来定义。
逻辑伪代码如下:
if (timestamp < (serverTime + 1000) && (serverTime - timestamp) <= recvWindow)
{
// process request
}
else
{
// reject request
}
关于交易时效性 互联网状况并不完全稳定可靠,因此你的程序本地到传奇服务器的时延会有抖动。这是我们设置recvWindow
的目的所在,如果你从事高频交易,对交易时效性有较高的要求,可以灵活设置recvWindow
以达到你的要求。
POST /sapi/v1/c2c/ad/getDetailByNo 的示例
以下是在linux bash环境下使用 echo openssl 和curl工具实现的一个调用接口下单的示例 apikey、secret仅供示范
Key | Value |
---|---|
apiKey | dbefbc809e3e83c283a984c3a1459732ea7db1360ca80c5c2c8867408d28cc83 |
secretKey | 2b5eb11e18796d12d88f13dc27dbbd02c2cc51ff7059765ed9821957d82bb4d9 |
参数 | 取值 |
---|---|
adNo | 10191633467710386176 |
timestamp | 1591702613943 |
示例 1: 所有参数通过 request body 发送
Example 1
HMAC SHA256 signature:
$ echo -n "adNo=10191633467710386176×tamp=1591702613943" | openssl dgst -sha256 -hmac "2b5eb11e18796d12d88f13dc27dbbd02c2cc51ff7059765ed9821957d82bb4d9"
(stdin)= 3c661234138461fcc7a7d8746c6558c9842d4e10870d2ecbedf7777cad694af9
curl command:
(HMAC SHA256)
$ curl -H "X-MBX-APIKEY: dbefbc809e3e83c283a984c3a1459732ea7db1360ca80c5c2c8867408d28cc83" -X POST 'https://api.pexpay.com/sapi/v1/c2c/ad/getDetailByNo' -d 'adNo=10191633467710386176×tamp=1591702613943&signature=3c661234138461fcc7a7d8746c6558c9842d4e10870d2ecbedf7777cad694af9'
示例 2: 所有参数通过 query string 发送
Example 2
HMAC SHA256 signature:
$ echo -n "adNo=10191633467710386176×tamp=1591702613943" | openssl dgst -sha256 -hmac "2b5eb11e18796d12d88f13dc27dbbd02c2cc51ff7059765ed9821957d82bb4d9"
(stdin)= 3c661234138461fcc7a7d8746c6558c9842d4e10870d2ecbedf7777cad694af9
curl command:
(HMAC SHA256)
$ curl -H "X-MBX-APIKEY: dbefbc809e3e83c283a984c3a1459732ea7db1360ca80c5c2c8867408d28cc83" -X POST 'https://api.pexpay.com/sapi/v1/c2c/ad/getDetailByNo?adNo=10191633467710386176×tamp=1591702613943&signature=3c661234138461fcc7a7d8746c6558c9842d4e10870d2ecbedf7777cad694af9'
公开 API 参数
术语
这里的术语适用于全部文档,建议特别是新手熟读,也便于理解。
Ad
广告,用户可以在C2C平台上发布广告,与其他用户交易他们的加密货币。 发布的交易称为广告。Order
订单是买卖双方同意的承诺交易。C2C通过提供托管服务促进交易。 卖方的数字货币将被锁定,直到双方确认付款。Maker
在C2C上发布广告以买卖加密货币的用户。Taker
通过C2C上的在线广告买卖加密货币的用户。Fixed-price ads
固定价格广告,价格是固定的,不会随着加密货币的市场价格而变动。Floating-price ads
浮动价格广告,价格随行情波动,每分钟刷新一次。
枚举定义
订单状态 (C2C订单相关):
状态 | 描述 |
---|---|
1 |
订单待买家支付。 |
2 |
买家标记订单为已付款,等待卖家最终确认。 |
3 |
订单的数字货币放行中(系统放币异常的状态)。 |
4 |
订单的数字货币已成功放行给买家,订单完成。 |
5 |
订单有纠纷,交易双方的某一方发起申诉。 |
6 |
订单被买家取消。 |
7 |
订单超时未支付,被系统取消。 |
订单取消原因 (C2C订单相关):
状态 | 描述 |
---|---|
6 |
卖家不在线。 |
7 |
这个卖家的交易条件不适用于我。 |
8 |
我怀疑卖家有欺诈行为。 |
9 |
卖家退款并要求我取消订单。 |
10 |
价格太贵了。 |
11 |
我是新手,不知道如何进行C2C交易。 |
5 |
其它。 |
广告状态 (C2C广告相关):
状态 | 描述 |
---|---|
1 |
广告在线。 |
3 |
广告已下线(网站上没有广告,但可以上线)。 |
4 |
广告已关闭(广告已过期,它不在网站上,无法上线)。 |
广告价格类型 (C2C广告相关):
状态 | 描述 |
---|---|
1 |
广告价格是固定的,不会随着加密货币的市场价格而变动。 |
2 |
广告价格随加密货币的市场行情波动。 |
C2C 接口
- 如果需要 API-keys,应当在HTTP头中以
X-MBX-APIKEY
字段传递。 - API-keys 是大小写敏感的。
- C2C所有接口都需要 API-keys。
按页获取历史订单(USER_DATA)
GET /sapi/v1/c2c/orderMatch/listUserOrderHistory?endTimestamp=32432543543543&page=1&rows=10&startTimestamp=12321321213&tradeType=BUY
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
tradeType | String | NO | 交易类型,可选值:"BUY", "SELL" |
startTimestamp | Long | NO | 订单创建开始时间,以毫秒为单位 |
endTimestamp | Long | NO | 订单结束开始时间,以毫秒为单位 |
page | Integer | NO | 页码,默认值=1,最小值=1 |
rows | Integer | NO | 每页的条数,默认值=1,最小值=1,最大值=100 |
order | String | NO | 按哪个参数排序 |
sort | String | NO | 升序降序,可选值:"Asc", "Desc" |
响应:
{
"code": "000000",
"message": "success",
"data": [
{
"orderNumber": "20466367873332568064",
"adNo": "11461232745961476096",
"tradeType": "SELL",
"asset": "USDT",
"fiat": "CNY",
"fiatSymbol": "¥",
"amount": "15.38000000",
"totalPrice": "100.00000000",
"unitPrice": "6.5",
"orderStatus": "COMPLETED",
"createTime": 1678184770000,
"commission": "0",
"counterPartNickName": "nkq***",
"advertisementRole": "MAKER"
}
],
"total": 1,
"success": true
}
按页获取订单列表(USER_DATA)
请求:
{
"adNo": "11290172664500584448",
"asset": "USDT",
"tradeType": "BUY",
"page": 1,
"rows": 10
}
POST /sapi/v1/c2c/orderMatch/listOrders
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
adNo | String | NO | 广告编号 |
asset | String | NO | 数字货币,如"BTC" |
orderStatus | Integer | No | 订单状态 |
tradeType | String | NO | 交易类型,可选值:"BUY", "SELL" |
payType | Integer | NO | 支付方式类型,如 "BANK", "WECHAT" |
orderStatusList | Integer List | NO | 订单状态 |
startDate | Long | NO | 订单创建开始时间,以毫秒为单位 |
endDate | Long | NO | 订单创建结束时间,以毫秒为单位 |
page | Integer | 是 | 页码,最小值=1 |
rows | Integer | 是 | 每页的条数,最小值=1,最大值=2000 |
order | String | 否 | 按哪个参数排序 |
sort | String | 否 | 升序降序,可选值:"Asc", "Desc" |
响应:
{
"code": "000000",
"message": "success",
"data": [
{
"orderNumber": "20466277377803218944",
"adNo": "11466072390272757760",
"tradeType": "SELL",
"asset": "USDT",
"fiat": "CNY",
"fiatSymbol": "¥",
"amount": "136.61000000",
"totalPrice": "1000.00000000",
"orderStatus": 0,
"createTime": 1678163194000,
"currencyTicketSize": "0.01",
"assetTicketSize": "0.01",
"priceTicketSize": "0.01",
"sellerNickname": "nkaa",
"buyerNickname": "50qas",
"notifyPayEndTime": 1678164094000,
"chatUnreadCount": 0,
"commissionRate": "0",
"commission": "0",
"tradeMethodCommissionRateVoList": [
{
"tradeMethodIdentifier": "BANK",
"tradeMethodName": "Bank Transfer",
"commissionRate": "0"
}
]
}
],
"total": 1,
"success": true
}
所有有效的付款方式(NONE)
{
"code": "000000",
"message": "success",
"data": [
{
"identifier": "BANK",
"name": "Bank Transfer",
"shortName": "Bank Transfer",
"risk": "Please make sure you add your bank card number for instant payments. Do not include details of other banks or payment methods. You must add the payment details of the selected bank.",
"typeName": "银行转账",
"typeCode": "bank",
"riskLevel": 1,
"isVisible": 1,
"multiAllow": 1,
"remark": "(null)",
"sequence": 10
},
{
"identifier": "ALIPAY",
"name": "Alipay",
"shortName": "Alipay",
"typeName": "网络钱包",
"typeCode": "web-wallet",
"riskLevel": 0,
"isVisible": 1,
"multiAllow": 1,
"remark": "(null)",
"sequence": 20
}
],
"success": true
}
POST /sapi/v1/c2c/paymentMethod/listAll
参数:
- 不需要额外参数
响应:
获取 C2C 广告类别 (USER_DATA)
响应:
{
"code": "000000",
"message": "success",
"data": {
"adClassifies": [
"profession"
]
},
"success": true
}
GET /sapi/v1/c2c/ad/getAvailableAdClassify
参数:
- 不需要额外参数
获取 C2C 广告报价 (NONE)
请求:
{
"assets": [
"USDT"
],
"fiatCurrency": "TWD",
"payType": "BANK",
"tradeType": "BUY"
}
POST /sapi/v1/c2c/ad/getReferencePrice
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
assets | List String | 是 | 数字货币 |
fiatCurrency | String | 是 | 法币 |
payType | String | 否 | 支付方式类型,如 "BANK", "WECHAT" |
tradeType | String | 是 | 交易类型,可选值:"BUY", "SELL" |
- assets最多支持三个
响应:
{
"code": "000000",
"message": "success",
"data": [
{
"asset": "USDT",
"currency": "TWD",
"currencyScale": 2,
"currencySymbol": "$",
"referencePrice": "31.06",
"assetScale": 2,
"priceScale": 2
}
],
"success": true
}
获取 C2C 广告详情 (USER_DATA)
请求:
{
"adNo": "11218246497340923904"
}
POST /sapi/v1/c2c/ad/getDetailByNo
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
adNo | String | 是 | 广告编号 |
响应:
{
"code": "000000",
"message": "success",
"data": {
"adNo": "11421763242363183104",
"classify": "profession",
"tradeType": "BUY",
"asset": "USDT",
"fiatUnit": "TWD",
"priceType": 1,
"priceFloatingRatio": "100.00000000",
"rateFloatingRatio": "0.00000000",
"price": "32.00",
"initAmount": "10000.00000000",
"surplusAmount": "10000.00000000",
"maxSingleTransAmount": "100000",
"minSingleTransAmount": "1000",
"buyerKycLimit": 1,
"buyerRegDaysLimit": -1,
"buyerBtcPositionLimit": "-1.00000000",
"payTimeLimit": 15,
"tradeMethods": [
{
"identifier": "BANK",
"iconUrlColor": "https://static.devfdg.net/image/admin_mgs_image_upload/20200612/8b6fcda1-1285-486b-ad79-07156420459d.png",
"tradeMethodName": "Bank Transfer"
}
],
"createTime": 1667550197000,
"tradableQuantity": "10000",
"commissionRate": "0",
"tradeMethodCommissionRateVoList": [
{
"tradeMethodIdentifier": "BANK",
"tradeMethodName": "银行卡",
"commissionRate": "0"
}
],
"assetLogo": "https://res.pxpstatic.com/image/c2c/icons/crypto/usdt.png",
"assetScale": 2,
"fiatScale": 2,
"priceScale": 2,
"fiatSymbol": "$"
},
"success": true
}
获取 C2C 用户广告列表 (USER_DATA)
请求:
{
"adStatus": 1,
"asset": "USDT",
"page":1,
"rows":10,
"tradeType":"BUY"
}
POST /sapi/v1/c2c/ad/listWithPagination
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
advNo | String | 是 | 广告编号 |
adStatus | String | 是 | 广告状态, 可选值:"1", "2", "3" |
asset | String | 是 | 数字货币,如"BTC" |
tradeType | String | 是 | 交易类型,可选值:"BUY", "SELL" |
startDate | String | 是 | 广告创建开始时间 |
endDate | String | 是 | 广告创建结束时间 |
fiatUnit | String | 是 | 法币 |
page | String | 是 | 页码 |
rows | String | 是 | 每页条目数 |
响应:
{
"code": "000000",
"message": "success",
"data": [
{
"adNo": "11425741454814470144",
"classify": "profession",
"tradeType": "SELL",
"asset": "USDT",
"fiatUnit": "TWD",
"advStatus": 1,
"priceType": 1,
"price": "31.60",
"initAmount": "3182.58000000",
"surplusAmount": "2549.67000000",
"maxSingleTransAmount": "500000",
"minSingleTransAmount": "5000",
"buyerKycLimit": 1,
"buyerRegDaysLimit": -1,
"buyerBtcPositionLimit": "-1.00000000",
"remarks": "",
"autoReplyMsg": "",
"payTimeLimit": 15,
"tradeMethods": [
{
"payId": 86247,
"identifier": "BANK",
"iconUrlColor": "https://static.devfdg.net/image/admin_mgs_image_upload/20200612/8b6fcda1-1285-486b-ad79-07156420459d.png",
"tradeMethodName": "Bank Transfer"
}
],
"createTime": 1668498676000,
"advUpdateTime": 1668498677000,
"advVisibleRet": {
"userSetVisible": 1,
"orderFlowVisible": 1,
"surplusAmountVisible": 1
},
"assetScale": 2,
"fiatScale": 2,
"priceScale": 2,
"fiatSymbol": "$"
}
],
"total": 1,
"success": true
}
发布 C2C 广告 (TRADE)
请求:
{
"asset":"USDT",
"buyerRegDaysLimit":-1,
"classify":"profession",
"fiatUnit":"TWD",
"initAmount":"10000",
"maxSingleTransAmount":"100000.00",
"minSingleTransAmount":"1000.00",
"onlineNow":"true",
"payTimeLimit":15,
"price":"31",
"priceFloatingRatio":100,
"priceType":1,
"tradeMethods":[
{
"payMethodId":"99",
"identifier":"BANK"
}
],
"tradeType":"SELL"
}
POST /sapi/v1/c2c/ad/post
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
asset | String | 是 | 数字货币,如BTC |
classify | String | 是 | 可选值:"mass", "profession", mass 普通广告,profession 专业广告 |
fiatUnit | String | 是 | 法币 |
initAmount | String | 是 | 初始金额,单位:数字货币 |
maxSingleTransAmount | String | 是 | 最大单笔法币金额 |
minSingleTransAmount | String | 是 | 最小单笔法币金额 |
onlineNow | Boolean | 是 | 是否立即上线 |
payTimeLimit | Integer | 是 | 支付时间限制,单位:分钟 |
price | String | 是 | 出售价格,单位:法币 |
priceType | Integer | 是 | 可选值:"1", "2", 1 固定价格 2 浮动价格 |
tradeType | String | 是 | 交易类型,可选值:"BUY", "SELL" |
priceFloatingRatio | String | 是 | 浮动价格比例,仅在浮动价格类型广告生效 |
tradeMethods | List | 是 | 支付方式信息 |
buyerRegDaysLimit | Integer | 否 | taker账号已注册的最少天数,不传表示无限制 |
buyerBtcPositionLimit | String | 否 | taker持有数字货币的最低总价值(以BTC计算) |
remarks | String | 否 | 广告备注 |
autoReplyMsg | String | 否 | 自动回复内容,下单后该内容会自动通过chat发送给taker |
- classify:可以通过 /sapi/v1/c2c/ad/getAvailableAdClassify 接口获取用户支持的 classify
- tradeMethods:广告tradeType为 SELL 需要传 payMethodId,为 BUY 需要传 identifier
响应:
{
"code": "000000",
"message": "success",
"data": "11425800822686646272",
"success": true
}
更新 C2C 广告 (TRADE)
请求:
{
"adNo":"11425741454814470144",
"buyerRegDaysLimit":-1,
"initAmount":"10000",
"maxSingleTransAmount":"100000.00",
"minSingleTransAmount":"1000.00",
"payTimeLimit":15,
"price":"31",
"priceFloatingRatio":100,
"tradeMethods":[
{
"payMethodId":"99",
"identifier":"BANK"
}
],
"adStatus":1
}
POST /sapi/v1/c2c/ad/update
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
adNo | String | 是 | 广告编号 |
adStatus | Integer | 否 | 广告状态, 可选值:"1", "2", "3", "4" |
initAmount | String | 否 | 初始金额,单位:数字货币 |
maxSingleTransAmount | String | 否 | 最大单笔法币金额 |
minSingleTransAmount | String | 否 | 最小单笔法币金额 |
payTimeLimit | Integer | 否 | 支付时间限制,单位:分钟 |
price | String | 否 | 出售价格,单位:法币 |
priceFloatingRatio | String | 否 | 浮动价格比例 |
tradeMethods | List | 否 | 支付方式信息 |
buyerRegDaysLimit | Integer | 否 | taker账号已注册的最少天数,不传表示无限制 |
buyerBtcPositionLimit | String | 否 | taker持有数字货币的最低总价值(以BTC计算) |
remarks | String | 否 | 广告备注 |
autoReplyMsg | String | 否 | 自动回复内容,下单后该内容会自动通过chat发送给taker |
响应:
{
"code": "000000",
"message": "success",
"data": true,
"success": true
}
更新 C2C 广告状态 (TRADE)
请求:
{
"adStatus":3,
"adNo":11426819922767450112
}
POST /sapi/v1/c2c/ad/updateStatus
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
adStatus | Integer | 是 | 广告状态, 可选值:"1", "2", "3", "4" |
adNo | String | 是 | 广告编号 |
响应:
{
"code":"000000",
"message":"success",
"success":true
}
搜索 C2C 广告 (NONE)
请求:
{
"asset": "USDT",
"fiatUnit": "CNY",
"page": 1,
"rows": 10,
"tradeType": "SELL"
}
POST /sapi/v1/c2c/ad/search
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
asset | String | 是 | 数字货币,如 "BTC" |
fiatUnit | String | 是 | 法币 |
tradeType | String | 是 | 交易类型,可选值:"BUY", "SELL" |
payTypes | List | 否 | 支持的支付方式类型, 如 "BANK", "WECHAT" |
publisherType | String | 否 | 交易类型,可选值:"merchant", "user",不限制请传空 |
transAmount | String | 是 | 期望交易的法币金额 |
响应:
{
"code": "000000",
"message": "success",
"data": [
{
"adv": {
"adNo": "11425762971874607104",
"classify": "profession",
"tradeType": "BUY",
"asset": "USDT",
"fiatUnit": "CNY",
"price": "7.15",
"initAmount": "46665.33000000",
"surplusAmount": "13000.00",
"maxSingleTransAmount": "99000.00",
"minSingleTransAmount": "30000.00",
"tradeMethods": [
{
"identifier": "BANK",
"iconUrlColor": "https://static.devfdg.net/image/admin_mgs_image_upload/20200612/8b6fcda1-1285-486b-ad79-07156420459d.png",
"tradeMethodName": "Bank Transfer"
}
],
"assetScale": 2,
"fiatScale": 2,
"priceScale": 2,
"fiatSymbol": "¥",
"isTradable": true,
"dynamicMaxSingleTransAmount": "92950.00",
"minSingleTransQuantity": "4195.80",
"maxSingleTransQuantity": "13846.15",
"dynamicMaxSingleTransQuantity": "13000.00"
},
"advertiser": {
"userNo": "sc5e25c51d0fc37cbbb074de1fa52aa0b",
"nickName": "资金安全",
"userType": "merchant",
"tagIconUrls": []
}
}
],
"total": 1,
"success": true
}
C2C 下单 (TRADE)
请求:
{
"adNo": "11445651369269137408",
"asset": "USDT",
"buyType": "BY_MONEY",
"fiatUnit": "CNY",
"matchPrice":6.78,
"totalAmount": 10,
"tradeType": "BUY"
}
POST /sapi/v1/c2c/orderMatch/placeOrder
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
asset | String | 是 | 数字货币,如 "BTC" |
fiatUnit | String | 是 | 法币 |
tradeType | String | 是 | 交易类型,可选值:"BUY", "SELL" |
buyType | String | 是 | 按法币/数字货币数量下单,可选值:"BY_MONEY", "BY_AMOUNT" |
totalAmount | BigDecimal | 是 | 下单数量 |
payId | Long | 否 | 下卖单时必传,传用于收款的支付方式的id |
payType | String | 否 | 下买单时必传,传下单广告支持的支付方式的标识之一,如 "WECHAT" |
adNo | String | 是 | 下单目标广告的广告编号 |
响应:
{
"code": "000000",
"message": "success",
"data": {
"orderNo": "20456853414085775360",
"adNo": "11445651369269137408",
"buyerNickname": "pe*****.com",
"buyerName": "R150Bob",
"sellerNickname": "BobN151",
"sellerName": "est2T",
"tradeType": "BUY",
"payMethods": [
{
"id": 342,
"identifier": "BANK",
"tradeMethodName": "Bank Transfer",
"fields": [
{
"fieldId": "0000000000000000001",
"fieldName": "Name",
"fieldContentType": "payee",
"restrictionType": 0,
"lengthLimit": 100,
"isRequired": 1,
"fieldValue": "R151Bob"
},
{
"fieldId": "0000000000000000002",
"fieldName": "Bank account number",
"fieldContentType": "pay_account",
"restrictionType": 0,
"lengthLimit": 100,
"isRequired": 1,
"fieldValue": "1212"
},
{
"fieldId": "0000000000000000006",
"fieldName": "Bank name",
"fieldContentType": "bank",
"restrictionType": 0,
"lengthLimit": 100,
"isRequired": 1,
"fieldValue": "121"
},
{
"fieldId": "0000000000000000007",
"fieldName": "Account opening branch",
"fieldContentType": "sub_bank",
"restrictionType": 0,
"lengthLimit": 100,
"isRequired": 0,
"fieldValue": ""
}
],
"iconUrlColor": "/image/admin_mgs_image_upload/20200612/8b6fcda1-1285-486b-ad79-07156420459d.png"
}
],
"selectedPayId": 0,
"asset": "USDT",
"fiatUnit": "CNY",
"amount": "1.47000000",
"price": "6.78000000",
"totalPrice": "10.00000000",
"orderStatus": 1,
"remark": "",
"createTime": 1675916346000,
"notifyPayEndTime": 1675917246000,
"confirmPayTimeout": 0,
"allowComplainEndTime": 1678508346000,
"fiatTicketSize": "0.01",
"assetTicketSize": "0.01",
"priceTicketSize": "0.01",
"notifyPayedExpireMinute": 15,
"confirmPayedExpireMinute": 15,
"currencyRate": "6.78396132",
"canCancelComplaintOrder": false
},
"success": true
}
C2C 标记订单已支付 (TRADE)
请求:
{
"orderNo": "20456854342616600576",
"payId": 342
}
POST /sapi/v1/c2c/orderMatch/markOrderAsPaid
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
orderNo | String | 是 | 订单编号 |
payId | Long | 否 | 买单必传,支付的目标支付方式的id |
响应:
{
"code": "000000",
"message": "success",
"data": {
"orderNo": "20456854342616600576",
"orderStatus": 2,
"notifyPayTime": 1675916586162,
"confirmPayEndTime": 1675917486162,
"selectedPayId": 342
},
"success": true
}
C2C 放币 (TRADE)
请求:
{
"orderNo": "20456854342616600576"
}
POST /sapi/v1/c2c/orderMatch/releaseCoin
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
orderNo | String | 是 | 订单编号 |
响应:
{
"code": "000000",
"message": "success",
"success": true
}
C2C 取消订单 (TRADE)
请求:
{
"orderCancelAdditionalInfo": "",
"orderCancelReasonCode": 1,
"orderNo": "20456853414085775360"
}
POST /sapi/v1/c2c/orderMatch/cancelOrder
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
orderNo | String | 是 | 订单编号 |
orderCancelReasonCode | Integer | 否 | 取消订单原因码,可选值:"1", "2", "3", "4", "5" |
orderCancelAdditionalInfo | String | 否 | 取消原因选择 "5" 时,用此字段提交额外的取消原因信息 |
响应:
{
"code": "000000",
"message": "success",
"success": true
}
错误代码
错误JSON格式:
{
"code": ${error code},
"msg": "error message."
}
错误由两部分组成:错误代码和消息。 代码是通用的,但是消息可能会有所不同。
10xx -常规服务器或网络问题
-1000 UNKNOWN
- 处理请求时发生未知错误。
- 处理请求时发生未知错误。[%s]
-1001 DISCONNECTED
- 内部错误; 无法处理您的请求。 请再试一次。
-1002 UNAUTHORIZED
- 您无权执行此请求。
-1003 TOO_MANY_REQUESTS
- 排队的请求过多。
- 请求过多; 请使用websocket获取实时更新。
- 请求过多; 当前限制为每分钟%s。 请使用websocket进行实时更新,避免轮询API。
- 请求过多; IP被禁止,直到%s。 请使用websocket进行实时更新,以免被禁。
-1004 SERVER_BUSY
- 服务器正忙,请稍候再试。
-1006 UNEXPECTED_RESP
- 从消息总线收到意外的响应。 执行状态未知。
-1007 TIMEOUT
- 等待后端服务器响应超时。 发送状态未知; 执行状态未知。
-1008 SERVER_BUSY
- 现货交易服务器当前因其他请求而过载。 请在几分钟后重试。
-1014 UNKNOWN_ORDER_COMPOSITION
- 不支持的订单组合。
-1015 TOO_MANY_ORDERS
- 新订单太多。
- 新订单太多; 当前限制为每%s %s个订单。
-1016 SERVICE_SHUTTING_DOWN
- 该服务不可用。
-1020 UNSUPPORTED_OPERATION
- 不支持此操作。
-1021 INVALID_TIMESTAMP
- 此请求的时间戳在recvWindow之外。
- 此请求的时间戳比服务器时间提前1000毫秒。
-1022 INVALID_SIGNATURE
- 此请求的签名无效。
-1099 Not found, authenticated, or authorized
- 替换错误代码-1999