現在很多企業或者應用程式都開放自己的open api,以便於技術開發人員調用方便,並且很多企業採用詳細接口文檔的形式進行輸出,或者採用sdk文檔方式打包。像優盾錢包研發團隊就為企業及個人能夠快速方便的接入數字貨幣而開發的一套應用系統,開放了優盾錢包API開發接口文檔以及像Java、.Net、PHP多種語言的SDK對接交易所。
穩定幣USDT在規避整個行情下跌風險、反向操作 數字貨幣提現方面佔據著得天獨厚的優勢。不僅是各個交易所的寵兒,也深受投資者的青睞。隨著企業(交易所、商城、遊戲)業務型系統快速方便對接USDT的需求逐步擴大,API「鑰匙」的作用愈發明顯, 交易所等企業不得不面臨接口對接怎麼實現,對接步驟如何實現,支付接口如何對接的困惑。優盾錢包,作為全球首款交易所錢包管理系統,集審核、代付、歸集功能於一身。自上線以來,安全運行700+天,交易所用戶遍及中國、中國臺灣、日、韓、美國、澳大利亞及加拿大等國家和地區,累計為用戶管理資產總額達100000000+USDT,用戶日均交易額達2000萬USDT。
接下來,以它為例, 來解答usdt錢包接口對接怎麼實現,對接步驟如何實現,支付接口如何對接的困惑。
詳細接口文檔如下:
1、目錄
1.1、生成地址
1.2、提幣
1.3、代付
1.4、交易回調
1.5、校驗地址合法性
1.6、獲取商戶支持幣種信息
2、接口明細
1、生成地址
1.1 場景說明
請求指定幣種地址,如要成功獲取地址,需先存在錢包,且錢包支持該幣種, 詳情參看
1.2 接口詳情
1.2.1 接口地址
接口詳情
URL
【/mch/address/create】
請求方式
POST
1.2.2 參數
1.2.2.1 參數說明
參數
類型
是否必填
說明
備註
timestamp
String
是
時間戳
見 驗籤說明
nonce
String
是
隨機數
見 驗籤說明
sign
String
是
籤名
見 驗籤說明
body
String
是
消息內容
json字符串,格式如下
[
{
"merchantId":"300015",
"coinType":520,
"callUrl":"http://localhost:8080/callBack"
}
]
1.2.2.2 body參數欄位
body參數名
類型
是否必填
說明
merchantId
String
是
商戶號
coinType
Integer
是
主幣種編號,見 附錄一
callUrl
String
是
回調地址,通過該接口創建的地址,以後關於該地址的充幣信息會通過您指定的回調地址通知您。具體示例見 交易回調接口
walletId
String
否
錢包編號,默認根據主錢包生成地址
alias
String
否
地址別名
1.2.2.3 示例
{
"timestamp": 1535005047,
"nonce": 10000,
"sign": "a230def43c1a12b14393880a28d4e005",
"body": "[{\"merchantId\":\"300015\",\"coinType\":520,\"callUrl\":\"http://localhost:8080/callBack\"}]"
}
1.2.3 返回狀態碼錶
code
解釋
200
成功
4005
非法參數
4001
商戶不存在
4169
商戶已禁用
4162
籤名錯誤
4175
錢包編號錯誤
4017
商戶沒有創建錢包
4176
錢包未添加支持該幣種
4166
商戶沒有配置套餐
4168
商戶地址達到上限
4045
幣種信息錯誤
-1
獲取地址失敗
1.3 調取示例
1.3.1 成功
{
"data":{
"coinType":520,
"address":"0xbe4e3699cb870bc95365fe04a187dd279a651a58"
},
"message":"SUCCESS",
"code":200
}
1.3.2 失敗
{
"code": "4101",
"message": "SIGN_MSG_ERROR"
}
2、發送提幣申請
2.1 場景說明
提幣申請
2.2 接口詳情
2.2.1 接口地址
接口詳情
URL
【/mch/withdraw】
請求方式
POST
2.2.2 參數
2.2.2.1 參數說明
參數
類型
是否必填
說明
備註
timestamp
String
是
時間戳
見 驗籤說明
nonce
String
是
隨機數
見 驗籤說明
sign
String
是
籤名
見 驗籤說明
body
String
是
消息內容
json字符串,格式如下
[
{
"address":"raadSxrUhG5EQVCY75CSGaVLWCeXd6yH6s",
"amount":"0.11",
"merchantId":"100109",
"mainCoinType":"144",
"coinType":"144",
"callUrl":"http://localhost:8080/mch/callBack",
"businessId":"15",
"memo":"10112"
}
]
2.2.2.2 body參數欄位
body參數名稱
是否必填
類型
說明
address
是
String
提幣地址
amount
是
String
提幣數量
merchantId
是
String
商戶號
mainCoinType
是
String
主幣種編號 (見 附錄一 )
coinType
是
String
子幣種編號 (見 附錄一 )
callUrl
是
String
回調地址,通過該callUrl告知您該筆提幣交易的狀態,具體示例見 交易回調接口
businessId
是
String
業務id,必須保證該欄位在系統內唯一,如果重複,則該筆審核錢包不會接收。
memo
否
String
備註,XRP和EOS,這兩種幣的提幣申請該欄位可選,起他類型幣種不填
2.2.2.3 示例
{
"timestamp": 1535005047,
"nonce": 100000,
"sign": "6df1512ee650431632ce1541a6b064e1",
"body": "[{\"address\":\"raadSxrUhG5EQVCY75CSGaVLWCeXd6yH6s\",\"amount\":\"0.11\",\"merchantId\":\"100109\",\"mainCoinType\":\"144\",\"coinType\":\"144\",\"callUrl\":\"http://localhost:8080/callBack\",\"businessId\":\"15\",\"memo\":\"10112\"}]"
}
2.2.3 返回狀態碼錶
code
解釋
200
成功
4005
非法參數
4598
傳入body中的list對象中的所有merchantId必須保持一致
4001
商戶不存在
4169
商戶已被禁用
4183
到帳地址異常
4193
EOS金額小數點後超過4位長度
4034
未找到該幣種信息
2.3.1 成功
{
"message":"SUCCESS",
"code":200
}
2.3.2 失敗
{
"code": "4101",
"message": "SIGN_MSG_ERROR"
}
3、代付
3.1 場景說明
代付,發送自動付款申請,未設置代付信息或代付失敗則進入審核狀態。
3.2 接口詳情
3.2.1 接口地址
接口詳情
URL
【/mch/withdraw/proxypay】
請求方式
POST
3.2.2 參數
3.2.2.1 參數說明
參數
類型
是否必填
說明
備註
timestamp
String
是
時間戳
見 驗籤說明
nonce
String
是
隨機數
見 驗籤說明
sign
String
是
籤名
見 驗籤說明
body
String
是
消息內容
JSON字符串,格式如下
[
{
"address":"raadSxrUhG5EQVCY75CSGaVLWCeXd6yH6s",
"amount":"0.1",
"merchantId":"100146",
"mainCoinType":"144",
"coinType":"144",
"callUrl":"http://localhost:8080/callBack",
"businessId":"571001",
"memo":"10112"
}
]
3.2.2.2 body參數說明
body參數名稱
類型
是否必填
說明
merchantId
String
是
商戶號
address
String
是
提幣地址
mainCoinType
String
是
主幣種編號,見 附錄一
coinType
String
是
子幣種編號,見 附錄一
amount
String
是
交易數量
callUrl
String
是
回調地址,提幣(審核、交易)結果將通過該地址進行回調,具體示例見 交易回調接口
businessId
String
是
業務id,必須保證該欄位在系統內唯一,如果重複,則該筆提幣錢包將不會進行接收
memo
String
否
備註,XRP和EOS,這兩種幣的提幣申請該欄位可選,起他類型幣種不填
3.2.2.2 示例
{
"timestamp": 1535005047,
"nonce": 100000,
"sign": "e1bee3a417b9c606ba6cedda26db761a",
"body": "[{\"address\":\"raadSxrUhG5EQVCY75CSGaVLWCeXd6yH6s\",\"amount\":\"0.1\",\"merchantId\":\"100146\",\"mainCoinType\":\"144\",\"coinType\":\"144\",\"callUrl\":\"http://localhost:8080/callBack\",\"businessId\":\"571001\",\"memo\":\"10112\"}]"
}
3.2.3 返回狀態碼錶
code
解釋
200
成功
4005
非法參數
4001
商戶不存在
4166
商戶沒有配置套餐
4169
商戶已被禁用
4612
籤名錯誤
4163
籤名信息錯誤
569
無效的地址
571
已存在審核記錄,將不再進行處理
581
非法提幣金額
554
商戶不支持該幣種
3.3 調取示例
3.3.1 成功
{
"message":"SUCCESS",
"code":200
}
3.3.2 失敗
{
"code": "4101",
"message": "SIGN_MSG_ERROR"
}
4、交易回調接口
4.1 場景說明
網關收到交易處理結果,調用商戶提供的回調接口,通知商戶具體變化信息。該接口網關發送給您指定的回調地址的內容,處理您的業務信息。 分充值回調和提幣回調,其中提幣最多會進行兩次回調(審核回調+交易結果回調)
4.2 接口詳情
4.2.1 接口地址
接口詳情
URL
請求方式
POST
4.2.2 參數
4.2.2.1 參數說明
參數
類型
是否必填
說明
備註
timestamp
String
是
時間戳
見 驗籤說明
nonce
String
是
隨機數
見 驗籤說明
sign
String
是
籤名
見 驗籤說明
body
String
是
消息內容
JSON字符串,格式如下
{
"address":"DJY781Z8qbuJeuA7C3McYivbX8kmAUXPsW",
"amount":"12345678",
"blockHigh":"102419",
"coinType":"206",
"decimals":"8",
"fee":"452000",
"mainCoinType":"206",
"status":3,
"tradeId":"20181024175416907",
"tradeType":1,
"txId":"31689c332536b56a2246347e206fbed2d04d461a3d668c4c1de32a75a8d436f0",
"businessId":"",// 提幣回調為提幣接口傳入的businessId,充幣無值
"memo":""
}
4.2.2.2 body參數說明
body參數名稱
類型
說明
address
String
地址
amount
String
交易數量,根據幣種精度獲取實際金額,實際金額=amount/pow(10,decimals),即實際金額等於amount除以10的decimals次方
fee
String
礦工費,根據幣種精度獲取實際金額,實際金額獲取同上
decimals
String
幣種精度
coinType
String
子幣種編號,見 附錄一
mainCoinType
String
主幣種編號,見 附錄一
businessId
String
業務編號,提幣回調時為提幣請求時傳入的,充幣回調無值
blockHigh
String
區塊高度
status
Integer
狀態,見 回調接口狀態說明
tradeId
String
交易流水號
tradeType
Integer
交易類型,見 回調接口交易類型說明
txid
String
區塊鏈交易哈希
memo
String
備註,XRP和EOS(見 附錄一 ),這2種類型幣的充提幣可能有值
4.2.2.2 示例
{
"timestamp": 1535005047,
"nonce": 100000,
"sign": "e1bee3a417b9c606ba6cedda26db761a",
"body": "{\"address\":\"DJY781Z8qbuJeuA7C3McYivbX8kmAUXPsW\",\"amount\":\"12345678\",\"blockHigh\":\"102419\",\"coinType\":\"206\",\"decimals\":\"8\",\"fee\":\"452000\",\"mainCoinType\":\"206\",\"status\":3,\"tradeId\":\"20181024175416907\",\"tradeType\":1,\"txId\":\"31689c332536b56a2246347e206fbed2d04d461a3d668c4c1de32a75a8d436f0\"}"
}
5、校驗地址合法性
5.1 場景說明
校驗地址的合法性,添加地址、提幣申請等場景時可先校驗地址合法性,參看 校驗規則
5.2 接口詳情
5.2.1 接口地址
接口詳情
URL
【/mch/check/address】
請求方式
Post
5.2.2 參數
5.2.2.1 參數說明
參數
類型
是否必填
說明
備註
timestamp
String
是
時間戳
nonce
String
是
隨機數
sign
String
是
籤名
body
String
是
消息內容
JSON字符串,格式如下
{
"merchantId":200000,
"mainCoinType":"206",
"address":"DJY781Z8qbuJeuA7C3McYivbX8kmAUXPsW"
}
5.2.2.2 body參數說明
body參數名稱
類型
是否必填
說明
merchantId
Long
是
商戶號
mainCoinType
String
是
主幣種編號,見 附錄一
address
String
是
需校驗的地址
5.2.2.2 示例
{
"timestamp": 1535005047,
"nonce": 100000,
"sign": "e1bee3a417b9c606ba6cedda26db761a",
"body": "[{\"merchantId\":200000,\"mainCoinType\":\"206\",\"address\":\"DJY781Z8qbuJeuA7C3McYivbX8kmAUXPsW\"}]"
5.2.3 返回狀態碼錶
code
解釋
200
成功
4005
非法參數
4162
籤名錯誤
4165
地址不合法
5.3 調取示例
5.3.1 成功
{
"code":200,
"message":"SUCCESS"
}
5.3.2 失敗
{
"code":4005,
"message":"PARAM_ERROR"
}
6、獲取商戶支持的幣種信息
6.1 場景說明
獲取商戶支持的幣種,以及餘額
6.2 接口詳情
6.2.1 接口地址
接口詳情
URL
【/mch/support-coins】
請求方式
POST
6.2.2 參數
6.2.2.1 參數說明
參數
類型
是否必填
說明
timestamp
String
是
時間戳
nonce
String
是
隨機數
sign
String
是
籤名
body
String
是
消息內容
6.2.2.2 body參數說明
body參數名稱
類型
是否必填
說明
merchantId
Long
是
商戶號
showBalance
Boolean
是
是否查詢餘額,false不獲取,true獲取
6.2.2.3 示例
{
"timestamp": 1535005047,
"nonce": 100000,
"sign": "e1bee3a417b9c606ba6cedda26db761a",
"body": "{\"merchantId\":\"200032\",\"showBalance\":true}"
}
6.2.3 返回狀態碼錶
狀態碼
解釋
200
成功
4005
body參數錯誤
6.3 調取示例
6.3.1 成功
{
"code": 200,
"message": "SUCCESS",
"data":[
{
"name": "BTC", // 幣種別名
"coinName":"Bitcoin", // 幣種全稱
"symbol":"BTC", // 幣種單位
"mainCoinType":"0", //主幣種類型
"coinType":"0", // 幣種類型
"decimals":"8", // 幣種精度
"tokenStatus":"0", // 0: 主幣 1:代幣
"mainSymbol":"BTC", //主幣種單位
"balance":"0", // 幣種餘額
"logo":"http://bipay-admin.oss-cn-hangzhou.aliyuncs.com/bipay-admin-release/coin-logo/BTC.png" // 幣種log地址
},
{
"name": "ETH", // 幣種別名
"coinName":"Ethereum", // 幣種全稱
"symbol":"ETH", // 幣種單位
"mainCoinType":"60", //主幣種類型
"coinType":"60", // 幣種類型
"decimals":"18", // 幣種精度
"tokenStatus":"0", // 0: 主幣 1:代幣
"mainSymbol":"ETH", //主幣種單位
"balance":"0", // 幣種餘額
"logo":"https://bipay-admin.oss-cn-hangzhou.aliyuncs.com/bipay-admin-release/coin-logo/ETH.png" // 幣種log地址
}
]
}
6.3.2 失敗
{
"code":4005,
"message":"BGS_ILLEGAL_PARAMETER"
}
附錄一
主幣種編號
子幣種編號
幣種簡稱
幣種英文名
幣種中文名稱
精度
0
0
BTC
Bitcoin
比特幣
8
60
60
ETH
Ethereum
以太坊
18
0
31
USDT
Tether USD
泰達幣
8
520
520
CNT
CNT
測試幣
18
5
5
DASH
DASH
達世幣
8
133
133
ZEC
ZEC
大零幣
8
145
145
BCH
Bitcoincash
比特幣現金
8
61
61
ETC
Ethereum Classic
以太坊經典
18
2
2
LTC
LTC
萊特幣
8
2301
2301
QTUM
QTUM
量子鏈幣
8
502
502
GCC
GalaxyChain
8
60
合約地址
eth代幣
eth代幣
根據代幣具體情況而定
144
144
XRP
Ripple
瑞波幣
6
194
194
EOS
EOS
柚子幣
4
194
194
EOS
EOS
柚子幣
4
2304
2304
IOTE
IOTE
IOTE
8
2303
2303
VDS
Vollar
Vollar幣
8
回調接口狀態說明
狀態
說明
0
待審核
1
審核成功
2
審核駁回
3
交易成功
4
交易失敗
回調接口交易類型說明
狀態
說明
1
充幣回調
2
提幣回調
驗籤說明
為了保證商戶傳送到優盾的參數信息不被惡意篡改,網關為商戶接口提供Md5加密摘要認證。商戶可用基礎加密參數:時間戳、隨機數、籤名密鑰(商戶唯一的APIKEY)、請求明文參數按指定順序排列進行Md5加密,產生一個驗籤串sign,商戶請求網關接口時,帶上參數時間戳、隨機數、請求明文參數、sign作為參數。網關拿到相應的參數以同樣的方式進行籤名驗籤。同理,網關請求商戶也以同樣的方式進行身份驗證。
sign=md5(body + key + nonce + timestamp)
key為接口授權碼APIKEY,由網關分配給商戶,加密欄位順序不能錯誤
幣種地址校驗規則
主幣種類型
幣種簡稱
幣種英文名稱
幣種中文名稱
地址前綴
地址長度限制區間
0
BTC
Bitcoin
比特幣
1或者3
[26,36]
60
ETH
Ethereum
以太坊
0x
[42]
145
BCH
Bitcoincash
比特幣現金
1
[26,36]
61
ETC
EthereumClassic
以太坊經典
0x
[42]
2
LTC
Litecoin
萊特幣
L或者M
[26,36]
508
GX
GX
G
[26,36]
503
NBTC
NBTC
N
不限制
99
STO
STO
證券型通證發行
S
不限制
5
DASH
DASH
達世幣
X
[26,36]
2301
QTUM
QTUM
量子鏈幣
Q
[26,36]
133
ZEC
ZCash
大零幣
t1
不限制
144
XRP
Ripple
瑞波幣
r
[34]
加密貨幣交易平臺對接不同的錢包,對應的接口都可能有所不同,在上述接口文檔中,具備多幣種錢包的參數說明,不僅解決了接口對接怎麼實現的問題、展示了對接步驟如何實現的解決方案,更為支付接口如何對接提供了策略,充分解決了接口不同的各種麻煩,實現快速對接交易所平臺。