Java 对接交易所钱包解决方案


随着区块链技术风靡全球,关于加密货币的价值以及区块链的发展争议不断,引发多国政府、机构、资本广泛关注。

数字货币交易所平台作为加密货币价值实现的媒介,是数字货币生态中的核心基础设施。交易所平台坐拥数字货币市场强大的盈利能力以及持续的现金流让无数从业者竞相涌入。

通常来说,当下主流的计算机编程语言几乎都能开发交易所,比如Javac++PHPpythonGO等等。对于数字货币交易所开发的不同语言,其在对接交易所钱包中的封装包也不尽相同。接下来,我们一起来看看用基于JAVA语言开发的交易所平台如何实现交易所钱包对接。

一. 简单了解Java

Java一种面向对象的计算机编程语言,市场占有率位列编程语言前三甲,它在吸收c++语言多种优点基础之上摈弃了c++在理解复杂问题上的各种不足,形成了功能性、易用性、分布式移植性、多线程以及安全性等多项特点

在实际应用里,Java语言不仅能够用来编写桌面应用程序、web应用程序,还可以用来编写分布式系统以及嵌入式系统应用程序,可见其应用范围之广。因此,Java语言备受程序开发者的青睐,在数字货币交易所平台开发中得以广泛应用更是常态。

 

二、Java 交易所钱包对接 SDK

加密货币是一种基于区块链技术的数字货币,区块链交易所钱包是交易所、项目方等企业专门用来管理这些加密资产的应用系统。

以优盾钱包为例,交易所钱包不仅可以提供钱包地址的创建、加密数字货币转账、每个钱包地址交易历史的查询等基础金融功能,还能够实现多币种多地址多资产一键归集、系统代付自动放款、多员工多权限一键分配、提现初审+复核双模式等衍生金融服务。

基于JAVA语言开发的交易所平台如何对接交易所钱包,狭义上说就是如何解决交易所充币、提币的问题,以期实现交易所钱包丰富的金融功能以及服务。

交易所钱包接口JAVASDKhttps://github.com/uduncloud/udun-sdk-java

三、交易所钱包对接 详细接口文档

原文链接:https://www.uduncloud.com/gateway-interface

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]

随着数字产业变革持续深入,数字货币成为发展新亮点,数字钱包的场景功能将越来越重要。

基于Java语言开发的交易所平台在对接交易所钱包管理系统后,不仅使得Java对接钱包不是难题,极⼤降低企业进入区块链领域的⻔槛,接入更便捷,满足企业充提币、转账、支付、归集、代付等多元化需求,而且⼤幅提升企业加密货币存储能⼒,为企业资产安全保驾护航。

 

猜你喜欢

转载自www.cnblogs.com/fly-l/p/13183051.html