# API介绍

## 欢迎来到我们的API&#x20;

在这里你可以找到所需的文档&#x20;

## 本节说明

{% content-ref url="/pages/-LSTha-1\_witzwNkaGal" %}
[基本说明](/introducce/master)
{% endcontent-ref %}

{% content-ref url="/pages/-LSTiKXL-YEky7mk\_gxV" %}
[兑换流程](/introducce/flow)
{% endcontent-ref %}

## 想更加深入了解我们?

我们供以下API以供使用

## 中心化兑换

{% content-ref url="/pages/lkvRIKW4G50lS2ednYR4" %}
[中心化兑换API接口](/zhong-xin-hua-dui-huan-api-jie-kou)
{% endcontent-ref %}

## 聚合交易

{% content-ref url="/pages/P73fgODPcmxs9t3A3jyA" %}
[聚合交易API接口](/ju-he-jiao-yi-api-jie-kou)
{% endcontent-ref %}

## NFT API

{% content-ref url="/pages/stcc6j9FjImXqkWTRVKk" %}
[NFT API](/nft-api)
{% endcontent-ref %}

## 支付 API

{% content-ref url="/pages/r3UCLRDEy19Afz6ujdKm" %}
[支付API](/zhi-fu-api)
{% endcontent-ref %}


# 基本说明

**API HOST**

**`https://www.swftc.info`**

### DAPP

{% embed url="<https://app.bridgers.xyz/>" %}


# 兑换流程

### 兑换时序图

