優盾錢包API開發接口文檔
以下為優盾的API接口文檔詳細說明,了解更多問題請參考
接入常見問題
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",
"mainCoinType":520,
"callUrl":"http://localhost:8080/callBack"
}
]
1.2.2.2 body參數字段
body參數名稱 | 類型 | 是否必填 | 說明 |
merchantId | String | 是 | 商戶號 |
mainCoinType | Integer | 是 | 主幣種編號,使用獲取商戶幣種信息接口 |
callUrl | String | 是 |
回調地址,通過該接口創建的地址,以後關於該地址的充幣信息會通過您指定的回調地址通知您。具體示例見
交易回調接口 |
walletId | String | 否 | 錢包編號,默認根據主錢包生成地址 |
alias | String | 否 | 地址別名 |
1.2.2.3 示例
{
"timestamp": 1535005047,
"nonce": 10000,
"sign": "a230def43c1a12b14393880a28d4e005",
"body": "[{\"merchantId\":\"300015\",\"mainCoinType\":520,\"callUrl\":\"http://localhost:8080/callBack\"}]"}
1.2.3 返回狀態碼表
code | 解釋 |
-1 | 生成地址失敗 |
200 | 生成地址成功 |
4001 | 商户不存在 |
4005 | 非法參數 |
4045 | 幣種信息錯誤 |
4162 | 簽名異常 |
4163 | 簽名錯誤 |
4166 | 商戶沒有配置套餐 |
4168 | 商戶地址達到上限 |
4169 | 商戶已禁用 |
4175 | 錢包編號錯誤 |
4017 | 商戶沒有創建錢包 |
4176 | 錢包未添加支持該幣種 |
4188 | 暫不支持 |
4226 | 商戶普通賬戶被禁用 |
4261 | 商戶管理員賬戶被禁用 |
4262 | 賬戶不存在 |
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 | 業務編號,必須保證該字段在系統內唯一,如果重復,則該筆提幣錢包將不會進行接收 |
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 | 提幣成功 |
523 | 參數為空 |
581 | 無效的提幣金額 |
4005 | 非法參數 |
4014 | 幣種為空 |
4034 | 未找到該幣種信息 |
4162 | 簽名異常 |
4163 | 簽名錯誤 |
4169 | 商戶已被禁用 |
4183 | 到賬地址異常 |
4193 | EOS金額小數點後超過4位長度 |
4214 | 暫無可用的幣種 |
4226 | 商戶普通賬戶被禁用 |
4261 | 商戶管理員賬戶被禁用 |
4284 | 商户不存在 |
4288 | 業務編號(BusinessId)重復,請勿重復申請 |
4598 | 傳入body中的list對象中的所有merchantId必須保持一致 |
4001 | 商户不存在 |
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 | 由生成地址接口或提幣接口提供的callUrl |
請求方式 | POST / Form |
3.2.2 參數
3.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":"",
"memo":""
}
3.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種類型幣的充提幣可能有值 |
3.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\"}"
4、校驗地址合法性
4.1 場景說明
校驗地址的合法性,添加地址、提幣申請等場景時可先校驗地址合法性,參看
校驗規則
4.2 接口詳情
4.2.1 接口地址
接口詳情 | |
URL | 【/mch/check/address】 |
請求方式 | Post |
4.2.2 參數
4.2.2.1 參數說明
參數 | 類型 | 是否必填 | 說明 | 備註 |
timestamp | String | 是 | 時間戳 | |
nonce | String | 是 | 隨機數 | |
sign | String | 是 | 簽名 | |
body | String | 是 | 消息內容 | json數組字符串,格式如下 |
[
{
"merchantId":200000,
"mainCoinType":"206",
"address":"DJY781Z8qbuJeuA7C3McYivbX8kmAUXPsW"
}
]
4.2.2.2 body參數說明
body參數名稱 | 類型 | 是否必填 | 說明 |
merchantId | Long | 是 | 商戶號 |
mainCoinType | String | 是 | 主幣種編號,使用獲取商戶幣種信息接口 |
address | String | 是 | 需校驗的地址 |
4.2.2.3 示例
{
"timestamp": 1535005047,
"nonce": 100000,
"sign": "e1bee3a417b9c606ba6cedda26db761a",
"body": "[{\"merchantId\":200000,\"mainCoinType\":\"206\",\"address\":\"DJY781Z8qbuJeuA7C3McYivbX8kmAUXPsW\"}]"
}
4.2.3 返回狀態碼表
code | 解釋 |
200 | 成功 |
4005 | 非法參數 |
4162 | 簽名異常 |
4163 | 簽名錯誤 |
4165 | 非法地址 |
4.3 調取示例
4.3.1 成功
{
"code":200,
"message":"SUCCESS"
}
4.3.2 失敗
{
"code":4005,
"message":"PARAM_ERROR"
}
5、獲取商戶支持的幣種信息
5.1 場景說明
獲取商戶支持的幣種,以及余額
5.2 接口詳情
5.2.1 接口地址
接口詳情 | |
URL | 【/mch/support-coins】 |
請求方式 | POST |
5.2.2 參數
5.2.2.1 參數說明
參數 | 類型 | 是否必填 | 說明 |
timestamp | String | 是 | 時間戳 |
nonce | String | 是 | 隨機數 |
sign | String | 是 | 簽名 |
body | String | 是 | 消息內容 |
5.2.2.2 body參數說明
body參數名稱 | 類型 | 是否必填 | 說明 |
merchantId | Long | 是 | 商戶號 |
showBalance | Boolean | 是 | 是否查詢余額,false不獲取,true獲取 |
5.2.2.3 示例
{
"timestamp": 1535005047,
"nonce": 100000,
"sign": "e1bee3a417b9c606ba6cedda26db761a",
"body": "{\"merchantId\":\"200032\",\"showBalance\":true}"
}
5.2.3 返回狀態碼表
狀態碼 | 解釋 |
-1 | 查詢失敗 |
200 | 查詢成功 |
4005 | 非法參數 |
5.3 調取示例
5.3.1 成功
{
"code": 200,
"message": "SUCCESS",
"data":[
{
"name": "BTC",
"coinName":"Bitcoin",
"symbol":"BTC",
"mainCoinType":"0",
"coinType":"0",
"decimals":"8",
"tokenStatus":"0",
"mainSymbol":"BTC",
"balance":"0",
"logo":""
},
{
"name": "ETH",
"coinName":"Ethereum",
"symbol":"ETH",
"mainCoinType":"60",
"coinType":"60",
"decimals":"18",
"tokenStatus":"0",
"mainSymbol":"ETH",
"balance":"0",
"logo":""
}
]
}
5.3.2 失敗
{
"code":4005,
"message":"BGS_ILLEGAL_PARAMETER"
}
6、校驗地址是否存在
6.1 場景說明
校驗地址是否為該商戶生成的地址,請求參數及返回結果類型同校驗地址合法性接口類似
6.2 接口詳情
6.2.1 接口地址
接口詳情 | |
URL | 【/mch/exist/address】 |
請求方式 | Post |
6.2.2 參數
6.2.2.1 參數說明
參數 | 類型 | 是否必填 | 說明 | 備註 |
timestamp | String | 是 | 時間戳 | |
nonce | String | 是 | 隨機數 | |
sign | String | 是 | 簽名 | |
body | String | 是 | 消息內容 | json數組字符串,格式如下 |
[
{
"merchantId":200000,
"mainCoinType":"206",
"address":"DJY781Z8qbuJeuA7C3McYivbX8kmAUXPsW"
}
]
6.2.2.2 body參數說明
body參數名稱 | 類型 | 是否必填 | 說明 |
merchantId | Long | 是 | 商戶號 |
mainCoinType | String | 是 | 主幣種編號,使用獲取商戶幣種信息接口 |
address | String | 是 | 需校驗的地址 |
6.2.2.2 示例
{
"timestamp": 1535005047,
"nonce": 100000,
"sign": "e1bee3a417b9c606ba6cedda26db761a",
"body": "[{\"merchantId\":200000,\"mainCoinType\":\"206\",\"address\":\"DJY781Z8qbuJeuA7C3McYivbX8kmAUXPsW\"}]"
}
6.2.3 返回狀態碼表
code | 解釋 |
200 | 成功 |
523 | 非法參數 |
4162 | 簽名異常 |
4163 | 簽名錯誤 |
4165 | 非法地址 |
4316 | 參數異常 |
6.3 調取示例
6.3.1 成功
{
"code":200,
"message":"SUCCESS"
}
6.3.2 失敗
{
"code":4165,
"message":"ILLEGAL_ADDRESS"
}
回調接口狀態說明
狀態 | 說明 |
0 | 待審核 |
1 | 審核成功 |
2 | 審核駁回 |
3 | 交易成功 |
4 | 交易失敗 |
回調接口交易類型說明
驗簽說明
為了保證商戶傳送到優盾的參數信息不被惡意篡改, 網關為商戶接口提供Md5加密摘要認證。 商戶可用基礎加密參數: 時間戳、 隨機數、 簽名密鑰、 請求明文參數按指定順序排列進行Md5加密並轉化成小寫, 產生一個驗簽串sign, 商戶請求網關接口時, 帶上參數時間戳、 隨機數、 請求明文參數、 sign作為參數。 網關拿到相應的參數以同樣的方式進行簽名驗簽。 同理, 網關請求商戶也以同樣的方式進行身份驗證。
sign=md5(body + key + nonce + timestamp).toLowerCase()
key為簽名密鑰,由網關分配給商戶,加密字段順序不能錯誤
幣種地址校驗規則
主幣種類型 | 幣種簡稱 | 幣種英文名稱 | 幣種中文名稱 | 地址前綴 | 地址長度限製區間 |
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] |
5 | DASH | DASH | 達世幣 | X | [26,36] |
2301 | QTUM | QTUM | 量子鏈幣 | Q | [26,36] |
133 | ZEC | ZCash | 大零幣 | t1 | 不限製 |
144 | XRP | Ripple | 瑞波幣 | r | [34] |
2303 | VDS | Vollar | Vollar | V | |