![](https://content.gitbook.com/content/CZbt3X4wpzSYqsOt0CQF/blobs/3pOifGJ8KCFeL0m2Uq6B/3333.jpg)

### 订单状态流转状态图

1. **订单详细状态流转**

![订单详细状态 - 状态图](https://content.gitbook.com/content/CZbt3X4wpzSYqsOt0CQF/blobs/hZ9Upc5ncRJjy2omNyF2/1543572718968.png)

**2. 订单状态流转**

![](https://content.gitbook.com/content/CZbt3X4wpzSYqsOt0CQF/blobs/k3uWF3wErQgLy6AC9TYz/1543572744091.png)


# 中心化兑换API接口

## 欢迎来到中心化API

本节中您可以了解并使用中心化兑换的相关接口

## 中心化兑换API说明

{% content-ref url="/pages/-LefT-PtJFE-m965WGRj" %}
[说明](/zhong-xin-hua-dui-huan-api-jie-kou/overview)
{% endcontent-ref %}

## 签名生成步骤

{% content-ref url="/pages/-LefTBhJkCASaJtUxK8Z" %}
[签名生成步骤说明](/zhong-xin-hua-dui-huan-api-jie-kou/qian-ming-sheng-cheng-bu-zhou-shuo-ming)
{% endcontent-ref %}

## 其他接口

{% content-ref url="/pages/-LefTWSuWO2gOax9-ID0" %}
[获取单个币种资产可用余额](/zhong-xin-hua-dui-huan-api-jie-kou/huo-qu-dan-ge-bi-zhong-zi-chan-ke-yong-yu-e)
{% endcontent-ref %}

{% content-ref url="/pages/-LefUDqhTcOP2c0OW5gn" %}
[获取所有资产信息](/zhong-xin-hua-dui-huan-api-jie-kou/huo-qu-suo-you-zi-chan-xin-xi)
{% endcontent-ref %}

{% content-ref url="/pages/-Lef\_5khLUhk8MozrixC" %}
[查询订单状态](/zhong-xin-hua-dui-huan-api-jie-kou/cha-xun-ding-dan-zhuang-tai)
{% endcontent-ref %}

{% content-ref url="/pages/-LefddgAlgPNplOGBtmt" %}
[查询兑换记录](/zhong-xin-hua-dui-huan-api-jie-kou/cha-xun-dui-huan-ji-lu)
{% endcontent-ref %}

{% content-ref url="/pages/-Lefh-fFk-A7JoK6Ymqg" %}
[创建订单](/zhong-xin-hua-dui-huan-api-jie-kou/chuang-jian-ding-dan)
{% endcontent-ref %}


# 说明

### 事项注意

1. 中心化兑换接口均需要进行签名鉴权，签名方式，参见相关文档.
2. 中心化接口对接，所有接口应放于服务器端与SWFT进行交互（接口鉴权密钥放于客户端太过危险）
3. 请求方式为 **POST, application/json.**
4. 以下接口中的所用到的币种简称可从  [查询币种列表](https://docs.swft.pro/chang-yong-jie-kou-shuo-ming/coin-list) `api/v1/queryCoinList` 接口返回值中获取.

### 接入中心化兑换方式

#### 1. 非资金抵押方式

用户需要兑换什么币即需要先把币存到SWFT钱包，只能兑换自己已有的币种

**举例子：**

> 用户资产：10000 SWFTC、 0.5 ETH，
>
> 用户可以用 5000SWFTC进行兑换，最多只能拿10000 SWFTC兑换成其他币

#### 2. 资金抵押方式

用户可以用自己没有的币进行兑换，但需要项目方在SWFT 抵押一定数量的主流数字货币，当账户内负资产（借的SWFT的币） -  正资产   超过抵押币数量时，则不再允许兑换，需要继续抵押币或进行清算后才能继续兑换

**举例子：**

> 用户各项资产：0
>
> 用户抵押资产：1 ETH ，抵押实际可用 0.5 ETH
>
> 用户可以用任何币种进行兑换，如 EOS 兑换BTC ，用户可以向SWFT平台借200 EOS 兑换成 0.15 BTC，此时，用户资产为： -200 EOS 、 0.15 BTC，
>
> 假设次数 200EOS折合美元 - 0.15BTC折合美元 > 0.5ETH 折合美元，则该用户无法再向SWFT借币进行兑换，账户会被锁定，无法进行提币、转账、发红包等操作，反之则可以向SWFT继续借币进行兑换

### 中心化兑换和去中心兑换通用接口

1. [查询币种列表](https://docs.swft.pro/chang-yong-jie-kou-shuo-ming/coin-list) `api/v1/queryCoinList`

&#x20;   2\.  [获取兑换汇率等基本信息](https://docs.swft.pro/chang-yong-jie-kou-shuo-ming/get-base-info)  `api/v1/getBaseInfo`

### 公共请求参数：

| 参数        | 是否必须 | 说明                |
| --------- | ---- | ----------------- |
| channelId | 是    | 渠道ID              |
| sign      | 是    | 签名，签名方式，请详见加密签名文档 |
| timestamp | 是    | 时间戳 毫秒            |

### 公共返回参数：

| 参数      | 是否必须 | 说明              |
| ------- | ---- | --------------- |
| resCode | 是    | 错误码（详见google文档） |
| resMsg  | 是    | 错误信息说明          |
| data    | 否    | 返回数据信息          |


# 签名生成步骤说明

**第一步：**

设所有发送或者接收到的数据为集合M，将集合M内非空参数值的参数按照参数名ASCII码从小到大排序（字典序)，使用URL键值对的格式（即key1=value1\&key2=value2…）拼接成字符串stringA。

**特别注意以下重要规则：**

1. 参数名ASCII码从小到大排序（字典序)；
2. app\_id，timestamp为必填参数；timestamp为最近五分钟毫秒级时间戳，超过5分钟失效;
3. 如果参数的值为空不参与签名；
4. 参数名区分大小写；
5. 传送的sign参数不参与签名，将生成的签名与该sign值作校验。

**第二步：**

在stringA最后拼接上key得到stringSignTemp字符串，并对stringSignTemp进行HMAC-SHA256运算，再将得到的字符串所有字符转换为大写，得到sign值signValue。

**伪代码举例**

假设传送的参数如下： channelId: mttest timestamp : 1516320000000 body : test

```
 第一步：对参数按照key=value的格式，并按照参数名ASCII字典序排序如下：
 stringA="channelId=mttest&body=test&timestamp=1516320000000";
 第二步：拼接API密钥：
 stringSignTemp=stringA+"&secret=my_test_secret" 
 sign=hash_hmac("sha256",stringSignTemp,key).toUpperCase()="6A9AE1657590FD6257D693A078E1C3E4BB6BA4DC30B23E0EE2496E54170DACD6" //注：HMAC-SHA256签名方式    
```

**示例代码**

```java
 @Test
     public void deductBalance() throws IOException {
         JTextField field ;
 ​
         String url = "http://localhost:8088/channel/deductBalance";
         //Java中的TreeMap会自动将key按照以ASCII字典进行排序
         TreeMap<String,Object> params = Maps.newTreeMap();
         params.put("orderId","my_order_id");
         params.put("channelId","test91021071617412");
         long timestamp = System.currentTimeMillis();
         params.put("timestamp",timestamp);
 ​
         String channelSign = getChannelSign(params, secret);
         params.put("sign",channelSign);
         System.out.println(url);
         System.out.println(JSON.toJSONString(params));
         String result = HttpUtils.sendRequestBody(url, params);
         System.out.println(result);
     }
 ​
     public static String getChannelSign(Map<String, Object> params,String secret) {
         StringBuilder result = new StringBuilder();
         if (params != null) {
             for (Object key : params.keySet()) {
                 Object value = params.get(key);
 ​
                 result.append(key).append("=").append(value).append("&");
             }
             String tempString = result + "secret=" + secret;
             try {
                 System.out.println(tempString);
                 String sign = EncryptUtils.sha256_HMAC(tempString, secret).toUpperCase();
                 System.out.println(sign);
                 return sign;
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
         return null;
     }
```

> 代码中参与加密的参数及顺序为：`channelId=test91021071617412&orderId=my_test_id&timestamp=1547987604644&secret=my_secret`


# 获取单个币种资产可用余额

### **1. 接口调用：**

&#x20;`https://{host}/open/api/availableAmt`

### **2. 请求参数**

| 参数           | 是否必须 | 说明                                      |
| ------------ | ---- | --------------------------------------- |
| currencyType | 是    | 币种简称，例如BTC                              |
| isDeductFee  | 否    | 返回的可用余额是否显示扣除提币手续费的金额，Y或者空显示，N则显示真实可用金额 |

### 3.请求参数示例

```
 {
     "channelId":"zml-test",
     "currencyType":"SWFTC",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":1557653925555
 }
```

### 4.Postman示例

![](https://content.gitbook.com/content/CZbt3X4wpzSYqsOt0CQF/blobs/j71eignkoV8I1o1uvCPa/cex_availableamt.png)

### 5.返回结果示例

```
 {
     "data": {
         "availableAmount": "29363.143631",
         "withdrawFee": "0",
     },
     "resCode": "800",
     "resMsg": "成功"
 }
```

### 6.返回参数说明

| 字段名称         | 是否数组 | 字段              | 数据类型   | 数据长度 | 必须项 | 备注       |
| ------------ | ---- | --------------- | ------ | ---- | --- | -------- |
| 用户该币种可用余额    | N    | availableAmount | String | 20   | Y   | eg: 1.12 |
| 提币手续费（网络手续费） | N    | withdrawFee     | String | 20   |     | eg: 0.01 |


# 获取所有资产信息

### **1. 接口调用：**

&#x20;`https://{host}/open/api/getAssets`

### **2. 请求参数**

> **除公共参数外，无额外参数**

### 3.请求参数示例

```
 {
     "channelId":"zml-test",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":1557653925555
 }
```

### 4.Postman示例

![](https://content.gitbook.com/content/CZbt3X4wpzSYqsOt0CQF/blobs/6Bh2uuR0x2np7mLk49fN/cex_allassets.png)

### 5.返回结果示例

```
 {
    "data": {
        "balance": [
            {
                "avaliableNum": "29363.143631",
                "currencyAddress": "0x58b39021e563897f5abbf10917940b288f2f0f9c",
                "currencyType": "SWFTC",
                "equivalentUSDT": "81.54",
                "freezeNum": "0",
                "freezeNumUSDT": "0",
                "totalNum": "0",
                "userNo": "mpro@vip.qq.com"
            },
            {
                "avaliableNum": "0",
                "currencyAddress": "36WJxdd254UJYJzbCbpwZmxbSYqkM6quCq",
                "currencyType": "BTC",
                "equivalentUSDT": "0",
                "freezeNum": "0",
                "freezeNumUSDT": "0",
                "totalNum": "0",
                "userNo": "mpro@vip.qq.com"
            },           
            {
                "avaliableNum": "-0.46",
                "currencyAddress": "0x58b39021e563897f5abbf10917940b288f2f0f9c",
                "currencyType": "ETH",
                "equivalentUSDT": "-81.47",
                "freezeNum": "0",
                "freezeNumUSDT": "0",
                "totalNum": "0",
                "userNo": "mpro@vip.qq.com"
            },
            ...
        ],
        "equivalentBTC": "0.00001033",
        "equivalentSWFTC": "25.65549112",
        "equivalentUSDT": "0.07124658",
        "tender": null
    },
    "resCode": "800",
    "resMsg": "成功"
}
```

### 6.返回参数说明

> 注意事项：当可用余额为负数时，即该币种目前亏欠SWFT，当亏欠数量和用户所兑换数量之差超过抵押币数量时，则不能再进行兑换

|                  |      |                 |        |      |     |                        |
| ---------------- | ---- | --------------- | ------ | ---- | --- | ---------------------- |
| 字段名称             | 是否数组 | 字段              | 数据类型   | 数据长度 | 必须项 | 备注                     |
| 用户手机号/email      | Y    | userNo          | String | 50   | Y   | 用户手机号/email            |
| 币种               | Y    | currencyType    | String | 10   | Y   | eg:BTC、GOOC、SHE 等等     |
| 币种地址             | Y    | currencyAddress | String | 50   | Y   | 币种对应的地址                |
| 总数量（BTC、BCH、LTC） | Y    | totalNum        | String | 50   | Y   | BTC系列（BTC、BCH、LTC）所用字段 |
| 可用数量             | Y    | avaliableNum    | String | 50   | Y   | ETH系列（BTC、BCH、LTC）所用字段 |
| 冻结数量             | Y    | freezeNum       | String | 50   | Y   | 冻结余额（标量），如冻结余额是5，返回是 5 |
| 可用数量转换成usdt      | Y    | equivalentUSDT  | String | 50   | Y   | 单个币种折合                 |
| 冻结数量转换成usdt      | Y    | freezeNumUSDT   | String | 50   | Y   | 单个币种折合                 |
| 折合BTC的量          | N    | equivalentBTC   | String | 50   | Y   | 所有币种折合                 |
| 折合USDT的量         | N    | equivalentUSDT  | String | 50   | Y   | 所有币种折合                 |
| 折合SWFTC的量        | N    | equivalentSWFTC | String | 50   | Y   | 所有币种折合                 |


# 查询订单状态

### &#x20;**1. 接口调用：**

&#x20;`https://{host}/open/api/queryOrderState`

### **2. 请求参数**

| 参数      | 是否必须 | 说明  |
| ------- | ---- | --- |
| orderId | 是    | 订单号 |

### 3.请求参数示例

```yaml
{
	"channelId":"zml-test",
	"orderId":"3a380d57-fe56-41df-a6ba-fda7eac998a3",
	"sign":"DC4C0F038818CCA8076FEE070D93016AC9444E1DAF3F64267F2917C718A89AB6",
	"timestamp":1557657001401
}
```

### 4.Postman示例

![](https://content.gitbook.com/content/CZbt3X4wpzSYqsOt0CQF/blobs/5ieTeYRrEIGgac6ci1IS/cex_orderstate.png)

### 5.返回结果示例

```yaml
{
    "data": {
        "changeType": "simple",
        "choiseFeeType": "4",
        "createTime": "2019-05-10 10:45:41",
        "dealFinishTime": "2019-05-10 10:47:39",
        "dealReceiveCoinAmt": "",
        "depositCoinAmt": "0.01",
        "depositCoinCode": "ETH",
        "depositCoinFeeAmt": "",
        "depositCoinFeeRate": "",
        "depositCoinState": "",
        "destinationAddr": "",
        "detailState": "timeout",
        "orderId": "6019e9ab-9403-4370-bf47-3786ead6ba21",
        "orderState": "timeout",
        "platformAddr": "",
        "receiveCoinAmt": "650.8634",
        "receiveCoinCode": "SWFTC",
        "receiveSwftAmt": "0.65",
        "refundAddr": "",
        "refundCoinAmt": "",
        "refundCoinMinerFee": "",
        "refundDepositTxid": "",
        "refundSwftAmt": "",
        "swftCoinFeeRate": "0.001",
        "swftCoinState": "",
        "swftReceiveAddr": "",
        "swftRefundAddr": "",
        "tradeState": "",
        "transactionId": ""
    },
    "resCode": "800",
    "resMsg": "成功"
}
```

### 6.返回参数说明

返回参数参见[google文档](https://docs.google.com/spreadsheets/d/1LgjKhNGQRL1_TJmzrZfLjqW-FGWcJDI6uuzjuB7aBRM/edit#gid=226416001)

**注意事项**：当 changeType 为 simple时，detailState如果出现timeout状态，则说明账户在扣款时发现抵押不足，将订单置为了无效订单


# 查询兑换记录

### **1. 接口调用：**

&#x20;`https://{host}/open/api/queryWithInThreeMonths`

### **2. 请求参数**

| 字段名称    | 是否数组 | 字段       | 数据类型   | 数据长度 | 必输项 | 备注           |
| ------- | ---- | -------- | ------ | ---- | --- | ------------ |
| 当前页     | N    | pageNum  | String | 10   | N   | eg：1，默认1     |
| 每页显示记录数 | N    | pageSize | String | 10   | N   | eg：200，默认200 |

### 3.请求参数示例

```yaml
{
    "pageNum": "1",
    "sign": "40BCDDD328DC87060350624ED858344F6CF28D239FF57B2D269049B57FED8E8D",
    "timestamp": 1557658505790,
    "channelId": "zml-test"
}
```

### 4.Postman示例

<figure><img src="https://content.gitbook.com/content/CZbt3X4wpzSYqsOt0CQF/blobs/QdBRmjraJ680LGs1V7v1/%E5%9B%BE%E7%89%87.png" alt=""><figcaption></figcaption></figure>

### 5.返回结果示例

```yaml
{
    "data": [
        {
            "orderId": "8c8cc135-9733-449b-a08b-6dad89f96a7d",
            "depositCoinCode": "USDT(HECO)",
            "receiveCoinCode": "USDT(BSC)",
            "depositCoinAmt": "342",
            "receiveCoinAmt": "340.514052",
            "receiveSwftAmt": "313.9",
            "depositCoinState": "already_confirm",
            "platformAddr": "0x7885c588ea05d7831d614d4dee380676bd13c020",
            "depositCoinFeeRate": "0.002",
            "depositCoinFeeAmt": "0.684",
            "swftCoinFeeRate": "0.001",
            "orderState": "wait_send",
            "refundCoinAmt": "",
            "destinationAddr": "0x58Be76e984F22F5E48a1D93DC6e8d1C9FF18b1AD",
            "refundAddr": "0xec76477312875f901bfd95bd485d6643e56d653a",
            "choiseFeeType": "3",
            "detailState": "receive_complete",
            "transactionId": "0x4022ca66acc98497ae3c20b0bfbfa3b653451dec2b888da8429abb874a4a13d6",
            "refundDepositTxid": "",
            "depositTxid": null,
            "dealReceiveCoinAmt": "340.804026",
            "tradeState": "",
            "changeType": "advanced",
            "dealFinishTime": "2022-12-29 08:48:30",
            "createTime": "2022-12-29 08:47:49",
            "completeTime": null,
            "timeoutShowPlatformAddr": "",
            "chainFee": null,
            "depositHashExplore": "",
            "receiveHashExplore": "",
            "refundHashExplore": "",
            "instantRate": "0.995655",
            "isDiscount": "",
            "kycUrl": "",
            "nftUrl": "",
            "isNft": "",
            "payTokenUrl": "",
            "router": null,
            "swftReceiveAddr": "",
            "swftCoinState": "",
            "refundCoinMinerFee": "",
            "refundSwftAmt": "",
            "swftRefundAddr": ""
        },
        {
            "orderId": "270ecbae-7f5c-4667-9c4c-5208eb14c8c9",
            "depositCoinCode": "USDT(BSC)",
            "receiveCoinCode": "USDT(TRON)",
            "depositCoinAmt": "176.4",
            "receiveCoinAmt": "174.983189",
            "receiveSwftAmt": "161.9",
            "depositCoinState": "already_confirm",
            "platformAddr": "0xd82bd5ba852114f747643977f2adcb03b557cc20",
            "depositCoinFeeRate": "0.002",
            "depositCoinFeeAmt": "0.3528",
            "swftCoinFeeRate": "0.001",
            "orderState": "wait_send",
            "refundCoinAmt": "",
            "destinationAddr": "TAKEvWic2cxULySvqAyUzzUVee4pz8wkTr",
            "refundAddr": "0x381480C37b623469afd22541f2Df032208C88A2b",
            "choiseFeeType": "3",
            "detailState": "receive_complete",
            "transactionId": "83a36387eb59bdfb4d3609a45ee4fa402214f64cf252771bba1f93a5dde13649",
            "refundDepositTxid": "",
            "depositTxid": null,
            "dealReceiveCoinAmt": "175.78313",
            "tradeState": "",
            "changeType": "advanced",
            "dealFinishTime": "2022-12-29 08:47:10",
            "createTime": "2022-12-29 08:46:24",
            "completeTime": null,
            "timeoutShowPlatformAddr": "",
            "chainFee": null,
            "depositHashExplore": "",
            "receiveHashExplore": "",
            "refundHashExplore": "",
            "instantRate": "0.991968",
            "isDiscount": "",
            "kycUrl": "",
            "nftUrl": "",
            "isNft": "",
            "payTokenUrl": "",
            "router": null,
            "swftReceiveAddr": "",
            "swftCoinState": "",
            "refundCoinMinerFee": "",
            "refundSwftAmt": "",
            "swftRefundAddr": ""
        },
        {
            "orderId": "33bf8037-f881-42f3-8fbd-543fd8d6ed5a",
            "depositCoinCode": "USDT(HECO)",
            "receiveCoinCode": "USDT(BSC)",
            "depositCoinAmt": "3011",
            "receiveCoinAmt": "3000.180602",
            "receiveSwftAmt": "2763.65",
            "depositCoinState": "already_confirm",
            "platformAddr": "0x2df620b0bb80998783b7d339bf904dd3822a2e9a",
            "depositCoinFeeRate": "0.002",
            "depositCoinFeeAmt": "6.022",
            "swftCoinFeeRate": "0.001",
            "orderState": "wait_send",
            "refundCoinAmt": "",
            "destinationAddr": "0x58Be76e984F22F5E48a1D93DC6e8d1C9FF18b1AD",
            "refundAddr": "0xec76477312875f901bfd95bd485d6643e56d653a",
            "choiseFeeType": "3",
            "detailState": "receive_complete",
            "transactionId": "0x1eef88d0678881c0bd12eff60546a30809df5602aea9382bd11bd83fd7188bca",
            "refundDepositTxid": "",
            "depositTxid": null,
            "dealReceiveCoinAmt": "3000.470533",
            "tradeState": "",
            "changeType": "advanced",
            "dealFinishTime": "2022-12-29 08:45:10",
            "createTime": "2022-12-29 08:44:18",
            "completeTime": null,
            "timeoutShowPlatformAddr": "",
            "chainFee": null,
            "depositHashExplore": "",
            "receiveHashExplore": "",
            "refundHashExplore": "",
            "instantRate": "0.996407",
            "isDiscount": "",
            "kycUrl": "",
            "nftUrl": "",
            "isNft": "",
            "payTokenUrl": "",
            "router": null,
            "swftReceiveAddr": "",
            "swftCoinState": "",
            "refundCoinMinerFee": "",
            "refundSwftAmt": "",
            "swftRefundAddr": ""
        }]
}
```

### 6.返回参数说明

<table><thead><tr><th width="128">字段名称</th><th width="218">字段</th><th width="138">数据类型</th><th width="237">备注</th></tr></thead><tbody><tr><td>订单号</td><td>orderId</td><td>String</td><td>eg：d47e8b9b-c17f-432b-9285-a46c0a3ceb9a</td></tr><tr><td>存币币种</td><td>depositCoinCode</td><td>String</td><td>eg：ETH</td></tr><tr><td>接收币币种</td><td>receiveCoinCode</td><td>String</td><td>eg：BTC</td></tr><tr><td>存币数量    </td><td>depositCoinAmt</td><td>String</td><td>eg：1</td></tr><tr><td>接收币数量     </td><td>receiveCoinAmt </td><td>String</td><td>eg：0.1</td></tr><tr><td>存币地址</td><td>platformAddr</td><td>String</td><td>eg：123123123-232-1231232</td></tr><tr><td>目标币接收地址</td><td>destinationAddr</td><td>String</td><td>"eg: 18orDLFMp3fGoy5Uk93LDGTGbxWEm7b7FY, 如有memo,请讲memo放到地址后，用#分隔，例如：18orDLFMp3fGoy5Uk93LDGTGbxWEm7b7FY#1927632"</td></tr><tr><td>退原币的地址</td><td>refundAddr</td><td>String</td><td>"eg: 18orDLFMp3fGoy5Uk93LDGTGbxWEm7b7FY 如有memo,请讲memo放到地址后，用#分隔，例如：18orDLFMp3fGoy5Uk93LDGTGbxWEm7b7FY#1927632"</td></tr><tr><td>存币的手续费率</td><td>depositCoinFeeRate</td><td>String</td><td>eg：手续费率</td></tr><tr><td>存币的手续费金额     </td><td>depositCoinFeeAmt</td><td>String</td><td>eg：手续费收取的原币的数量</td></tr><tr><td>退币金额</td><td>refundCoinAmt</td><td>String</td><td>eg: 0.98</td></tr><tr><td>兑换成功交易id</td><td>transactionId</td><td>String</td><td>链上交易id，在兑换完成并已发币之后，该字段才会有值</td></tr><tr><td>兑换失败交易id</td><td>refundDepositTxid</td><td>String</td><td>链上交易id，在兑换失败退币情况下，已退币之后，该字段才会有值</td></tr><tr><td>订单状态</td><td>detailState</td><td>String</td><td>"(1)wait_deposit_send:等待存币发送 (2)timeout:超时； (3)wait_exchange_push:等待交换信息推送； (4)wait_exchange_return:等待交换信息返回； (5.1)wait_receive_send:等待接收币种发送, wait_receive_confirm:等待接收币种确认, receive_complete:接收币种确认完成. (5.2)wait_refund_send:等待退原币币种发送, wait_refund_confirm:等待退原币币种确认, refund_complete:退原币币种确认完成； (6)ERROR/error:正在处理的订单 (7)WAIT_KYC: 等待进行KYC或联系客服提供链接"</td></tr><tr><td>实际兑换得到的币的数量</td><td>dealReceiveCoinAmt</td><td>String</td><td> 实际兑换得到的数量,在兑换未完成时，该值为空字符串</td></tr><tr><td>订单完成时间</td><td>completeTime</td><td>String</td><td>订单发币或退币完成时的时间（UTC+8）</td></tr></tbody></table>


# 创建订单

### **1. 接口调用：（限速规则：10次/2s）**

&#x20;`https://{host}/open/api/simpleExchange`

### **2. 请求参数**

| 字段名称   | 字段              | 数据类型   | 数据长度 | 必输项 | 备注                                                                                                 |
| ------ | --------------- | ------ | ---- | --- | -------------------------------------------------------------------------------------------------- |
| 存币币种   | depositCoinCode | String | 30   | Y   | eg：ETH                                                                                             |
| 接收币币种  | receiveCoinCode | String | 30   | Y   | eg：BTC                                                                                             |
| 存币数量   | depositCoinAmt  | String | 50   | Y   | eg：0.01                                                                                            |
| 项目方订单号 | developerId     | String | 50   | N   | 用于记录项目方的订单关联数据，项目方可用该字段来表示该订单归属于自己的某个用户或用于记录自己系统内的订单编号，或其他编号；在订单创建完成后，会回传该字段值（SWFT不支持通过该字段查询寻订单信息） |

### 3.请求参数示例

```yaml
{
	"channelId":"zml-test",
	"depositCoinAmt":"0.01",
	"depositCoinCode":"ETH",
	"developerId":"zml-11111",
	"receiveCoinCOde":"SWFTC",
	"sign":"1A87D09169495065A4DDDB794510C4C0B6AA7C39FACB62406BA5703FC207831F",
	"timestamp":1557661583167
}
```

### 4.Postman示例

![](https://content.gitbook.com/content/CZbt3X4wpzSYqsOt0CQF/blobs/u7Dqfthgdpzi41U9H89Y/cex_createorder.png)

### 5.返回结果示例

```yaml
 {
    "data": {
        "changeType": "simple",
        "choiseFeeType": "4",
        "depositCoinAmt": "0.01",
        "depositCoinCode": "ETH",
        "depositCoinFeeAmt": "",
        "depositCoinFeeRate": "",
        "depositCoinState": "",
        "destinationAddr": "",
        "detailState": "wait_exchange_push",
        "orderId": "e61e20c9-7548-4c81-bdd2-35921510c1b2",
        "orderState": "wait_deposits",
        "platformAddr": "",
        "receiveCoinAmt": "647.854966",
        "receiveCoinCode": "SWFTC",
        "receiveSwftAmt": "0.63",
        "refundAddr": "",
        "refundCoinAmt": "",
        "refundCoinMinerFee": "",
        "refundSwftAmt": "",
        "swftCoinFeeRate": "0.001",
        "swftCoinState": "",
        "swftReceiveAddr": "",
        "developerId": "zml-11111",
        "swftRefundAddr": ""
    },
    "resCode": "800",
    "resMsg": "成功"
}
```

### 6.返回参数说明

| 字段名称     | 字段                 | 数据类型   | 数据长度 | bixu 项 | 备注                                                                                                                                                                                                                                                                                                                                  |
| -------- | ------------------ | ------ | ---- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 订单号      | orderId            | String | 30   | Y      | eg：d47e8b9b-c17f-432b-9285-a46c0a3ceb9a                                                                                                                                                                                                                                                                                             |
| 存币币种     | depositCoinCode    | String | 30   | Y      | eg：ETH                                                                                                                                                                                                                                                                                                                              |
| 接收币币种    | receiveCoinCode    | String | 30   | Y      | eg：BTC                                                                                                                                                                                                                                                                                                                              |
| 存币数量     | depositCoinAmt     | String | 50   | Y      | eg：1                                                                                                                                                                                                                                                                                                                                |
| 接收币数量    | receiveCoinAmt     | String | 50   | Y      | eg：0.1                                                                                                                                                                                                                                                                                                                              |
| 速币数量     | receiveSwftAmt     | String | 50   | Y      | eg：100                                                                                                                                                                                                                                                                                                                              |
| 存币的存放状态  | depositCoinState   | String | 30   | Y      | eg：wait\_send                                                                                                                                                                                                                                                                                                                       |
| 存币地址     | platformAddr       | String | 50   | Y      | eg：123123123-232-1231232                                                                                                                                                                                                                                                                                                            |
| 存币的手续费率  | depositCoinFeeRate | String | 30   | Y      | eg：0.001                                                                                                                                                                                                                                                                                                                            |
| 存币的手续费金额 | depositCoinFeeAmt  | String | 50   | Y      | eg：1                                                                                                                                                                                                                                                                                                                                |
| 速币的手续费率  | swftCoinFeeRate    | String | 30   | Y      | eg：0.0005                                                                                                                                                                                                                                                                                                                           |
| 订单状态     | orderState         | String | 30   | Y      | eg：wait\_deposits                                                                                                                                                                                                                                                                                                                   |
| 速币接收地址   | swftReceiveAddr    | String | 50   | Y      | eg：d47e8b9b-c17f-432b-9285-a46c0a3ceb9a                                                                                                                                                                                                                                                                                             |
| 速币存放状态   | swftCoinState      | String | 30   | Y      | eg：wait\_send                                                                                                                                                                                                                                                                                                                       |
| 退币时的矿工费  | refundCoinMinerFee | String | 50   | Y      | eg: 10                                                                                                                                                                                                                                                                                                                              |
| 退币金额     | refundCoinAmt      | String | 50   | Y      | eg: 0.98                                                                                                                                                                                                                                                                                                                            |
| 退速币金额    | refundSwftAmt      | String | 50   | Y      | eg: 10                                                                                                                                                                                                                                                                                                                              |
| 目标币接收地址  | destinationAddr    | String | 50   | Y      | eg: 18orDLFMp3fGoy5Uk93LDGTGbxWEm7b7FY                                                                                                                                                                                                                                                                                              |
| 退原币的地址   | refundAddr         | String | 50   | Y      | eg: 18orDLFMp3fGoy5Uk93LDGTGbxWEm7b7FY                                                                                                                                                                                                                                                                                              |
| 退手续费的地址  | swftRefundAddr     | String | 50   | Y      | eg: 18orDLFMp3fGoy5Uk93LDGTGbxWEm7b7FY                                                                                                                                                                                                                                                                                              |
| 手续费类型    | choiseFeeType      | String | 50   | Y      | 3-原币模式，4-速币模式                                                                                                                                                                                                                                                                                                                       |
| 详情状态     | detailState        | String | 30   | Y      | <p>(1)wait\_account\_deduct:等待从账户扣款； (2)timeout:超时；</p><p>(3)wait\_exchange\_push:等待交换信息推送； (4)wait\_exchange\_return:等待交换信息返回； (5.1)wait\_receive\_send:等待接收币种发送, wait\_receive\_confirm:等待接收币种确认, receive\_complete:接收币种确认完成. (5.2)wait\_refund\_send:等待退原币币种发送, wait\_refund\_confirm:等待退原币币种确认, refund\_complete:退原币币种确认完成；</p> |
| 兑换方式     | changeType         | String | 20   | Y      | simple：简单兑换、advanced：高级兑换                                                                                                                                                                                                                                                                                                           |


# 聚合交易API接口

## 欢迎来到聚合交易API

本节中您可以了解并使用聚合交易的相关接口

## 聚合交易说明

{% content-ref url="/pages/-LlBsYBoZhkU6Dvr2lUQ" %}
[说明](/ju-he-jiao-yi-api-jie-kou/shuo-ming)
{% endcontent-ref %}

## 签名生成步骤

{% content-ref url="/pages/-LlBttXX08R7N6wBLeIg" %}
[签名生成步骤说明](/ju-he-jiao-yi-api-jie-kou/qian-ming-sheng-cheng-bu-zhou-shuo-ming)
{% endcontent-ref %}

## 账户相关API

{% content-ref url="/pages/-LlBvY7eA7jVznq4iSUQ" %}
[账户余额](/ju-he-jiao-yi-api-jie-kou/zhang-hu-yu-e)
{% endcontent-ref %}

{% content-ref url="/pages/-LlByJ9On641ySR4keES" %}
[单一币种账户余额](/ju-he-jiao-yi-api-jie-kou/dan-yi-bi-zhong-zhang-hu-yu-e)
{% endcontent-ref %}

{% content-ref url="/pages/-LlBzQtyg0vo7eK78a3m" %}
[账户流水详情](/ju-he-jiao-yi-api-jie-kou/zhang-hu-liu-shui-xiang-qing)
{% endcontent-ref %}

## 订单相关API

{% content-ref url="/pages/-LlC4I4nO\_8DLLVV77aU" %}
[下单](/ju-he-jiao-yi-api-jie-kou/xia-dan)
{% endcontent-ref %}

{% content-ref url="/pages/-LlC4KXAZxeDeh\_wFiiu" %}
[撤销订单](/ju-he-jiao-yi-api-jie-kou/che-xiao-ding-dan)
{% endcontent-ref %}

{% content-ref url="/pages/-LlC4PImsoRKHOCugQNB" %}
[获取当前委托订单](/ju-he-jiao-yi-api-jie-kou/gua-dan-ji-lu)
{% endcontent-ref %}

{% content-ref url="/pages/-LlC4ezF\_8WsL1\_Hw8bv" %}
[获取历史成交订单](/ju-he-jiao-yi-api-jie-kou/cha-xun-yi-wan-quan-cheng-jiao-ding-dan)
{% endcontent-ref %}

{% content-ref url="/pages/-LlC4o08ZzEEOMxI70BY" %}
[获取单个订单状态](/ju-he-jiao-yi-api-jie-kou/cha-xun-dan-ge-ding-dan-zhuang-tai)
{% endcontent-ref %}

## 交易相关API

{% content-ref url="/pages/-LlC43JK9zdJhbRUPUJ8" %}
[获取支持的交易对信息](/ju-he-jiao-yi-api-jie-kou/huo-qu-zhi-chi-de-jiao-yi-dui-xin-xi)
{% endcontent-ref %}

{% content-ref url="/pages/-LlC4AWWy2aWjxMRhbQs" %}
[市场深度数据](/ju-he-jiao-yi-api-jie-kou/shi-chang-shen-du-shu-ju)
{% endcontent-ref %}

{% content-ref url="/pages/gXHKFVQQSn5rCRrLkL7m" %}
[最新成交信息](/ju-he-jiao-yi-api-jie-kou/zui-xin-cheng-jiao-xin-xi)
{% endcontent-ref %}

{% content-ref url="/pages/XS1z2ohmbsjkROkaJnjs" %}
[历史成交记录](/ju-he-jiao-yi-api-jie-kou/li-shi-cheng-jiao-ji-lu)
{% endcontent-ref %}

{% content-ref url="/pages/Idel0ydWF3ab5DlbuOMB" %}
[K线数据](/ju-he-jiao-yi-api-jie-kou/k-xian-shu-ju)
{% endcontent-ref %}


# 说明

### API简介

* 欢迎使用API！ 你可以使用此 API 获得市场行情数据，进行交易，并且管理你的账户。

### 请求说明

* 本文档适用于已经在官方申请过渠道号channelId与私钥的合作方
* 合作方要求：提供渠道名称、注册账户

### 事项注意

1. API接口均需要进行签名鉴权，签名方式，参见相关文档.
2. 交易API对接，所有接口应放于服务器端与我们进行交互（接口鉴权密钥放于客户端太过危险）
3. 请求方式为 **POST application/json**
4. 状态码说明：

| 返回码  | 说明               |
| ---- | ---------------- |
| 800  | 成功               |
| 900  | 系统繁忙，请稍后在试       |
| 1100 | 交易对不合法           |
| 1101 | 交易对不存在           |
| 1102 | 深度不存在            |
| 1103 | 交易类型不合法          |
| 1104 | 交易价格不合法          |
| 1105 | 交易价格精度过长         |
| 1106 | 交易数量不合法          |
| 1107 | 交易数量精度过长         |
| 1108 | 最小交易量不能低于0.01    |
| 1109 | 最小交易额度不能低于0.0001 |
| 1110 | 撤销完成             |
| 1111 | 撤销失败             |


# 签名生成步骤说明

**1. 请求公共参数**

| 参数        | 是否必须 | 说明           |
| --------- | ---- | ------------ |
| channelId | 是    | 渠道id         |
| timestamp | 是    | 毫秒时间戳（UTC+8） |
| sign      | 是    | 签名           |

**2. 签名方式**：参考[签名生成](/zhong-xin-hua-dui-huan-api-jie-kou/qian-ming-sheng-cheng-bu-zhou-shuo-ming)


# 账户余额

**1. 接口调用：**

&#x20;`https://{host}/marketApi/accounts`

**2. 请求参数实例**

| 参数        | 是否必须 | 说明           |
| --------- | ---- | ------------ |
| channelId | 是    | 渠道id         |
| timestamp | 是    | 毫秒时间戳（UTC+8） |
| sign      | 是    | 签名           |

3.请求参数示例

```
 {
     "channelId":"swft-channel",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":"1557653925555"
 }
```

4.返回结果示例

```
 {
     "data":[
        {
            "coinCode":"SWFTC",
            "availableAmount":"1022375.469017",
            "freezeAmount":"0"
        },
        {
            "coinCode":"BTC",
            "availableAmount":"1.469017",
            "freezeAmount":"0"
        },
        {
            "coinCode":"ETH",
            "availableAmount":"10.153343",
            "freezeAmount":"0"
        }
    ],
     "resCode": "800",
     "resMsg": "成功"
 }
```

5.返回参数说明

| 字段名称   | 是否数组 | 字段              | 数据类型   | 数据长度 | 必须项 | 备注       |
| ------ | ---- | --------------- | ------ | ---- | --- | -------- |
| 币种简称   | Y    | coinCode        | String | 20   | Y   | eg: BTC  |
| 币种可用余额 | Y    | availableAmount | String | 30   | Y   | eg: 1.46 |
| 币种冻结余额 | Y    | freezeAmount    | String | 30   | Y   | eg: 0.01 |


# 单一币种账户余额

**1. 接口调用：**

&#x20;`https://{host}/marketApi/accountsByCode/{coinCode}`

**2. 请求参数实例**

| 参数        | 是否必须 | 说明           |
| --------- | ---- | ------------ |
| channelId | 是    | 渠道id         |
| timestamp | 是    | 毫秒时间戳（UTC+8） |
| sign      | 是    | 签名           |

3.请求参数示例

```
 {
     "channelId":"swft-channel",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":"1557653925555"
 }
```

4.返回结果示例

```
 {
     "data":{
         "coinCode":"BTC",
         "availableAmount":"1.46",
         "freezeAmount":"0"
     },
     "resCode": "800",
     "resMsg": "成功"
 }
```

5.返回参数说明

| 字段名称   | 是否数组 | 字段              | 数据类型   | 数据长度 | 必须项 | 备注       |
| ------ | ---- | --------------- | ------ | ---- | --- | -------- |
| 币种简称   | Y    | coinCode        | String | 20   | Y   | eg: BTC  |
| 币种可用余额 | Y    | availableAmount | String | 30   | Y   | eg: 1.46 |
| 币种冻结余额 | Y    | freezeAmount    | String | 30   | Y   | eg: 0.01 |


# 账户流水详情

**1. 接口调用：**

&#x20;`https://{host}/marketApi/billRecord`

**2. 请求参数实例**

| 参数        | 是否必须 | 说明           |
| --------- | ---- | ------------ |
| channelId | 是    | 渠道id         |
| timestamp | 是    | 毫秒时间戳（UTC+8） |
| sign      | 是    | 签名           |
| pageNo    | 否    | 当前页数（默认1）    |
| pageSize  | 否    | 每页条数（默认10）   |
| coinCode  | 是    | 币种简称         |

3.请求参数示例

```
 {
     "channelId":"swft-channel",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":"1557653925555",
     "pageNo":"2",
     "pageSize":"10",
     "coinCode":"BTC",
 }
```

4.返回结果示例

```
 {
     "data":{
         "pageContent":[
            {
                "amount":"4.344231",
                "changeAmt":"1",
                "coinCode":"BTC",
                "createTime":"2019-08-02 11:14:00",
                "recordId":"adsjvLP4",
                "type":"trade_deduct"
            },
            {
                "amount":"5.344231",
                "changeAmt":"0.0013",
                "coinCode":"BTC",
                "createTime":"2019-08-03 11:14:00",
                "recordId":"mffeoHl",
                "type":"trade_receive"
            }
        ],
        "pageNo":1,
        "pageSize":10,
        "totalCount":2,
        "totalPage":1
     },
     "resCode": "800",
     "resMsg": "成功"
 }
```

5.返回参数说明

| 字段名称 | 是否数组 | 字段         | 数据类型   | 数据长度 | 必须项 | 备注                             |
| ---- | ---- | ---------- | ------ | ---- | --- | ------------------------------ |
| 当前页数 | N    | pageNo     | Number | 20   | Y   | eg: 1                          |
| 每页条数 | N    | pageSize   | Number | 20   | Y   | eg: 10                         |
| 总记录数 | N    | totalCount | Number | 20   | Y   | eg: 2                          |
| 总页数  | N    | totalPage  | Number | 20   | Y   | eg: 1                          |
| 余额   | Y    | amount     | String | 20   | Y   | eg: 4.32                       |
| 变化数量 | Y    | changeAmt  | String | 20   | Y   | eg: 1                          |
| 币种   | Y    | coinCode   | String | 20   | Y   | eg: BTC                        |
| 流水id | Y    | recordId   | String | 20   | Y   | eg: adsjvLP4                   |
| 流水类型 | Y    | type       | String | 20   | Y   | eg: trade\_deduct              |
| 时间   | Y    | createTime | String | 20   | Y   | eg: 2019-08-03 11:14:00（UTC+8） |


# 下单

**1. 接口调用：**

&#x20;`https://{host}/marketApi/trade`

**2. 请求参数实例**

| 参数        | 是否必须 | 说明               |
| --------- | ---- | ---------------- |
| channelId | 是    | 渠道id             |
| timestamp | 是    | 毫秒时间戳（UTC+8）     |
| sign      | 是    | 签名               |
| tradePair | 是    | 交易对              |
| type      | 是    | 交易类型，取值：buy/sell |
| price     | 是    | 下单价格             |
| amount    | 是    | 下单数量             |

3.请求参数示例

```
 {
     "channelId":"swft-channel",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":"1557653925555",
     "tradePair":"BTC/USDT",
     "type":"buy",
     "price":"1",
     "amount":"1",
 }
```

4.返回结果示例

```
 {
    "data":"",
    "resCode":"800",
    "resMsg":"成功"
}
```


# 撤销订单

**1. 接口调用：**

&#x20;`https://{host}/marketApi/cancel`

**2. 请求参数实例**

| 参数        | 是否必须 | 说明           |
| --------- | ---- | ------------ |
| channelId | 是    | 渠道id         |
| timestamp | 是    | 毫秒时间戳（UTC+8） |
| sign      | 是    | 签名           |
| orderId   | 是    | 订单号          |

3.请求参数示例

```
 {
     "channelId":"swft-channel",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":"1557653925555",
     "orderId":"fmju82Feozm"
 }
```

4.返回结果示例

```
 {
    "data":"",
    "resCode":"800",
    "resMsg":"成功"
}
```


# 获取当前委托订单

**1. 接口调用：**

&#x20;`https://{host}/marketApi/openOrders`

**2. 请求参数实例**

| 参数        | 是否必须 | 说明           |
| --------- | ---- | ------------ |
| channelId | 是    | 渠道id         |
| timestamp | 是    | 毫秒时间戳（UTC+8） |
| sign      | 是    | 签名           |
| pageNo    | 否    | 当前页数（默认1）    |
| pageSize  | 否    | 每页条数（默认10）   |
| tradePair | 是    | 交易对          |

3.请求参数示例

```
 {
     "channelId":"swft-channel",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":"1557653925555",
     "tradePair":"BTC/USDT",
     "pageNo":"1",
     "pageSize":"10"
 }
```

4.返回结果示例

```
 {
    "data":{
        "pageContent":[
            {
                "availCoinCode":"BTC",
                "availTradeCode":"USDT",
                "createTime":"2019-08-02 11:14:00",
                "orderId":"HRwiB8EgFcx5",
                "price":"1",
                "successAmt":"0",
                "totalAmt":"1",
                "tradePair":"BTC/USDT",
                "type":"buy",
                "updateTime":"2019-08-02 11:14:00"
            }
        ],
        "pageNo":1,
        "pageSize":10,
        "totalCount":1,
        "totalPage":1
    },
    "resCode":"800",
    "resMsg":"成功"
}
```

5.返回参数说明

| 字段名称  | 是否数组 | 字段             | 数据类型   | 数据长度 | 必须项 | 备注                             |
| ----- | ---- | -------------- | ------ | ---- | --- | ------------------------------ |
| 当前页数  | N    | pageNo         | Number | 20   | Y   | eg: 1                          |
| 每页条数  | N    | pageSize       | Number | 20   | Y   | eg: 10                         |
| 总记录数  | N    | totalCount     | Number | 20   | Y   | eg: 2                          |
| 总页数   | N    | totalPage      | Number | 20   | Y   | eg: 1                          |
| 订单号   | Y    | orderId        | String | 30   | Y   | eg: Hushjrw8723                |
| 交易币种  | Y    | availCoinCode  | String | 20   | Y   | eg: BTC                        |
| 交易区币种 | Y    | availTradeCode | String | 20   | Y   | eg: USDT                       |
| 交易对   | Y    | tradePair      | String | 20   | Y   | BTC/USDT                       |
| 价格    | Y    | price          | String | 30   | Y   | eg: 0.21312                    |
| 下单数量  | Y    | totalAmt       | String | 30   | Y   | eg: 1                          |
| 成交数量  | Y    | successAmt     | String | 30   | Y   | eg: 0                          |
| 类型    | Y    | type           | String | 20   | Y   | eg: buy                        |
| 创建时间  | Y    | createTime     | String | 30   | Y   | eg: 2019-08-02 11:14:00（UTC+8） |
| 更新时间  | Y    | updateTime     | String | 30   | Y   | eg: 2019-08-02 11:14:00（UTC+8） |

[<br>](https://app.gitbook.com/@swft/s/swft-api/~/drafts/-LlBl-KrTk6q3N5eWaz_/primary/jiao-yi-api-jie-kou/huo-qu-zhi-chi-de-jiao-yi-dui-xin-xi)


# 获取历史成交订单

**1. 接口调用：**

&#x20;`https://{host}/marketApi/historyOrders`

**2. 请求参数实例**

| 参数        | 是否必须 | 说明           |
| --------- | ---- | ------------ |
| channelId | 是    | 渠道id         |
| timestamp | 是    | 毫秒时间戳（UTC+8） |
| sign      | 是    | 签名           |
| pageNo    | 否    | 当前页数（默认1）    |
| pageSize  | 否    | 每页条数（默认10）   |
| tradePair | 是    | 交易对          |

3.请求参数示例

```
 {
     "channelId":"swft-channel",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":"1557653925555",
     "tradePair":"BTC/USDT",
     "pageNo":"1",
     "pageSize":"10"
 }
```

4.返回结果示例

```
 {
    "data":{
        "pageContent":[
            {
                "availCoinCode":"BTC",
                "availTradeCode":"USDT",
                "averagePrice":"",
                "createTime":"2019-07-31 11:12:06",
                "orderId":"gxrn9R0N4weI",
                "price":"1",
                "status":"canceled",
                "successAmt":"0",
                "successTradeAmt":"0",
                "totalAmt":"1",
                "totalTradeAmt":"1",
                "tradeFee":"0",
                "tradePair":"BTC/USDT",
                "type":"buy",
                "updateTime":"2019-07-31 11:12:06"
            }
        ],
        "pageNo":1,
        "pageSize":10,
        "totalCount":60,
        "totalPage":6
    },
    "resCode":"800",
    "resMsg":"成功"
}
```

5.返回参数说明

| 字段名称  | 是否数组 | 字段              | 数据类型   | 数据长度 | 必须项 | 备注                             |
| ----- | ---- | --------------- | ------ | ---- | --- | ------------------------------ |
| 当前页数  | N    | pageNo          | Number | 20   | Y   | eg: 1                          |
| 每页条数  | N    | pageSize        | Number | 20   | Y   | eg: 10                         |
| 总记录数  | N    | totalCount      | Number | 20   | Y   | eg: 2                          |
| 总页数   | N    | totalPage       | Number | 20   | Y   | eg: 1                          |
| 订单号   | Y    | orderId         | String | 30   | Y   | eg: Hushjrw8723                |
| 交易币种  | Y    | availCoinCode   | String | 20   | Y   | eg: BTC                        |
| 交易区币种 | Y    | availTradeCode  | String | 20   | Y   | eg: USDT                       |
| 交易对   | Y    | tradePair       | String | 20   | Y   | BTC/USDT                       |
| 价格    | Y    | price           | String | 30   | Y   | eg: 0.21312                    |
| 下单数量  | Y    | totalAmt        | String | 30   | Y   | eg: 1                          |
| 成交数量  | Y    | successAmt      | String | 30   | Y   | eg: 1                          |
| 总交易额  | Y    | totalTradeAmt   | String | 30   | Y   | eg: 0.21312                    |
| 成交总额  | Y    | successTradeAmt | String | 30   | Y   | eg: 0.21312                    |
| 类型    | Y    | type            | String | 20   | Y   | eg: buy                        |
| 手续费   | Y    | tradeFee        | String | 20   | Y   | eg: 0.000426                   |
| 成交均价  | Y    | averagePrice    | String | 20   | Y   | eg: 0.21312                    |
| 状态    | Y    | status          | String | 30   | Y   | eg: canceled                   |
| 创建时间  | Y    | createTime      | String | 30   | Y   | eg: 2019-08-02 11:14:00（UTC+8） |
| 更新时间  | Y    | updateTime      | String | 30   | Y   | eg: 2019-08-02 11:14:00（UTC+8） |


# 获取单个订单状态

**1. 接口调用：**

&#x20;`https://{host}/marketApi/orders`

**2. 请求参数实例**

| 参数        | 是否必须 | 说明           |
| --------- | ---- | ------------ |
| channelId | 是    | 渠道id         |
| timestamp | 是    | 毫秒时间戳（UTC+8） |
| sign      | 是    | 签名           |
| orderId   | 是    | 订单号          |

3.请求参数示例

```
 {
     "channelId":"swft-channel",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":"1557653925555",
     "orderId":"Huwldef823Fw"
 }
```

4.返回结果示例

```
 {
    "data":{
        "availCoinCode":"BTC",
        "availTradeCode":"USDT",
        "averagePrice":"",
        "createTime":"2019-07-31 11:12:06",
        "orderId":"gxrn9R0N4weI",
        "price":"1",
        "status":"canceled",
        "successAmt":"0",
        "successTradeAmt":"0",
        "totalAmt":"1",
        "totalTradeAmt":"1",
        "tradeFee":"0",
        "tradePair":"BTC/USDT",
        "type":"buy",
        "updateTime":"2019-07-31 11:12:06"
    },
    "resCode":"800",
    "resMsg":"成功"
}
```

5.返回参数说明

| 字段名称  | 是否数组 | 字段              | 数据类型   | 数据长度 | 必须项 | 备注                             |
| ----- | ---- | --------------- | ------ | ---- | --- | ------------------------------ |
| 订单号   | Y    | orderId         | String | 30   | Y   | eg: Hushjrw8723                |
| 交易币种  | Y    | availCoinCode   | String | 20   | Y   | eg: BTC                        |
| 交易区币种 | Y    | availTradeCode  | String | 20   | Y   | eg: USDT                       |
| 交易对   | Y    | tradePair       | String | 20   | Y   | BTC/USDT                       |
| 价格    | Y    | price           | String | 30   | Y   | eg: 0.21312                    |
| 下单数量  | Y    | totalAmt        | String | 30   | Y   | eg: 1                          |
| 成交数量  | Y    | successAmt      | String | 30   | Y   | eg: 1                          |
| 总交易额  | Y    | totalTradeAmt   | String | 30   | Y   | eg: 0.21312                    |
| 成交总额  | Y    | successTradeAmt | String | 30   | Y   | eg: 0.21312                    |
| 类型    | Y    | type            | String | 20   | Y   | eg: buy                        |
| 手续费   | Y    | tradeFee        | String | 20   | Y   | eg: 0.000426                   |
| 成交均价  | Y    | averagePrice    | String | 20   | Y   | eg: 0.21312                    |
| 状态    | Y    | status          | String | 30   | Y   | eg: canceled                   |
| 创建时间  | Y    | createTime      | String | 30   | Y   | eg: 2019-08-02 11:14:00（UTC+8） |
| 更新时间  | Y    | updateTime      | String | 30   | Y   | eg: 2019-08-02 11:14:00（UTC+8） |


# 获取支持的交易对信息

**1. 接口调用：**

&#x20;`https://{host}/marketApi/loadPair`

**2. 请求参数实例**

| 参数        | 是否必须 | 说明           |
| --------- | ---- | ------------ |
| channelId | 是    | 渠道id         |
| timestamp | 是    | 毫秒时间戳（UTC+8） |
| sign      | 是    | 签名           |

3.请求参数示例

```
 {
     "channelId":"swft-channel",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":"1557653925555"
 }
```

4.返回结果示例

```
 {
    "data":[
        {
            "allowCoinLow":"0.001",
            "allowTradeLow":"0.000001",
            "tradeCode":"USDT",
            "tradeNumAccuracy":6,
            "tradePair":"BTC/USDT",
            "tradePriceAccuracy":2
        },
        {
            "allowCoinLow":"0.001",
            "allowTradeLow":"0.000001",
            "tradeCode":"USDT",
            "tradeNumAccuracy":6,
            "tradePair":"ETH/USDT",
            "tradePriceAccuracy":2
        }
    ],
    "resCode":"800",
    "resMsg":"成功"
}
```

5.返回参数说明

| 字段名称    | 是否数组 | 字段                 | 数据类型   | 数据长度 | 必须项 | 备注           |
| ------- | ---- | ------------------ | ------ | ---- | --- | ------------ |
| 最小允许交易量 | Y    | allowCoinLow       | String | 20   | Y   | eg: 0.001    |
| 最小允许交易额 | Y    | allowTradeLow      | String | 20   | Y   | eg: 0.000001 |
| 交易币种    | Y    | tradeCode          | String | 20   | Y   | eg: USDT     |
| 交易对     | Y    | tradePair          | String | 20   | Y   | eg: ETH/USDT |
| 交易数量精度  | Y    | tradeNumAccuracy   | Number | 2    | Y   | eg: 2        |
| 交易额精度   | Y    | tradePriceAccuracy | Number | 2    | Y   | eg: 6        |

‌

‌

[<br>](https://app.gitbook.com/@swft/s/swft-api/~/drafts/-LlBl-KrTk6q3N5eWaz_/primary/jiao-yi-api-jie-kou/dan-yi-bi-zhong-zhang-hu-yu-e)


# 市场深度数据

**1. 接口调用：**

&#x20;`https://{host}/marketApi/depth`

**2. 请求参数实例**

| 参数        | 是否必须 | 说明                 |
| --------- | ---- | ------------------ |
| channelId | 是    | 渠道id               |
| timestamp | 是    | 毫秒时间戳（UTC+8）       |
| sign      | 是    | 签名                 |
| tradePair | 是    | 交易对                |
| depth     | 是    | 深度聚合，取值1,2,3,4,5,6 |

3.请求参数示例

```
 {
     "channelId":"swft-channel",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":"1557653925555",
     "tradePair":"BTC/USDT",
     "depth":"1"
 }
```

4.返回结果示例

```
 {
    "data":{
        "buyOrders":[
            [
                "10395.67",
                "0.006137"
            ],
            [
                "10393.50",
                "4.741722"
            ]
        ],
        "sellOrders":[
            [
                "10392.33",
                "0.097679"
            ],
            [
                "10392.39",
                "1.593146"
            ]
        ],
        "latestPrice":"10392.33",
        "latestType":"buy"
    },
    "resCode":"800",
    "resMsg":"成功"
}
```

5.返回参数说明

| 字段名称   | 是否数组 | 字段          | 数据类型   | 数据长度 | 必须项 | 备注           |
| ------ | ---- | ----------- | ------ | ---- | --- | ------------ |
| 当前买单   | Y    | buyOrders   | Array  | -    | Y   | eg: array    |
| 当前卖单   | Y    | sellOrders  | Array  | -    | Y   | eg: array    |
| 最新价格   | N    | latestPrice | String | 20   | Y   | eg: 10392.33 |
| 最新交易类型 | N    | latestType  | String | 20   | Y   | eg: sell/buy |


# 最新成交信息

#### 1.接口调用：

`https://{host}/marketApi/history/detail`

#### 2.**请求参数实例**

| 参数        | 是否必须 | 说明           |
| --------- | ---- | ------------ |
| channelId | 是    | 渠道id         |
| timestamp | 是    | 毫秒时间戳（UTC+8） |
| sign      | 是    | 签名           |
| symbol    | 是    | 交易对信息        |

3.请求参数示例

* ```
   {
       "channelId":"swft-channel",
       "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
       "timestamp":"1557653925555",
       "symbol":"BTC/USDT"
   }
  ```

4.返回结果示例

* ```
  {
      "data":{
          "amount":"19607",
          "close":"64816.58",
          "direction":"sell",
          "high":"66961.43",
          "latestAmount":"0.001731",
          "latestPrice":"64812.59",
          "latestPriceRMB":"414800.57",
          "latestPriceUSDT":"64812.59",
          "low":"63679.00",
          "open":"63780.05",
          "percentage":"+1.59%",
          "ts":1634796068,
          "type":"up",
          "vol":"1281488695"
      },
      "resCode":"800",
      "resMsg":"成功",
      "resMsgEn":""
  }
  ```

5.返回参数说明

<table><thead><tr><th width="276">字段名称</th><th>是否数组</th><th>字段</th><th>数据类型</th></tr></thead><tbody><tr><td>数量</td><td>Y</td><td>amount</td><td>String</td></tr><tr><td>收盘价格</td><td>Y</td><td>close</td><td>String</td></tr><tr><td>交易方向</td><td>Y</td><td>direction</td><td>String</td></tr><tr><td>最高价格</td><td>Y</td><td>high</td><td>String</td></tr><tr><td>最新一笔交易数量</td><td>Y</td><td>latestAmount</td><td>String</td></tr><tr><td>最新一笔交易价格</td><td>Y</td><td>latestPrice</td><td>String</td></tr><tr><td>最新一笔交易价格（RMB）</td><td>Y</td><td>latestPriceRMB</td><td>String</td></tr><tr><td>最新一笔交易价格（USDT)</td><td>Y</td><td>latestPriceUSDT</td><td>String</td></tr><tr><td>最低价格</td><td>Y</td><td>low</td><td>String</td></tr><tr><td>开盘价格</td><td>Y</td><td>open</td><td>String</td></tr><tr><td>涨跌幅度</td><td>Y</td><td>percentage</td><td>String</td></tr><tr><td>毫秒时间戳（UTC+8）</td><td>Y</td><td>ts</td><td>String</td></tr><tr><td>涨跌趋势</td><td>Y</td><td>type</td><td>String</td></tr><tr><td>成交总量</td><td>Y</td><td>vol</td><td>String</td></tr></tbody></table>


# 历史成交记录

**1. 接口调用：**

&#x20;`https://{host}/marketApi/history/trade`

**2. 请求参数实例**

| 参数        | 是否必须 | 说明           |
| --------- | ---- | ------------ |
| channelId | 是    | 渠道id         |
| timestamp | 是    | 毫秒时间戳（UTC+8） |
| sign      | 是    | 签名           |
| symbol    | 是    | 交易对信息        |

#### 3.请求参数示例

```
 {
     "channelId":"channel",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":"1557653925555",
     "symbol":"BTC/USDT"
 }
```

4.返回结果示例

```
{
    "data":[
        {
            "amount":"0.016019",
            "direction":"buy",
            "price":"64486.20",
            "trade-id":102547488829,
            "ts":1634798182
        },
        {
            "amount":"0.000004",
            "direction":"sell",
            "price":"64479.12",
            "trade-id":102547488828,
            "ts":1634798182
        },
        {
            "amount":"0.098946",
            "direction":"buy",
            "price":"64505.74",
            "trade-id":102547488447,
            "ts":1634798098
        }
    ],
    "resCode":"800",
    "resMsg":"成功",
    "resMsgEn":""
}
```

5.返回参数说明

| 字段名称         | 是否数组 | 字段        | 数据类型   |
| ------------ | ---- | --------- | ------ |
| 数量           | 是    | amount    | String |
| 交易方向         | 是    | direction | String |
| 价格           | 是    | price     | String |
| 订单id         | 是    | trade-id  | String |
| 毫秒时间戳（UTC+8） | 是    | ts        | String |


# K线数据

**1. 接口调用：**

&#x20;`https://{host}/market/history/kline`&#x20;

**2. 请求参数实例**

| 参数        | 是否必须 | 说明                                                                               |
| --------- | ---- | -------------------------------------------------------------------------------- |
| channelId | 是    | 渠道id                                                                             |
| timestamp | 是    | 毫秒时间戳（UTC+8）                                                                     |
| sign      | 是    | 签名                                                                               |
| symbol    | 是    | 交易对信息                                                                            |
| period    | 是    | 返回数据时间粒度，也就是每根蜡烛的时间区间(1min, 5min, 15min, 30min, 60min, 1day, 1mon, 1week, 1year) |

#### 3.请求参数示例

```
 {
     "channelId":"channel",
     "sign":"102027D292DD0707E0D899459D91C759858D7367D223CB239A8EC3A90C30B122",
     "timestamp":"1557653925555",
     "symbol":"BTC/USDT",
     "period":"5min"
 }
```

#### 4.返回结果示例

```
{
  "data":[
    {
      "amount":"9",
      "close":"64584.05",
      "count":728,
      "high":"64678.86",
      "low":"64542.78",
      "open":"64640.77",
      "ts":"1634799300",
      "vol":"598187"
    },
    {
      "amount":"27",
      "close":"64644.22",
      "count":1605,
      "high":"64673.56",
      "low":"64403.50",
      "open":"64503.61",
      "ts":"1634799000",
      "vol":"1784771"
    },
    {
      "amount":"43",
      "close":"64503.61",
      "count":2806,
      "high":"64537.95",
      "low":"64165.55",
      "open":"64267.67",
      "ts":"1634798700",
      "vol":"2785947"
    },
    {
      "amount":"10",
      "close":"63798.99",
      "count":793,
      "high":"63821.82",
      "low":"63732.67",
      "open":"63770.11",
      "ts":"1634709600",
      "vol":"694601"
    }
  ],
  "resCode":"800",
  "resMsg":"成功",
  "resMsgEn":""
}
```

5.返回参数说明

| 字段名称         | 是否数组 | 字段     | 数据类型   |
| ------------ | ---- | ------ | ------ |
| 交易数量         | Y    | amount | String |
| 闭盘价格         | Y    | close  | String |
| 交易笔数         | Y    | count  | String |
| 最高价格         | Y    | high   | String |
| 最低价格         | Y    | low    | String |
| 开盘价格         | Y    | open   | String |
| 毫秒时间戳（UTC+8） | Y    | ts     | String |
| 成交总量         | Y    | vol    | String |


# NFT API

## 欢迎来到NFT API

在这里, 您可以使用NFT相关功能

## NFT API说明

{% content-ref url="/pages/6yi5XZqK5f60lejEvtfo" %}
[说明](/nft-api/shuo-ming)
{% endcontent-ref %}

## 相关API

{% content-ref url="/pages/cJtO0ynDVpTPmOQkzpUN" %}
[获取基本NFT列表](/nft-api/huo-qu-ji-ben-nft-lie-biao)
{% endcontent-ref %}

{% content-ref url="/pages/IL1HdDh41hkYfvltYzsz" %}
[获取具体分类NFT列表](/nft-api/huo-qu-ju-ti-fen-lei-nft-lie-biao)
{% endcontent-ref %}

{% content-ref url="/pages/PNNxIKfm94n6XrE903eE" %}
[询价](/nft-api/xun-jia)
{% endcontent-ref %}

{% content-ref url="/pages/jCS2fupCs94BRfLVri9J" %}
[获取账号的NFT](/nft-api/huo-qu-zhang-hao-de-nft)
{% endcontent-ref %}

{% content-ref url="/pages/r1cqg77gVvvtOfHpM7My" %}
[下单](/nft-api/xia-dan)
{% endcontent-ref %}

{% content-ref url="/pages/ymadIT4wxj1fCgzFicyp" %}
[为对应订单赋值存币哈希](/nft-api/wei-dui-ying-ding-dan-fu-zhi-cun-bi-ha-xi)
{% endcontent-ref %}

{% content-ref url="/pages/rmh2vQsTN2Tcf9tYxM0U" %}
[查询交易记录列表](/nft-api/cha-xun-jiao-yi-ji-lu-lie-biao)
{% endcontent-ref %}

{% content-ref url="/pages/ABDodepD1M9vYlubEPNn" %}
[查询订单详情信息](/nft-api/cha-xun-ding-dan-xiang-qing-xin-xi)
{% endcontent-ref %}


# 说明

### 事项注意

1. 请求方式为 **POST application/json**
2. 状态码说明：

| 返回码   | 说明                    |
| ----- | --------------------- |
| 800   | 成功                    |
| 50003 | 当前NFT不支持该币种兑换，请重新选择   |
| 50004 | 暂不支持出售NFT             |
| 50005 | 暂不支持购买NFT             |
| 50006 | 当前NFT价格无法覆盖手续费，暂不支持出售 |
| 999   | 不可重复购买或出售该NFT         |


# 获取基本NFT列表

**1. 接口调用：**

`https://{host}/gt/swap/path/v1/getBaseInfo`

**2. 请求参数实例**

| 参数          | 是否必须 | 说明                            |
| ----------- | ---- | ----------------------------- |
| keywords    | 是    | 搜索关键字                         |
| page        | 是    | 页数(默认：1)                      |
| pageSize    | 是    | 条数(默认 : 50)                   |
| type        | 是    | 类型:平台/主题(collection/platfrom) |
| equipmentNo | 否    | 设备编号                          |
| sessionUuid | 否    | 用户唯一的登录标识sessionId            |
| sourceFlag  | 否    | 订单来源用于标识是哪个平台创建的订单，请联系我们设置    |
| sourceType  | 否    | 请求来源设备(IOS,Android,h5)        |
| userNo      | 否    | 用户名                           |

#### 3.请求参数示例

```
{
	"equipmentNo": "",
	"keywords": "",
	"page": 1,
	"pageSize": 50,
	"sessionUuid": "",
	"sourceFlag": "",
	"sourceType": "",
	"type": "collection",
	"userNo": ""
}
```

#### 4.返回结果示例

```
{
	"data": {
		"lists": [
			{
				"contractAddress": "",
				"currentPrice": "",
				"id": "",
				"imageUrl": "",
				"isSupportAny": 0,
				"itemNum": "",
				"mainnet": "",
				"name": "",
				"ownerAddress": "",
				"paymentContract": "",
				"paymentDecimals": "",
				"paymentTokenName": "",
				"paymentUrl": "",
				"platformId": "",
				"platformUrl": "",
				"tokenId": "",
				"type": ""
			}
		],
		"total": 0
	},
	"resCode": "800",
	"resMsg": "success"
}
```


# 获取具体分类NFT列表

**1. 接口调用：**

`https://{host}/gt/swap/path/v1/getLists`

**2. 请求参数实例**

| 参数          | 是否必须 | 说明                                                                                 |
| ----------- | ---- | ---------------------------------------------------------------------------------- |
| buyNow      | 是    | 是否可以购买(默认：1)                                                                       |
| page        | 是    | 页数(默认：1)                                                                           |
| pageSize    | 是    | 条数(默认 : 50)                                                                        |
| chain       | 是    | <p>分类为</p><p>主题：""                                   平台：BSC,ETH,POLYGON三种或其中一种</p> |
| keywords    | 是    | 搜索关键字                                                                              |
| priceOrder  | 是    | 价格排序(默认：asc)                                                                       |
| type        | 是    | 类型:平台/主题(collection/platfrom)                                                      |
| keyId       | 是    | 具体NFT分类ID                                                                          |
| equipmentNo | 否    | 设备编号                                                                               |
| sessionUuid | 否    | 用户唯一的登录标识sessionId                                                                 |
| sourceFlag  | 否    | 订单来源用于标识是哪个平台创建的订单，请联系我们设置                                                         |
| sourceType  | 否    | 请求来源设备(IOS,Android,h5)                                                             |
| userNo      | 否    | 用户名                                                                                |

#### 3.请求参数示例

```
{
	"buyNow": "1",
	"chain": "BSC",
	"equipmentNo": "",
	"keyId": "",
	"keywords": "",
	"page": 0,
	"pageSize": 0,
	"priceOrder": "asc",
	"sessionUuid": "",
	"sourceFlag": "",
	"sourceType": "",
	"type": "collection",
	"userNo": ""
}
```

#### 4.返回结果示例

```
{
	"data": {
		"collections": [
			{
				"collectionId": "",
				"imageUrl": "",
				"name": ""
			}
		],
		"lists": [
			{
				"contractAddress": "",
				"currentPrice": "",
				"id": "",
				"imageUrl": "",
				"isSupportAny": 0,
				"itemNum": "",
				"mainnet": "",
				"name": "",
				"ownerAddress": "",
				"paymentContract": "",
				"paymentDecimals": "",
				"paymentTokenName": "",
				"paymentUrl": "",
				"platformId": "",
				"platformUrl": "",
				"tokenId": "",
				"type": ""
			}
		],
		"total": 0
	},
	"resCode": "800",
	"resMsg": "success"
}
```


# 询价

**1. 接口调用：**

`https://{host}/gt/swap/path/v1/quote`

**2. 请求参数实例**

| 参数               | 是否必须 | 说明                                             |
| ---------------- | ---- | ---------------------------------------------- |
| coinCode         | 是    | 币种                                             |
| fromAddress      | 是    | 用户的钱包地址                                        |
| fromTokenAddress | 是    | 买：不需要传                        卖：nft的合约地址       |
| fromTokenChain   | 是    | nft主网                                          |
| nftId            | 是    | 买： nft的ID                               卖：不需要传 |
| orderSide        | 是    | 0--卖 1--买                                      |
| paymentContract  | 是    | 买：不需要传                             卖：目标币的合约地址  |
| platformId       | 是    | 平台/主题ID                                        |
| tokenId          | 是    | 买：不需要传                             卖：nft的ID    |
| equipmentNo      | 否    | 设备编号                                           |
| sessionUuid      | 否    | 用户唯一的登录标识sessionId                             |
| sourceFlag       | 否    | 订单来源用于标识是哪个平台创建的订单，请联系我们设置                     |
| sourceType       | 否    | 请求来源设备(IOS,Android,h5)                         |
| userNo           | 否    | 用户名                                            |

#### 3.请求参数示例

```
{
	"coinCode": "",
	"equipmentNo": "",
	"fromAddress": "",
	"fromTokenAddress": "",
	"fromTokenChain": "",
	"nftId": "",
	"orderSide": "",
	"paymentContract": "",
	"platformId": "",
	"sessionUuid": "",
	"sourceFlag": "",
	"sourceType": "",
	"tokenId": "",
	"userNo": ""
}
```

#### 4.返回结果示例

```
{
	"data": {
		"baseCoinCode": "",
		"buyWithOrigin": true,
		"dex": "",
		"fee": "",
		"feeToken": "",
		"fromTokenAmount": "",
		"fromTokenDecimal": "",
		"logoUrl": "",
		"path": [],
		"paymentInfo": {},
		"platformId": "",
		"toTokenAmount": "",
		"toTokenDecimal": "",
		"txInfo": {},
		"userCoinAmt": "",
		"userCoinCode": ""
	},
	"resCode": "800",
	"resMsg": "success"
}
```


# 获取账号的NFT

**1. 接口调用：**

`https://{host}/gt/swap/path/v1/getOwnedAssets`

**2. 请求参数实例**

| 参数          | 是否必须 | 说明                         |
| ----------- | ---- | -------------------------- |
| owner       | 是    | 用户钱包地址                     |
| page        | 是    | 页数(默认：1)                   |
| pageSize    | 是    | 条数(默认：50)                  |
| keywords    | 是    | 搜索关键字                      |
| equipmentNo | 否    | 设备编号                       |
| sessionUuid | 否    | 用户唯一的登录标识sessionId         |
| sourceFlag  | 否    | 订单来源用于标识是哪个平台创建的订单，请联系我们设置 |
| sourceType  | 否    | 请求来源设备(IOS,Android,h5)     |
| userNo      | 否    | 用户名                        |

#### 3.请求参数示例

```
{
	"equipmentNo": "",
	"owner": "",
	"keywords":"",
	"page":1,
	"pageSize": 50,
	"sessionUuid": "",
	"sourceFlag": "",
	"sourceType": "",
	"userNo": ""
}
```

#### 4.返回结果示例

```
{
	"data": {
		"assets": [
			{
				"canSell": "",
				"contractAddr": "",
				"imageUrl": "",
				"mainnet": "",
				"name": "",
				"paymentInfo": {},
				"platformId": "",
				"tokenId": ""
			}
		]
	},
	"resCode": "800",
	"resMsg": "success"
}
```


# 下单

**1. 接口调用：**

`https://{host}/gt/swap/path/v1/placeOrder`

**2. 请求参数实例**

| 参数              | 是否必须 | 说明                                                   |
| --------------- | ---- | ---------------------------------------------------- |
| depositCoinCode | 是    | 买:用户自定义币种                卖: nft 合约地址                 |
| receiveCoinCode | 是    | 买: nft的Id;                                卖: 用户自定义币种 |
| fromTokenChain  | 是    | 买：不需要传                         卖：nft主网               |
| nftLogoUrl      | 是    | 买：不需要传                        卖： nft 图片              |
| nftName         | 是    | 买：不需要传                        卖： nft 名称              |
| orderSide       | 是    | 0--卖 1--买                                            |
| paymentContract | 是    | 买：不需要传                        卖：基本币的合约地址             |
| platformId      | 是    | 平台Id                                                 |
| refundAddr      | 是    | 退币地址                                                 |
| tokenId         | 是    | 买：不需要传                        卖：nft的 tokenId         |
| userAddr        | 是    | 用户收币地址                                               |
| equipmentNo     | 否    | 设备编号                                                 |
| sessionUuid     | 否    | 用户唯一的登录标识sessionId                                   |
| sourceFlag      | 否    | 订单来源用于标识是哪个平台创建的订单，请联系我们设置                           |
| sourceType      | 否    | 请求来源设备(IOS,Android,h5)                               |
| userNo          | 否    | 用户名                                                  |

#### 3.请求参数示例

```
{
	"depositCoinCode": "",
	"equipmentNo": "",
	"fromTokenChain": "",
	"nftLogoUrl": "",
	"nftName": "",
	"orderSide": "",
	"paymentContract": "",
	"platformId": "",
	"receiveCoinCode": "",
	"refundAddr": "",
	"sessionUuid": "",
	"sourceFlag": "",
	"sourceType": "",
	"tokenId": "",
	"userAddr": "",
	"userNo": ""
}
```

#### 4.返回结果示例

```
{
	"data": {
		"depositCoinAmt": "",
		"depositCoinCode": "",
		"destinationAddr": "",
		"equipmentNo": "",
		"isNft": "",
		"nftId": "",
		"nftLogoUrl": "",
		"nftName": "",
		"orderId": "",
		"orderSide": "",
		"orderStatus": "",
		"platformAddr": "",
		"receiveCoinAmt": "",
		"receiveCoinCode": "",
		"refundAddr": "",
		"router": "",
		"txInfo": {},
		"userAddr": ""
	},
	"resCode": "800",
	"resMsg": "success"
}
```


# 为对应订单赋值存币哈希

**1. 接口调用：**

`https://{host}/gt/swap/path/v1/modifyDepositTxId`

**2. 请求参数实例**

| 参数              | 是否必须 | 说明                         |
| --------------- | ---- | -------------------------- |
| depositTxid     | 是    | 交易哈希                       |
| platformAddress | 是    | 复用地址                       |
| userAddress     | 是    | 用户地址                       |
| orderId         | 是    | 订单号                        |
| equipmentNo     | 否    | 设备编号                       |
| sessionUuid     | 否    | 用户唯一的登录标识sessionId         |
| sourceFlag      | 否    | 订单来源用于标识是哪个平台创建的订单，请联系我们设置 |
| sourceType      | 否    | 请求来源设备(IOS,Android,h5)     |
| userNo          | 否    | 用户名                        |

#### 3.请求参数示例

```
{
	"depositTxid": "",
	"equipmentNo": "",
	"orderId": "",
	"platformAddress": "",
	"sessionUuid": "",
	"sourceFlag": "",
	"sourceType": "",
	"userAddress": "",
	"userNo": ""
}
```

#### 4.返回结果示例

```
{
	"data": "",
	"resCode": "800",
	"resMsg": "success"
}
```


# 查询交易记录列表

**1. 接口调用：**

`https://{host}/gt/swap/path/v1/queryAllNftTrade`

**2. 请求参数实例**

| 参数          | 是否必须 | 说明                         |
| ----------- | ---- | -------------------------- |
| orderSide   | 是    | 0:卖/1:买,不传默认查所有            |
| page        | 是    | 页数(默认：1)                   |
| pageSize    | 是    | 条数(默认 : 50)                |
| equipmentNo | 否    | 设备编号                       |
| sessionUuid | 否    | 用户唯一的登录标识sessionId         |
| sourceFlag  | 否    | 订单来源用于标识是哪个平台创建的订单，请联系我们设置 |
| sourceType  | 否    | 请求来源设备(IOS,Android,h5)     |
| userNo      | 否    | 用户名                        |

#### 3.请求参数示例

```
{
	"equipmentNo": "",
	"orderSide": "",
	"pageNo": 0,
	"pageSize": 0,
	"sessionUuid": "",
	"sourceFlag": "",
	"sourceType": "",
	"userNo": ""
}
```

#### 4.返回结果示例

```
{
	"data": {
		"pageContent": [
			{
				"createTime": "",
				"depositCoinAmt": "",
				"depositCoinCode": "",
				"equipmentNo": "",
				"isNft": "",
				"nftLogoUrl": "",
				"nftName": "",
				"orderId": "",
				"orderSide": "",
				"orderStatus": "",
				"platformAddr": "",
				"receiveCoinAmt": "",
				"receiveCoinCode": "",
				"refundAddr": "",
				"refundCoinAmt": "",
				"router": "",
				"transactionHash": "",
				"userAddr": ""
			}
		],
		"pageNo": 0,
		"pageSize": 0,
		"totalCount": 0,
		"totalPage": 0
	},
	"resCode": "800",
	"resMsg": "success"
}
```


# 查询订单详情信息

**1. 接口调用：**

`https://{host}/gt/swap/path/v1/queryOrderState`

**2. 请求参数实例**

| 参数          | 是否必须 | 说明                         |
| ----------- | ---- | -------------------------- |
| orderId     | 是    | 订单号                        |
| equipmentNo | 否    | 设备编号                       |
| sessionUuid | 否    | 用户唯一的登录标识sessionId         |
| sourceFlag  | 否    | 订单来源用于标识是哪个平台创建的订单，请联系我们设置 |
| sourceType  | 否    | 请求来源设备(IOS,Android,h5)     |
| userNo      | 否    | 用户名                        |

#### 3.请求参数示例

```
{
	"equipmentNo": "",
	"orderId": "",
	"sessionUuid": "",
	"sourceFlag": "",
	"sourceType": "",
	"userNo": ""
}
```

#### 4.返回结果示例

```
{
	"data": {
		"createTime": "",
		"depositCoinAmt": "",
		"depositCoinCode": "",
		"depositHashExplore": "",
		"depositTxid": "",
		"destinationAddr": "",
		"equipmentNo": "",
		"isNft": "",
		"nftId": "",
		"nftLogoUrl": "",
		"nftName": "",
		"orderId": "",
		"orderSide": "",
		"orderStatus": "",
		"platformAddr": "",
		"receiveCoinAmt": "",
		"receiveCoinCode": "",
		"receiveHashExplore": "",
		"refundAddr": "",
		"refundCoinAmt": "",
		"refundDepositTxid": "",
		"refundHashExplore": "",
		"router": "",
		"transactionHash": "",
		"transactionId": "",
		"userAddr": ""
	},
	"resCode": "800",
	"resMsg": "success"
}
```


# 支付API

## 支付相关说明

{% content-ref url="/pages/-LbSf6Sqc\_VplDK\_gqH6" %}
[支付API](/zhi-fu-api/zhi-fu-api)
{% endcontent-ref %}


# 支付API

### 请求说明

* 本文档适用于已经在官方申请过渠道号channelId与私钥的合作方
* 合作方要求：提供渠道名称、注册账户

### 流程图

![](https://content.gitbook.com/content/CZbt3X4wpzSYqsOt0CQF/blobs/p0qIKRmLUmTHlHNOmwy8/swftpay.png)

![](file://D:/work/swftcoin/swft-h5/swft-api/images/swftpay.png?lastModify=1554203813)

#### 接入流程：

&#x20;①开发者调用创建支付订单接口，创建支付订单；

&#x20;②返回支付页面链接，用户进行付款；

&#x20;③获取支付结果，以下两种方式都可行：

&#x20;ⅰ开发者提供支付完成通知接口，用户完成支付后，我们调用该接口进行通知；

&#x20;ⅱ 开发者调用查询订单状态接口，获取订单支付结果状态。

### 接口列表

| 请求类型                  | 请求方法                   | 描述     | 接口示例 |
| --------------------- | ---------------------- | ------ | ---- |
| POST application/json | api/pay/createPayOrder | 创建支付订单 | 代码示例 |
| POST application/json | api/pay/queryPayOrder  | 查询订单状态 | 代码示例 |
| POST application/json | 由开发者提供                 | 支付完成通知 |      |

#### 创建支付订单

#### api/pay/createPayOrder

#### 说明

合作方调用该接口，创建收款订单

#### 请求参数

| 参数名称           | 是否必须 | 数据类型   | 描述     | 默认值 | 取值范围                          |
| -------------- | ---- | ------ | ------ | --- | ----------------------------- |
| channelId      | 是    | String | 渠道编号   |     | 由我们官方提供，eg：payaaa201903212028 |
| channelName    | 是    | String | 渠道名称简写 |     | 开发者提供给我们，eg：xxMall            |
| sign           | 是    | String | 签名     |     | 参见签名生成                        |
| timestamp      | 是    | Long   | 时间戳    |     | 毫秒时间戳                         |
| channelOrderId | 否    | String | 渠道订单Id |     | 开发者自定义                        |
| channelUserNo  | 否    | String | 渠道用户名  |     | 开发者自定义                        |
| coinCode       | 是    | String | 付款币种名称 |     | eg：ETH                        |
| amount         | 是    | String | 付款金额   |     | eg：1                          |
| remark         | 否    | String | 备注     |     | 订单备注                          |

#### 响应参数

```yaml
 {
     "data": {
         "amount": "2",
         "channelOrderId": "channelorder001",
         "channelUserNo": "xxMall_zhangsan",
         "coinCode": "ETH",
         "payId": "jpedyB3T",
         "payUrl": "{host}/swft-v3/PayAPI.html?payID=jpedyB3T",
         "remark": "zhangsan pay to xxMall"
     },
     "resCode": "800",
     "resMsg": "成功"
 }
```

#### data说明

```yaml
 {
     "amount": "付款金额",
     "channelOrderId": "渠道订单号",
     "channelUserNo": "渠道用户名",
     "coinCode": "付款币种",
     "payId": "支付订单号",
     "payUrl": "支付页面链接",
     "remark": "备注"
 }
```

#### 查询订单状态

#### api/pay/queryPayOrder

#### 说明

查询支付订单状态接口

#### 请求参数

| 参数名称      | 是否必须 | 数据类型   | 描述     | 默认值 | 取值范围                  |
| --------- | ---- | ------ | ------ | --- | --------------------- |
| payId     | 是    | String | 支付订单Id |     | eg : Nlt0OnQP         |
| channelId | 是    | String | 渠道编号   |     | eg：payaaa201903212028 |
| sign      | 是    | String | 签名     |     | 参见签名生成                |
| timestamp | 否    | String | 时间戳    |     | 毫秒时间戳                 |

#### 响应参数

```yaml
 {
     "data": {
         "amount": "2",
         "channelId": "payaaa201903212028",
         "channelName": "xxMall",
         "coinCode": "ETH",
         "createTime": "2019-03-22 17:11:38",
         "payId": "XMdqbM8Q",
         "remark": "zhangsan pay to xxMall",
         "sign": "DB99639E8B9EC419F88C94355DF1C483ACD420B7366C27CAB8E86A6D7B84CB52",
         "status": "complete",
         "timestamp": 1553838107450,
         "transType": "PAY_IN",
         "userNo": "5****@qq.com"
     },
     "resCode": "800",
     "resMsg": "成功"
 }
```

#### data说明

```yaml
   {
       "amount": "付款金额",
       "channelOrderId": "渠道订单号",
       "channelUserNo": "渠道用户名",
       "coinCode": "付款币种",
       "createTime": "创建时间",
       "payId": "支付订单号",
       "remark": "备注",
       "sign": "签名",
       "status": "支付订单状态",
       "timestamp": 时间戳,
       "transType": "订单类型",
       "userNo": "第三方开户账号"
   }
```

#### 支付完成通知

#### 说明

订单支付完成通知接口

#### 请求参数

| 参数名称      | 是否必须 | 数据类型   | 描述     | 默认值 | 取值范围                                    |
| --------- | ---- | ------ | ------ | --- | --------------------------------------- |
| payId     | 是    | String | 支付订单号  |     | eg: Nlt0OnQP                            |
| status    | 是    | String | 支付订单状态 |     | 状态: valid-有效，complete-支付完成，invalid-超时无效 |
| sign      | 是    | String | 签名     |     |                                         |
| timestamp | 是    | String | 时间戳    |     | 毫秒时间戳                                   |

#### 响应参数

```
 {
     "data": “响应完成”,
     "resCode": "800",
     "resMsg": "成功"
 }
```

#### data说明

```
 {
     "data": “响应信息”,
     "resCode": "返回状态码",//800：表示成功，其他表示失败
     "resMsg": "返回结果信息"
 }
```

### 错误码说明

#### HTTP请求错误码

| 错误码 | 含义     | 说明             |
| --- | ------ | -------------- |
| 200 | 成功     |                |
| 403 | 资源不可用  | header头信息错误或不全 |
| 404 | 资源未找到  | url错误          |
| 405 | 请求方式错误 | GET、POST方式替换   |
| 500 | 服务器错误  | 需联系平台客服        |

#### 接口返回数据resCode码

| 错误码  | 含义               | 说明            |
| ---- | ---------------- | ------------- |
| 800  | 成功               | 请求成功          |
| 900  | 服务器错误            | 服务器错误         |
| 213  | 非法请求             | 签名认证失败        |
| 214  | 币种不存在            | 币种不一致         |
| 216  | 金额数量不合法          | 付款金额不合法       |
| 907  | 必填字段为空           | 参数请求不全        |
| 1002 | 订单不存在            | 支付订单未创建或订单号错误 |
| 1017 | 第三方渠道未创建账户或账号不存在 | 需要检查是否创建账户    |
| 1018 | 第三方渠道账号未配置       | 需要联系官方进行配置    |
| 1019 | 第三方渠道号未配置        | 需要联系官方进行配置    |
| 1031 | 备注长度超出50个字符      | 备注长度超限        |
| 1032 | 第三方渠道支付页面地址未配置   | 需要联系官方进行配置    |

### 生成签名

按照ASCII码的顺序对参数名进行排序，转化为json字符串，使用私钥签名，采用HMAC-SHA256加密方式。

#### 签名生成步骤说明

**第一步：**

设所有发送或者接收到的数据为集合M，将集合M内非空参数值的参数按照参数名ASCII码从小到大排序（字典序)，使用URL键值对的格式（即key1=value1\&key2=value2…）拼接成字符串stringA。

**特别注意以下重要规则：**

1. 参数名ASCII码从小到大排序（字典序)；
2. app\_id，timestamp为必填参数；timestamp为最近五分钟时间戳，超过5分钟失效;
3. 如果参数的值为空不参与签名；
4. 参数名区分大小写；
5. 传送的sign参数不参与签名，将生成的签名与该sign值作校验。

**第二步：**

在stringA最后拼接上key得到stringSignTemp字符串，并对stringSignTemp进行HMAC-SHA256运算，再将得到的字符串所有字符转换为大写，得到sign值signValue。

**伪代码举例**

假设传送的参数如下： channelId: mttest timestamp : 1516320000 body : test

```bash
 第一步：对参数按照key=value的格式，并按照参数名ASCII字典序排序如下：
 stringA="app_id=mttest&body=test&timestamp=1516320000";
 第二步：拼接API密钥：
 stringSignTemp=stringA+"&secret=my_test_secret" 
 sign=hash_hmac("sha256",stringSignTemp,key).toUpperCase()="6A9AE1657590FD6257D693A078E1C3E4BB6BA4DC30B23E0EE2496E54170DACD6" //注：HMAC-SHA256签名方式    
```

**示例代码**

```java
 @Test
     public void deductBalance() throws IOException {
         JTextField field ;
         String url = "http://localhost:8088/channel/deductBalance";
         TreeMap<String,Object> params = Maps.newTreeMap();
         params.put("orderId","my_order_id");
         params.put("channelId","test91021071617412");
         long timestamp = System.currentTimeMillis();
         params.put("timestamp",timestamp);
         String channelSign = getChannelSign(params, secret);
         params.put("sign",channelSign);
         System.out.println(url);
         System.out.println(JSON.toJSONString(params));
         String result = HttpUtils.sendRequestBody(url, params);
         System.out.println(result);
     }
 ​
     public static String getChannelSign(Map<String, Object> params,String secret) {
         StringBuilder result = new StringBuilder();
         if (params != null) {
             for (Object key : params.keySet()) {
                 Object value = params.get(key);
                 result.append(key).append("=").append(value).append("&");
             }
             String tempString = result + "secret=" + secret;
             try {
                 System.out.println(tempString);
                 String sign = EncryptUtils.sha256_HMAC(tempString, secret).toUpperCase();
                 System.out.println(sign);
                 return sign;
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
         return null;
     }
```

> 代码中参与加密的参数及顺序为：`channelId=test91021071617412&orderId=my_test_id&timestamp=1547987604644&secret=my_secret`


