NAV
go php js java

地址

地址获取

$url = "http://api.xxxx.com/shopapi/address/getBatch";
$header = [
  'Content-Type:application/json',
];
$params = [
  "coin" => "hc",
  "app_id" => "hxgmau9imt86qky9",
  "version" => "1.0",
  "time" => 1578997143,
  "sign" => "IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw=="
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$return = curl_exec($ch);

print_r($return);

var url = "http://api.xxxx.com/shopapi/address/getBatch"
data := map[string]string{
    "coin" : "hc",
    "app_id" : "hxgmau9imt86qky9",
    "version" : "1.0",
    "time" : "1578997143",
    "sign":    "IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
}
dataType, _ := json.Marshal(data)
resp, err := http.Post(url, "application/json", strings.NewReader(string(dataType)))
if err != nil {
    fmt.Println(err)
}
defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) }

fmt.Println(string(body))

let HTTP = require('http')
let postData = {
  "coin" : "hc",
  "app_id" : "hxgmau9imt86qky9",
  "version" : "1.0",
  "time" : "1578997143",
  "sign":    "IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/address/getBatch",
  method: 'POST',
  headers: {
    "Content-Type": "application/json; charset=utf-8"
  }
};
const REQUEST = HTTP.request(POST_OPTIONS,function (res) {
  let data = []
  res.on('data', chunk => {
    data.push(...chunk)
  })
  res.on('end', () => {
    let _date = JSON.parse( new TextDecoder().decode(new Uint8Array(data)))
    console.log(_date)
  })
});

REQUEST.setTimeout(6000) REQUEST.write(JSON.stringify(postData), 'utf8') REQUEST.end()

public static void main(String[] args) {

// 完整实例请查看"签名规则"中的Java示例代码

String baseUrl = "http://api.xxxx.com/shopapi"; String priKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCtdgvcfozY7fe/x6UlXR/Fff8+wX++CiG05YVRafDe90O8y5KJAMZ156TgajEUXSRyKZqASz7iVoMAcu5FqfK1KuOOdjTAg0LFe/twIZvKmAqHcCSS2pjUXk0fTpZEgQ5lmDCK12Mg07YXvr+BeHjF+kBpwRJMPMG/+DGBDYNFNeRSJqWyopt6yyF528soAykHIUQ7TTultJV5IPCrvjRQQrGdJ/QtCdE0vZg+tA09nFN7AqgraU99kIvzyS0sqysj+pP1SJRmTRSGtlVAO3mILfkXOekZl1KD60G7CF+7BIaaW83FPD55tZhAGhnbLMYyiq7OiIyU61LTRcNSaJ0tAgMBAAECggEBAIGgGKcSzxCBbMYdXLV6TPbZ/HeaRGrwyVWUu7cmc0E8CJu6iWvmb2jGzbiCwuCT5luF6ZZ8JKchvU4FlTfsE5r9TQY2IZ/Ht4s65qBaDUEts5iY3kv8HX9+ZSXDJZpV0ztqqsPmx4ZNj+NYwWXwcFiKdb5R8OmV8bgSsnPddD6wFhwewglUOBPRAjropHE4sqk1Vam6q1MlFq5kiekMn/CItyFYFFzST/ruqAtVTp7YIvazAMrfCKH+pvXWk6pYNHZmL/JZey0GglRyJ1nItiqL33X8Lji056FcbAclidq022h/KPLEJpZk6irWqYdqYZeF6YMLHtdZFDkTZ/hXY+UCgYEA5i794UTQ1Kd6K+iui/S8K5H8nGdiXb3+uZ5j5VKYfbRmzXhAdVYisYe8czeTECxhH+MeHgM4tLR4ifx9q60ylvZxl9Fav1p6EaE36YcvGVmpm7Gm3q6QDDBa4gB+X9u7CxCS4LpotV917YS1QvOIF9lnRonSj1zNzFtbXkywrN8CgYEAwOpx/mR40ZvgZxNCq9DsIdrSZYAFFKpw0xy0OtF1PpuwMaREoRabnlVw6Bb3Hofg50XA3JxemzAX6fB92ee+NfXfeL4UtC4vG1K9JyiXHtHq8p9Uw2W03ehIEeNa3xdoRRnLmD4VUpyfL19ViE2+7TM1Gd3TogjDT+AMOCSuq3MCgYBsurPH7gaq/LVT+mRAzgj4l8v4YUlwuGeTbIMJdvt7HXUWB4CDLH3U2CYnUpAQKrZyJok6ahEmIr1xiKggKP7lmmHL8eNo0icpHrtXfzi7Q8Q/PCpzs4dtioXTjaIkS5nNvzVyG/uL+RyuZmpsxrZ5dYM4KbAhchfwORMutxEZhwKBgQC5zpVw4jCEItBmNuTWO+nTScGvxTgfiXIVw+XLaQa2AJoZlhAL34yPWdffko79tv3lgweY9HsimZXO2rU8dbp8mo5c6ydhy8HPXUeWOcAkDSdv/ApWENW9jgYsRIC3swHY3Fl+Dv3Wjce8huQI3mjwaYvRmBhIToxfmHnscVhTBQKBgB9uciEHfz8hMI7ePrPo2PkyK/RbJDm3HnuWE2lFBp7MOUMlh53MXwv4dIRaYMbRrFuN1UIKEFxuKhWwTHSzZJufk/UENrha/81fpj2BoFsAKkEunKeETvaIh6fZSjec16h2+zxbzwkdS6b+yIYkSlaoAxmDYrMtae0C8G4e0YS9"; String pubKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2RZZISModRzproL3eTxRtvVK/nToDbeLmAVdmaVtHgNCwjXMeNCZvHySZKO7+t7XySzBd2PhhQjvAkDd8HRKB5Y0uvP6TFwvhxOMkMydTeBFcUobQWNeAI7ttRms1txSNrmyrZr0WpWfk79VIsO+yI/jFN/Pj2gxD+vh5UUKU1LD2IQq/VxgtEpf8Vs6w7SvafPwYkpdPGCKUFkRvN1FrY2+tq0j1MRVJbB2rIunWDnT8cDUh2sWLXf4yNaJVOaaTFB0zbAk/qcoicGQyW7bVG7dVW8WywKmOAPeQCCQa+SJ4BhfI1k8eEAwFVRuxz/f9Ecfog9hZJ+RgELkpS8qhQIDAQAB";

rsaSigner signer = new rsaSigner();

Map<String, Object> params = new HashMap<>(); params.put("app_id", "hxgmau9imt86qky9"); params.put("version", "1.0"); params.put("key_version", "admin"); params.put("time", Long.toString(System.currentTimeMillis() / 1000)); params.put("coin", "trx");

try {

params.put("sign", signer.genSign(params, priKey));

Gson gson = new GsonBuilder().create(); System.out.println("params = " + gson.toJson(params));

String res = doPost(baseUrl + "/address/getBatch", gson.toJson(params)); if (null == res) { throw new RuntimeException("http error"); }

System.out.println("response = " + res);

JsonParser jp = new JsonParser(); JsonObject resEle = jp.parse(res).getAsJsonObject(); boolean retSignOK = signer.verifySign(resEle, resEle.get("sign").getAsString(), pubKey); if (!retSignOK) { throw new RuntimeException("verify response sign fail"); }

} catch (Exception e) { e.printStackTrace(); }

System.out.println("OK"); }

返回结果示例:

{
  "status":200,
  "msg":"请求成功",
  "data":[
    "HsZWVPmCS92hXJ4mUpTwCs3DX74MK1ihEBn",
    "HsCt7eYaJJkn331ZkprcbvGFDrRuqMYcAHx"
  ],
  "date_time":"2020-06-29 14:43:17",
  "time_stamp":1593412997,
  "sign":"lwxzuuGuZN1Z/j4hTombrcict1wom1+D6+k2URGIxL/L4sezn6Sh1IDawPixO2nEC2VZ9O0JVpBP+CH8QfjYY8Q0A+DTwLMjLRneB3iV/++c+ODcT8rUwHU+jAZmETccI2Knln5ND9MbrQpcWSW3wwPmJtNTeh6sYcwK2vJR18IAE26j47LQZV5RMfmWzHnIO2O1oftZuOT40H2aXfU3Zk6xybsMFi3uzYaK7/Zz5porGe6GG3IVELsFoHGtVl7mFGRl1sLUtT9iUuwa8F8alKozMjuK9IyW44ExHv0OyDS2PZewhwRRLnvUTTTM5+8bgAeM5w0bRetfL22coHnSHw=="
}
{
  "status": 500,
  "msg": "地址不足",
  "data": null,
  "date_time": "2020-01-09 15:46:14",
  "sign": "rzbmkcf0Vr1AEZAo0Lsnlmk1s6HGONYZkpQxWKhGwIFxyN/fkaYzA6UxhIm9C8Drlfa8oZxpyrH89POuoaVfToxPhC9p8w10rfb4G/kNaZBE/gIo2H8e4/CTvEsiX5lz/ASNLiSe6BtHStUwMDCsl+ub7TF79uybb0RDy5mOegM="
}
{
  "status":551,
  "msg":"有 6 个已分配未使用地址,请使用完再请求新的地址",
  "data":"6",
  "date_time":"2020-03-05 10:46:24",
  "time_stamp":1583376384,
  "sign":"e57nRfbDNvVIZuwvbXOsJaBnj9D+2hiP90SC8Q9ZCpdyTSbhB3WEpmotvZg11n3sW2Kzzle+ZSLPJH10iHqou3NgYzqEWD3EAThCzP0H8rhsj14NZ909JFAveRTe7XeP8xUcJINsY9HOliU2M5pt/qSnOx2CvdpFtxmVNLpIK+1VHdYuX6NRGc9TQ/Ptgwc6c9K7NNqqXY1y0e46LK8EBvXoEwbWa6L46f14Sx+/hN94Ymc6OKBUNFnbMGh31aeBp7E5YV/5fV2ZWKfNaNOxTyQVsPhpRt5NU9qCIzcgHKsqbroU72adWlBjyNrNWcXayilmwNHPAVJ1QKoqS6zoEQ=="
}

HTTP Request

POST : /address/getBatch

请求参数

参数名 必选 类型 说明
公共参数 是 JSON 公参指:签名(sign)、版本(version)、商户ID(app_id)、时间(time)
coin 是 string 12个字符内主链币名,币名平台提供为准(若是bnb_bsc请传eth)。可查询/coin/list接口查看币名

返回参数说明

参数名 必选 类型 说明
status 是 int 状态码
msg 否 string 100字内 状态描述
data 否 jsonObject 状态200返回地址数组,500地址不足返回null,551已分配未使用地址,返回未使用数字
date_time 否 DateTime 北京时间:2020-06-29 14:28:14
time_stamp 否 string 响应时间,单位秒:1593412094
sign 是 string 返回签名,对以上所有参与参数签名

合约币和主链币共享同一个地址,请只用主链币名进行申请即可,不支持用合约币名申请地址,对于商户同一个用户的一个或多个合约币及同属于一个主链的主链币,仅分配一个主链币地址即可。 案列:user_coin表

用户ID 币名 地址
1688eth0xa6f8745c56a7c4fcb094678a2fbdcbd9ee9228f7
1688usdt_erc200xa6f8745c56a7c4fcb094678a2fbdcbd9ee9228f7
1688leek0xa6f8745c56a7c4fcb094678a2fbdcbd9ee9228f7

地址列表

$url = "http://api.xxxx.com/shopapi/address/list";
$header = [
  'Content-Type:application/json',
];
$params = [
    "app_id" => "hxgmau9imt86qky9",
    "version" => "1.0",
    "time" => 1578997143,
    "sign" => "IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
    "coin" => "hc",
    "address" => "HsHGWeEMmx5QLds9UiWfjxarM4RbLAc3xrD",
    "is_used" => "1",
    "page" => "1"
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$return = curl_exec($ch);

print_r($return);

var url = "http://api.xxxx.com/shopapi/address/list"
data := map[string]string{
    "app_id":"hxgmau9imt86qky9",
    "version":"1.0",
    "time":"1578997143",
    "sign":"IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
    "coin":"hc",
    "address":"HsHGWeEMmx5QLds9UiWfjxarM4RbLAc3xrD",
    "is_used":"1",
    "page":"1",
}
dataType, _ := json.Marshal(data)
resp, err := http.Post(url, "application/json", strings.NewReader(string(dataType)))
if err != nil {
  fmt.Println(err)
}
defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) }

fmt.Println(string(body))

let HTTP = require('http')
let postData = {
  "app_id":"hxgmau9imt86qky9",
  "version":"1.0",
  "time":"1578997143",
  "sign":"IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
  "coin":"hc",
  "address":"HsHGWeEMmx5QLds9UiWfjxarM4RbLAc3xrD",
  "is_used":"1",
  "page":"1",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/address/list",
  method: 'POST',
  headers: {
    "Content-Type": "application/json; charset=utf-8"
  }
};
const REQUEST = HTTP.request(POST_OPTIONS,function (res) {
  let data = []
  res.on('data', chunk => {
    data.push(...chunk)
  })
  res.on('end', () => {
    let _date = JSON.parse( new TextDecoder().decode(new Uint8Array(data)))
    console.log(_date)
  })
});

REQUEST.setTimeout(6000) REQUEST.write(JSON.stringify(postData), 'utf8') REQUEST.end()

public static void main(String[] args) {

// 完整实例请查看"签名规则"中的Java示例代码

String baseUrl = "http://api.xxxx.com/shopapi"; String priKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCtdgvcfozY7fe/x6UlXR/Fff8+wX++CiG05YVRafDe90O8y5KJAMZ156TgajEUXSRyKZqASz7iVoMAcu5FqfK1KuOOdjTAg0LFe/twIZvKmAqHcCSS2pjUXk0fTpZEgQ5lmDCK12Mg07YXvr+BeHjF+kBpwRJMPMG/+DGBDYNFNeRSJqWyopt6yyF528soAykHIUQ7TTultJV5IPCrvjRQQrGdJ/QtCdE0vZg+tA09nFN7AqgraU99kIvzyS0sqysj+pP1SJRmTRSGtlVAO3mILfkXOekZl1KD60G7CF+7BIaaW83FPD55tZhAGhnbLMYyiq7OiIyU61LTRcNSaJ0tAgMBAAECggEBAIGgGKcSzxCBbMYdXLV6TPbZ/HeaRGrwyVWUu7cmc0E8CJu6iWvmb2jGzbiCwuCT5luF6ZZ8JKchvU4FlTfsE5r9TQY2IZ/Ht4s65qBaDUEts5iY3kv8HX9+ZSXDJZpV0ztqqsPmx4ZNj+NYwWXwcFiKdb5R8OmV8bgSsnPddD6wFhwewglUOBPRAjropHE4sqk1Vam6q1MlFq5kiekMn/CItyFYFFzST/ruqAtVTp7YIvazAMrfCKH+pvXWk6pYNHZmL/JZey0GglRyJ1nItiqL33X8Lji056FcbAclidq022h/KPLEJpZk6irWqYdqYZeF6YMLHtdZFDkTZ/hXY+UCgYEA5i794UTQ1Kd6K+iui/S8K5H8nGdiXb3+uZ5j5VKYfbRmzXhAdVYisYe8czeTECxhH+MeHgM4tLR4ifx9q60ylvZxl9Fav1p6EaE36YcvGVmpm7Gm3q6QDDBa4gB+X9u7CxCS4LpotV917YS1QvOIF9lnRonSj1zNzFtbXkywrN8CgYEAwOpx/mR40ZvgZxNCq9DsIdrSZYAFFKpw0xy0OtF1PpuwMaREoRabnlVw6Bb3Hofg50XA3JxemzAX6fB92ee+NfXfeL4UtC4vG1K9JyiXHtHq8p9Uw2W03ehIEeNa3xdoRRnLmD4VUpyfL19ViE2+7TM1Gd3TogjDT+AMOCSuq3MCgYBsurPH7gaq/LVT+mRAzgj4l8v4YUlwuGeTbIMJdvt7HXUWB4CDLH3U2CYnUpAQKrZyJok6ahEmIr1xiKggKP7lmmHL8eNo0icpHrtXfzi7Q8Q/PCpzs4dtioXTjaIkS5nNvzVyG/uL+RyuZmpsxrZ5dYM4KbAhchfwORMutxEZhwKBgQC5zpVw4jCEItBmNuTWO+nTScGvxTgfiXIVw+XLaQa2AJoZlhAL34yPWdffko79tv3lgweY9HsimZXO2rU8dbp8mo5c6ydhy8HPXUeWOcAkDSdv/ApWENW9jgYsRIC3swHY3Fl+Dv3Wjce8huQI3mjwaYvRmBhIToxfmHnscVhTBQKBgB9uciEHfz8hMI7ePrPo2PkyK/RbJDm3HnuWE2lFBp7MOUMlh53MXwv4dIRaYMbRrFuN1UIKEFxuKhWwTHSzZJufk/UENrha/81fpj2BoFsAKkEunKeETvaIh6fZSjec16h2+zxbzwkdS6b+yIYkSlaoAxmDYrMtae0C8G4e0YS9"; String pubKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2RZZISModRzproL3eTxRtvVK/nToDbeLmAVdmaVtHgNCwjXMeNCZvHySZKO7+t7XySzBd2PhhQjvAkDd8HRKB5Y0uvP6TFwvhxOMkMydTeBFcUobQWNeAI7ttRms1txSNrmyrZr0WpWfk79VIsO+yI/jFN/Pj2gxD+vh5UUKU1LD2IQq/VxgtEpf8Vs6w7SvafPwYkpdPGCKUFkRvN1FrY2+tq0j1MRVJbB2rIunWDnT8cDUh2sWLXf4yNaJVOaaTFB0zbAk/qcoicGQyW7bVG7dVW8WywKmOAPeQCCQa+SJ4BhfI1k8eEAwFVRuxz/f9Ecfog9hZJ+RgELkpS8qhQIDAQAB";

rsaSigner signer = new rsaSigner();

Map<String, Object> params = new HashMap<>(); params.put("app_id", "hxgmau9imt86qky9"); params.put("version", "1.0"); params.put("key_version", "admin"); params.put("time", Long.toString(System.currentTimeMillis() / 1000)); params.put("coin", "trx"); params.put("address", "HsHGWeEMmx5QLds9UiWfjxarM4RbLAc3xrD"); params.put("page", "1"); params.put("is_used", "1");

try {

params.put("sign", signer.genSign(params, priKey));

Gson gson = new GsonBuilder().create(); System.out.println("params = " + gson.toJson(params));

String res = doPost(baseUrl + "/address/list", gson.toJson(params)); if (null == res) { throw new RuntimeException("http error"); }

System.out.println("response = " + res);

JsonParser jp = new JsonParser(); JsonObject resEle = jp.parse(res).getAsJsonObject(); boolean retSignOK = signer.verifySign(resEle, resEle.get("sign").getAsString(), pubKey); if (!retSignOK) { throw new RuntimeException("verify response sign fail"); }

} catch (Exception e) { e.printStackTrace(); }

System.out.println("OK"); }

返回结果示例:

{
  "status":200,
  "msg":"处理成功",
  "data":{
    "page":1,
    "max_page":1,
    "count":4,
    "list":[
      {
        "address":"HsHGWeEMmx5QLds9UiWfjxarM4RbLAc3xrD",
        "user_id":""
      },
      {
        "address":"HsDZKWmgusF7fYbJ1Xw6FJJWx5Bkykdcfq9",
        "user_id":""
      }
    ]
  },
  "date_time":"2020-04-26 17:26:09",
  "time_stamp":1587893169,
  "sign":"LNnLd4tIHwNqRHgcd1d0E46u5rU0Jbm/fO5yZL8IIzt6cdfAwEBmtQ9kBczZhttp+KoP/rN7jZkex55SCZ5+9ILc276XOIalO6qF8L36GpwSJEizWYI1w6WjXTjdo9sCp2D6+ZUlV27mwkRtlwsIbF5gMmEnb2wmeyFoFctuDSHnPNLrs9WHHXvZ2q0lXU6L2LT1V8Ugfow3cZ7cCSbC9Vx9l8gMSGR/z7LRz8YB5iaM4rL9L2WpZy3SLoEd5d+Zu38de3z5TC2Cjnf3xkYxqKarPKy6mHe/RgIVFkYov8awveIYdaL2KZ+2bWmLeIXQLxUv7zVPaWytB82NPRz9Xg=="
}

HTTP Request

POST : /address/list

请求参数

参数名 必选 类型 说明
公共参数 是 JSON 公参指:签名(sign)、版本(version)、商户ID(app_id)、时间(time)
coin 是 string 主链币名-见支持公链公共信息说明(若是bnb_bsc请传eth)
address 否 string 地址
page 否 int 1<= N <=Max, 超过Max的取Max,小于1返回1
is_used 否 int 1=使用 , 2=未使用

返回参数说明

参数名 类型 说明
statusint状态码
msgstring状态描述
datajsonObject具体见下面 “data细节说明”。
data.pageint当前第几页
data.max_pageint一共多少页
data.countint本页记录数
data.listjsonArray具体每条记录
date_timestring响应时间
time_stampint时间戳,单位秒
signstring签名

类EOS的地址+memo模式

$url = "http://api.xxxx.com/shopapi/address/coinAccount";
$header = [
  'Content-Type:application/json',
];
$params = [
    "app_id" => "hxgmau9imt86qky9",
    "version" => "1.0",
    "time" => 1578997143,
    "sign" => "IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
    "coin" => "eos"
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$return = curl_exec($ch);

print_r($return);

var url = "http://api.xxxx.com/shopapi/address/coinAccount"
data := map[string]string{
    "app_id":"hxgmau9imt86qky9",
    "version":"1.0",
    "time":"1578997143",
    "sign":"IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
    "coin":"eos",
}
dataType, _ := json.Marshal(data)
resp, err := http.Post(url, "application/json", strings.NewReader(string(dataType)))
if err != nil {
  fmt.Println(err)
}
defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) }

fmt.Println(string(body))

let HTTP = require('http')
let postData = {
  "app_id":"hxgmau9imt86qky9",
  "version":"1.0",
  "time":"1578997143",
  "sign":"IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
  "coin":"eos",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/address/coinAccount",
  method: 'POST',
  headers: {
    "Content-Type": "application/json; charset=utf-8"
  }
};
const REQUEST = HTTP.request(POST_OPTIONS,function (res) {
  let data = []
  res.on('data', chunk => {
    data.push(...chunk)
  })
  res.on('end', () => {
    let _date = JSON.parse( new TextDecoder().decode(new Uint8Array(data)))
    console.log(_date)
  })
});

REQUEST.setTimeout(6000) REQUEST.write(JSON.stringify(postData), 'utf8') REQUEST.end()

public static void main(String[] args) {

// 完整实例请查看"签名规则"中的Java示例代码

String baseUrl = "http://api.xxxx.com/shopapi"; String priKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCtdgvcfozY7fe/x6UlXR/Fff8+wX++CiG05YVRafDe90O8y5KJAMZ156TgajEUXSRyKZqASz7iVoMAcu5FqfK1KuOOdjTAg0LFe/twIZvKmAqHcCSS2pjUXk0fTpZEgQ5lmDCK12Mg07YXvr+BeHjF+kBpwRJMPMG/+DGBDYNFNeRSJqWyopt6yyF528soAykHIUQ7TTultJV5IPCrvjRQQrGdJ/QtCdE0vZg+tA09nFN7AqgraU99kIvzyS0sqysj+pP1SJRmTRSGtlVAO3mILfkXOekZl1KD60G7CF+7BIaaW83FPD55tZhAGhnbLMYyiq7OiIyU61LTRcNSaJ0tAgMBAAECggEBAIGgGKcSzxCBbMYdXLV6TPbZ/HeaRGrwyVWUu7cmc0E8CJu6iWvmb2jGzbiCwuCT5luF6ZZ8JKchvU4FlTfsE5r9TQY2IZ/Ht4s65qBaDUEts5iY3kv8HX9+ZSXDJZpV0ztqqsPmx4ZNj+NYwWXwcFiKdb5R8OmV8bgSsnPddD6wFhwewglUOBPRAjropHE4sqk1Vam6q1MlFq5kiekMn/CItyFYFFzST/ruqAtVTp7YIvazAMrfCKH+pvXWk6pYNHZmL/JZey0GglRyJ1nItiqL33X8Lji056FcbAclidq022h/KPLEJpZk6irWqYdqYZeF6YMLHtdZFDkTZ/hXY+UCgYEA5i794UTQ1Kd6K+iui/S8K5H8nGdiXb3+uZ5j5VKYfbRmzXhAdVYisYe8czeTECxhH+MeHgM4tLR4ifx9q60ylvZxl9Fav1p6EaE36YcvGVmpm7Gm3q6QDDBa4gB+X9u7CxCS4LpotV917YS1QvOIF9lnRonSj1zNzFtbXkywrN8CgYEAwOpx/mR40ZvgZxNCq9DsIdrSZYAFFKpw0xy0OtF1PpuwMaREoRabnlVw6Bb3Hofg50XA3JxemzAX6fB92ee+NfXfeL4UtC4vG1K9JyiXHtHq8p9Uw2W03ehIEeNa3xdoRRnLmD4VUpyfL19ViE2+7TM1Gd3TogjDT+AMOCSuq3MCgYBsurPH7gaq/LVT+mRAzgj4l8v4YUlwuGeTbIMJdvt7HXUWB4CDLH3U2CYnUpAQKrZyJok6ahEmIr1xiKggKP7lmmHL8eNo0icpHrtXfzi7Q8Q/PCpzs4dtioXTjaIkS5nNvzVyG/uL+RyuZmpsxrZ5dYM4KbAhchfwORMutxEZhwKBgQC5zpVw4jCEItBmNuTWO+nTScGvxTgfiXIVw+XLaQa2AJoZlhAL34yPWdffko79tv3lgweY9HsimZXO2rU8dbp8mo5c6ydhy8HPXUeWOcAkDSdv/ApWENW9jgYsRIC3swHY3Fl+Dv3Wjce8huQI3mjwaYvRmBhIToxfmHnscVhTBQKBgB9uciEHfz8hMI7ePrPo2PkyK/RbJDm3HnuWE2lFBp7MOUMlh53MXwv4dIRaYMbRrFuN1UIKEFxuKhWwTHSzZJufk/UENrha/81fpj2BoFsAKkEunKeETvaIh6fZSjec16h2+zxbzwkdS6b+yIYkSlaoAxmDYrMtae0C8G4e0YS9"; String pubKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2RZZISModRzproL3eTxRtvVK/nToDbeLmAVdmaVtHgNCwjXMeNCZvHySZKO7+t7XySzBd2PhhQjvAkDd8HRKB5Y0uvP6TFwvhxOMkMydTeBFcUobQWNeAI7ttRms1txSNrmyrZr0WpWfk79VIsO+yI/jFN/Pj2gxD+vh5UUKU1LD2IQq/VxgtEpf8Vs6w7SvafPwYkpdPGCKUFkRvN1FrY2+tq0j1MRVJbB2rIunWDnT8cDUh2sWLXf4yNaJVOaaTFB0zbAk/qcoicGQyW7bVG7dVW8WywKmOAPeQCCQa+SJ4BhfI1k8eEAwFVRuxz/f9Ecfog9hZJ+RgELkpS8qhQIDAQAB";

rsaSigner signer = new rsaSigner();

Map<String, Object> params = new HashMap<>(); params.put("app_id", "hxgmau9imt86qky9"); params.put("version", "1.0"); params.put("key_version", "admin"); params.put("time", Long.toString(System.currentTimeMillis() / 1000)); params.put("coin", "trx");

try {

params.put("sign", signer.genSign(params, priKey));

Gson gson = new GsonBuilder().create(); System.out.println("params = " + gson.toJson(params));

String res = doPost(baseUrl + "/address/coinAccount", gson.toJson(params)); if (null == res) { throw new RuntimeException("http error"); }

System.out.println("response = " + res);

JsonParser jp = new JsonParser(); JsonObject resEle = jp.parse(res).getAsJsonObject(); boolean retSignOK = signer.verifySign(resEle, resEle.get("sign").getAsString(), pubKey); if (!retSignOK) { throw new RuntimeException("verify response sign fail"); }

} catch (Exception e) { e.printStackTrace(); }

System.out.println("OK"); }

返回结果示例:

{
  "status":200,
  "msg":"请求成功",
  "data":"hyperpayeos1",
  "date_time":"2020-04-08 18:20:33",
  "time_stamp":1586341233,
  "sign":"r+AWadjxa5L9CY5gWNMy5+4n9gtmHGUIsxgsTVOhs5mHPe2/jmm1jYOXS+KW/TLZLBnN1AMLeAgnHCQ6UxztsldMJg71ef3MTgV1GikCDXO+RQwQXYVHjjq1Cn6z/dGYikl7pht+avjnlmvGHUQjZBmhkKCpWVyG7Hl+h1cJKyMAZhJNqKemmSpbmTxe5GEDDR/NSrqKNsd0gt0QXMJu4VwURr6piRqc3euNqbtY94xelXcie75ZE0SKKHSikk6H/k1RQCfbTmfqhwp+vDZfrZ6kBucvaenczgFgX4S7k9Akb1B/xJ1n5NjLUilzn1GO2STUwhY4ATE5IbXJ819QVQ=="
}

HTTP Request

POST : /address/coinAccount

请求参数

参数名 必选 类型 说明
公共参数 是 JSON 公参指:签名(sign)、版本(version)、商户ID(app_id)、时间(time)
coin 是 string 主链币名-见支持公链公共信息说明(若是bnb_bsc请传eth)

返回参数说明

参数名 类型 说明
status int 状态码
msg string 状态描述
data jsonObject
date_time string 响应时间
time_stamp int 时间戳,单位秒
sign string 签名

地址状态同步

$url = "http://api.xxxx.com/shopapi/address/syncStatus";
$header = [
  'Content-Type:application/json',
];
$params = [
    "app_id" => "hxgmau9imt86qky9",
    "version" => "1.0",
    "time" => 1578997143,
    "sign" => "IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
    "coin" => "eth",
    "address" => "0xb930c8149bc0bbb0214ae4207164d3b1cb41f395",
    "user_id" => "28"
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$return = curl_exec($ch);

print_r($return);

var url = "http://api.xxxx.com/shopapi/address/syncStatus"
data := map[string]string{
    "app_id":"hxgmau9imt86qky9",
    "version":"1.0",
    "time":"1578997143",
    "sign":"IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
    "coin":"eth",
    "address":"0xb930c8149bc0bbb0214ae4207164d3b1cb41f395",
    "user_id":"28",
}
dataType, _ := json.Marshal(data)
resp, err := http.Post(url, "application/json", strings.NewReader(string(dataType)))
if err != nil {
  fmt.Println(err)
}
defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) }

fmt.Println(string(body))

let HTTP = require('http')
let postData = {
  "app_id":"hxgmau9imt86qky9",
  "version":"1.0",
  "time":"1578997143",
  "sign":"IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
  "coin":"eth",
  "address":"0xb930c8149bc0bbb0214ae4207164d3b1cb41f395",
  "user_id":"28",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/address/syncStatus",
  method: 'POST',
  headers: {
    "Content-Type": "application/json; charset=utf-8"
  }
};
const REQUEST = HTTP.request(POST_OPTIONS,function (res) {
  let data = []
  res.on('data', chunk => {
    data.push(...chunk)
  })
  res.on('end', () => {
    let _date = JSON.parse( new TextDecoder().decode(new Uint8Array(data)))
    console.log(_date)
  })
});

REQUEST.setTimeout(6000) REQUEST.write(JSON.stringify(postData), 'utf8') REQUEST.end()

public static void main(String[] args) {

// 完整实例请查看"签名规则"中的Java示例代码

String baseUrl = "http://api.xxxx.com/shopapi"; String priKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCtdgvcfozY7fe/x6UlXR/Fff8+wX++CiG05YVRafDe90O8y5KJAMZ156TgajEUXSRyKZqASz7iVoMAcu5FqfK1KuOOdjTAg0LFe/twIZvKmAqHcCSS2pjUXk0fTpZEgQ5lmDCK12Mg07YXvr+BeHjF+kBpwRJMPMG/+DGBDYNFNeRSJqWyopt6yyF528soAykHIUQ7TTultJV5IPCrvjRQQrGdJ/QtCdE0vZg+tA09nFN7AqgraU99kIvzyS0sqysj+pP1SJRmTRSGtlVAO3mILfkXOekZl1KD60G7CF+7BIaaW83FPD55tZhAGhnbLMYyiq7OiIyU61LTRcNSaJ0tAgMBAAECggEBAIGgGKcSzxCBbMYdXLV6TPbZ/HeaRGrwyVWUu7cmc0E8CJu6iWvmb2jGzbiCwuCT5luF6ZZ8JKchvU4FlTfsE5r9TQY2IZ/Ht4s65qBaDUEts5iY3kv8HX9+ZSXDJZpV0ztqqsPmx4ZNj+NYwWXwcFiKdb5R8OmV8bgSsnPddD6wFhwewglUOBPRAjropHE4sqk1Vam6q1MlFq5kiekMn/CItyFYFFzST/ruqAtVTp7YIvazAMrfCKH+pvXWk6pYNHZmL/JZey0GglRyJ1nItiqL33X8Lji056FcbAclidq022h/KPLEJpZk6irWqYdqYZeF6YMLHtdZFDkTZ/hXY+UCgYEA5i794UTQ1Kd6K+iui/S8K5H8nGdiXb3+uZ5j5VKYfbRmzXhAdVYisYe8czeTECxhH+MeHgM4tLR4ifx9q60ylvZxl9Fav1p6EaE36YcvGVmpm7Gm3q6QDDBa4gB+X9u7CxCS4LpotV917YS1QvOIF9lnRonSj1zNzFtbXkywrN8CgYEAwOpx/mR40ZvgZxNCq9DsIdrSZYAFFKpw0xy0OtF1PpuwMaREoRabnlVw6Bb3Hofg50XA3JxemzAX6fB92ee+NfXfeL4UtC4vG1K9JyiXHtHq8p9Uw2W03ehIEeNa3xdoRRnLmD4VUpyfL19ViE2+7TM1Gd3TogjDT+AMOCSuq3MCgYBsurPH7gaq/LVT+mRAzgj4l8v4YUlwuGeTbIMJdvt7HXUWB4CDLH3U2CYnUpAQKrZyJok6ahEmIr1xiKggKP7lmmHL8eNo0icpHrtXfzi7Q8Q/PCpzs4dtioXTjaIkS5nNvzVyG/uL+RyuZmpsxrZ5dYM4KbAhchfwORMutxEZhwKBgQC5zpVw4jCEItBmNuTWO+nTScGvxTgfiXIVw+XLaQa2AJoZlhAL34yPWdffko79tv3lgweY9HsimZXO2rU8dbp8mo5c6ydhy8HPXUeWOcAkDSdv/ApWENW9jgYsRIC3swHY3Fl+Dv3Wjce8huQI3mjwaYvRmBhIToxfmHnscVhTBQKBgB9uciEHfz8hMI7ePrPo2PkyK/RbJDm3HnuWE2lFBp7MOUMlh53MXwv4dIRaYMbRrFuN1UIKEFxuKhWwTHSzZJufk/UENrha/81fpj2BoFsAKkEunKeETvaIh6fZSjec16h2+zxbzwkdS6b+yIYkSlaoAxmDYrMtae0C8G4e0YS9"; String pubKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2RZZISModRzproL3eTxRtvVK/nToDbeLmAVdmaVtHgNCwjXMeNCZvHySZKO7+t7XySzBd2PhhQjvAkDd8HRKB5Y0uvP6TFwvhxOMkMydTeBFcUobQWNeAI7ttRms1txSNrmyrZr0WpWfk79VIsO+yI/jFN/Pj2gxD+vh5UUKU1LD2IQq/VxgtEpf8Vs6w7SvafPwYkpdPGCKUFkRvN1FrY2+tq0j1MRVJbB2rIunWDnT8cDUh2sWLXf4yNaJVOaaTFB0zbAk/qcoicGQyW7bVG7dVW8WywKmOAPeQCCQa+SJ4BhfI1k8eEAwFVRuxz/f9Ecfog9hZJ+RgELkpS8qhQIDAQAB";

rsaSigner signer = new rsaSigner();

Map<String, Object> params = new HashMap<>(); params.put("app_id", "hxgmau9imt86qky9"); params.put("version", "1.0"); params.put("key_version", "admin"); params.put("time", Long.toString(System.currentTimeMillis() / 1000)); params.put("coin", "trx"); params.put("address", "HsHGWeEMmx5QLds9UiWfjxarM4RbLAc3xrD"); params.put("user_id", "111");

try {

params.put("sign", signer.genSign(params, priKey));

Gson gson = new GsonBuilder().create(); System.out.println("params = " + gson.toJson(params));

String res = doPost(baseUrl + "/address/syncStatus", gson.toJson(params)); if (null == res) { throw new RuntimeException("http error"); }

System.out.println("response = " + res);

JsonParser jp = new JsonParser(); JsonObject resEle = jp.parse(res).getAsJsonObject(); boolean retSignOK = signer.verifySign(resEle, resEle.get("sign").getAsString(), pubKey); if (!retSignOK) { throw new RuntimeException("verify response sign fail"); }

} catch (Exception e) { e.printStackTrace(); }

System.out.println("OK"); }

返回结果示例:

{
  "status":200,
  "msg":"同步成功",
  "data":{
    "address":"0x0603b5a606e6ae28e729d145f4d5a99bd8769950",
    "coin":"eth"
  },
  "date_time":"2020-01-14 00:33:58",
  "sign":"KVZrYNjK9xwZvqJHMSRxxK4PjbirEtS1vyI220BzK/rF7bp+iU+ClQU5BSERcaujFz0EqRtZW5LSojjgRPeGbh4Wyqmlpk/Qz7ulTC0lqkik3torj3xL4SP2MKvUMXyPRRn8MKh586c8XLF1APRR48mdlDVQgxdUmr9mtB8ssLI="
}

HTTP Request

POST : /address/syncStatus

请求参数

参数名 必选 类型 说明
公共参数 是 JSON 公参指:签名(sign)、版本(version)、商户ID(app_id)、时间(time)
coin 是 string 12个字符以内,地址所属主链币种 (若是bnb_bsc请传eth)
address 是 string 地址,128个字符以内
user_id 是 string 关联到地址的用户ID,由字母、数字和下划线组成,长度40以内。

返回参数说明

参数名 必选 类型 说明
status 是 int 返回状态码
msg 是 string 状态码描述
date_time 是 string 接口返回时间
time_stamp 是 string 无时区时间单位秒
data 是 null或JSONObjectString 返回数据
sign 是 string 后端签名

注意:商户把地址分配给自己的用户后,一定要请求该接口回传使用状态信息,并获取到 200正确状态码返回值后再开启用户的充提现功能。
*1、如果不同步会影响地址获取接口的使用(已分配未使用的地址数量 超过一定量时,平台不再分配新的地址给商家)。
*2、如果状态同步没有收到正确返回结果,而是报错提示,请人工排查错误。
设计规则:相同币种或合约币,相同商家,相同用户ID 只能分配一个地址。
如果违法上面规则会报错。

地址状态批量同步

$url = "http://api.xxxx.com/shopapi/address/syncBatchStatus";
$header = [
  'Content-Type:application/json',
];
$params = [
    "app_id" => "hxgmau9imt86qky9",
    "version" => "1.0",
    "time" => 1578997143,
    "sign" => "IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
    "address_list" => [
        [
            "address" => "0x038B8E7406dED2Be112B6c7E4681Df5316957cad",
            "coin" => "eth",
            "user_id" => "123sa"
        ],
        [
            "address" => "0xf854AC319A546ae11e367ef80a203AaC923ca6A3",
            "coin" => "eth",
            "user_id" => "123sb"
        ]
    ]
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$return = curl_exec($ch);

print_r($return);

var url = "http://api.xxxx.com/shopapi/address/syncBatchStatus"
data := map[string]interface{}{
    "app_id":  "hxgmau9imt86qky9",
    "version": "1.0",
    "time":    "1578997143",
    "sign":    "IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
    "address_list": []interface{}{
        map[string]interface{}{
          "address": "0x038B8E7406dED2Be112B6c7E4681Df5316957cad",
          "coin":    "eth",
          "user_id": "123sa",
        },
        map[string]interface{}{
          "address": "0xf854AC319A546ae11e367ef80a203AaC923ca6A3",
          "coin":    "eth",
          "user_id": "123sb",
        },
    },
}
dataType, _ := json.Marshal(data)
resp, err := http.Post(url, "application/json", strings.NewReader(string(dataType)))
if err != nil {
  fmt.Println(err)
}
defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) }

fmt.Println(string(body))

let HTTP = require('http')
let postData = {
  "app_id": "hxgmau9imt86qky9",
  "version": "1.0",
  "time": "1578997143",
  "sign": "IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
  "address_list": [
      {
        "address": "0x038B8E7406dED2Be112B6c7E4681Df5316957cad",
          "coin": "eth",
          "user_id": "123sa",
      },
      {
        "address": "0xf854AC319A546ae11e367ef80a203AaC923ca6A3",
          "coin": "eth",
          "user_id": "123sb",
      },
   ],
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/address/syncBatchStatus",
  method: 'POST',
  headers: {
    "Content-Type": "application/json; charset=utf-8"
  }
};
const REQUEST = HTTP.request(POST_OPTIONS,function (res) {
  let data = []
  res.on('data', chunk => {
    data.push(...chunk)
  })
  res.on('end', () => {
    let _date = JSON.parse( new TextDecoder().decode(new Uint8Array(data)))
    console.log(_date)
  })
});

REQUEST.setTimeout(6000) REQUEST.write(JSON.stringify(postData), 'utf8') REQUEST.end()

public static void main(String[] args) {

// 完整实例请查看"签名规则"中的Java示例代码

String baseUrl = "http://api.xxxx.com/shopapi"; String priKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCtdgvcfozY7fe/x6UlXR/Fff8+wX++CiG05YVRafDe90O8y5KJAMZ156TgajEUXSRyKZqASz7iVoMAcu5FqfK1KuOOdjTAg0LFe/twIZvKmAqHcCSS2pjUXk0fTpZEgQ5lmDCK12Mg07YXvr+BeHjF+kBpwRJMPMG/+DGBDYNFNeRSJqWyopt6yyF528soAykHIUQ7TTultJV5IPCrvjRQQrGdJ/QtCdE0vZg+tA09nFN7AqgraU99kIvzyS0sqysj+pP1SJRmTRSGtlVAO3mILfkXOekZl1KD60G7CF+7BIaaW83FPD55tZhAGhnbLMYyiq7OiIyU61LTRcNSaJ0tAgMBAAECggEBAIGgGKcSzxCBbMYdXLV6TPbZ/HeaRGrwyVWUu7cmc0E8CJu6iWvmb2jGzbiCwuCT5luF6ZZ8JKchvU4FlTfsE5r9TQY2IZ/Ht4s65qBaDUEts5iY3kv8HX9+ZSXDJZpV0ztqqsPmx4ZNj+NYwWXwcFiKdb5R8OmV8bgSsnPddD6wFhwewglUOBPRAjropHE4sqk1Vam6q1MlFq5kiekMn/CItyFYFFzST/ruqAtVTp7YIvazAMrfCKH+pvXWk6pYNHZmL/JZey0GglRyJ1nItiqL33X8Lji056FcbAclidq022h/KPLEJpZk6irWqYdqYZeF6YMLHtdZFDkTZ/hXY+UCgYEA5i794UTQ1Kd6K+iui/S8K5H8nGdiXb3+uZ5j5VKYfbRmzXhAdVYisYe8czeTECxhH+MeHgM4tLR4ifx9q60ylvZxl9Fav1p6EaE36YcvGVmpm7Gm3q6QDDBa4gB+X9u7CxCS4LpotV917YS1QvOIF9lnRonSj1zNzFtbXkywrN8CgYEAwOpx/mR40ZvgZxNCq9DsIdrSZYAFFKpw0xy0OtF1PpuwMaREoRabnlVw6Bb3Hofg50XA3JxemzAX6fB92ee+NfXfeL4UtC4vG1K9JyiXHtHq8p9Uw2W03ehIEeNa3xdoRRnLmD4VUpyfL19ViE2+7TM1Gd3TogjDT+AMOCSuq3MCgYBsurPH7gaq/LVT+mRAzgj4l8v4YUlwuGeTbIMJdvt7HXUWB4CDLH3U2CYnUpAQKrZyJok6ahEmIr1xiKggKP7lmmHL8eNo0icpHrtXfzi7Q8Q/PCpzs4dtioXTjaIkS5nNvzVyG/uL+RyuZmpsxrZ5dYM4KbAhchfwORMutxEZhwKBgQC5zpVw4jCEItBmNuTWO+nTScGvxTgfiXIVw+XLaQa2AJoZlhAL34yPWdffko79tv3lgweY9HsimZXO2rU8dbp8mo5c6ydhy8HPXUeWOcAkDSdv/ApWENW9jgYsRIC3swHY3Fl+Dv3Wjce8huQI3mjwaYvRmBhIToxfmHnscVhTBQKBgB9uciEHfz8hMI7ePrPo2PkyK/RbJDm3HnuWE2lFBp7MOUMlh53MXwv4dIRaYMbRrFuN1UIKEFxuKhWwTHSzZJufk/UENrha/81fpj2BoFsAKkEunKeETvaIh6fZSjec16h2+zxbzwkdS6b+yIYkSlaoAxmDYrMtae0C8G4e0YS9"; String pubKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2RZZISModRzproL3eTxRtvVK/nToDbeLmAVdmaVtHgNCwjXMeNCZvHySZKO7+t7XySzBd2PhhQjvAkDd8HRKB5Y0uvP6TFwvhxOMkMydTeBFcUobQWNeAI7ttRms1txSNrmyrZr0WpWfk79VIsO+yI/jFN/Pj2gxD+vh5UUKU1LD2IQq/VxgtEpf8Vs6w7SvafPwYkpdPGCKUFkRvN1FrY2+tq0j1MRVJbB2rIunWDnT8cDUh2sWLXf4yNaJVOaaTFB0zbAk/qcoicGQyW7bVG7dVW8WywKmOAPeQCCQa+SJ4BhfI1k8eEAwFVRuxz/f9Ecfog9hZJ+RgELkpS8qhQIDAQAB";

rsaSigner signer = new rsaSigner();

Map<String, Object> params = new HashMap<>(); params.put("app_id", "hxgmau9imt86qky9"); params.put("version", "1.0"); params.put("key_version", "admin"); params.put("time", Long.toString(System.currentTimeMillis() / 1000)); List<addressObj> addressList = new ArrayList<addressObj>(); addressList.add(new addressObj("trx", "TFf9pAefXqKMekvizwiFi1YgdXH4fRjNYS", "111")); addressList.add(new addressObj("trx", "TNsym9u9o2LGNMJ9pkXQ9EkubrKanCV1HJ", "222")); params.put("address_list", addressList);

try {

params.put("sign", signer.genSign(params, priKey));

Gson gson = new GsonBuilder().create(); System.out.println("params = " + gson.toJson(params));

String res = doPost(baseUrl + "/address/syncBatchStatus", gson.toJson(params)); if (null == res) { throw new RuntimeException("http error"); }

System.out.println("response = " + res);

JsonParser jp = new JsonParser(); JsonObject resEle = jp.parse(res).getAsJsonObject(); boolean retSignOK = signer.verifySign(resEle, resEle.get("sign").getAsString(), pubKey); if (!retSignOK) { throw new RuntimeException("verify response sign fail"); }

} catch (Exception e) { e.printStackTrace(); }

System.out.println("OK"); }

public class addressObj { public String coin; public String address; @SerializedName("user_id") public String userId;

addressObj(String coin, String address, String user_id) { this.coin = coin; this.address = address; this.userId = user_id; }

public String getAddress() { return address; }

public String getCoin() { return coin; }

public String getUserId() { return userId; } }

返回结果示例:

{
  "status":200,
  "msg":"请求成功",
  "data":{
    "success_data":[
      {
        "address":"0x038B8E7406dED2Be112B6c7E4681Df5316957cad",
        "user_id":"123sa",
        "coin":"eth"
      }
    ],
    "fail_data":[
      {
        "address":"0xf854AC319A546ae11e367ef80a203AaC923ca6A3",
        "user_id":"123sb",
        "coin":"eth",
        "msg":"该地址已分配给其他用户不能重复分配",
        "status":524,
        "owner_user_id":"345ad"
      }
    ]
  },
  "date_time":"2021-03-22 10:55:58",
  "time_stamp":1616381758,
  "sign":"NTQg0pwGcHoIBTDzUAx635olXJDzCVy3OWCvu7LWdcZ3/2uYGjpflNXgXDtO8lMoK57GYZqG8p4v+0zd2ggBIk+XVhGAjPId8YLEsRFjWWXFxCWKpZALT54vH5zH5RdBsoZPW2lR/YQbZNhCbVED1QGB+QxFSx8wkf1Qi+R9WC4/bKhYZmmJXi9aoJCR9+BcdVVf0D+GBg3VqRWDPAosOHiCDRPsOw5+X8DijEkS7n8GFf9w5AT/lajWinlVU5fN2nra7sunYoJqUrk4tm3yTvF6k0GxcW6byFUZcddMJts9rE/uG3F+G/xW2MMG/F0N8scYKjyD4r85oMNl/pxBeQ=="
}

HTTP Request

POST : /address/syncBatchStatus

请求参数

参数名 必选 类型 长度 说明
公共参数 是 JSON 公参指:签名(sign)、版本(version)、商户ID(app_id)、时间(time)
address_list 是 array
address_list.address 是 string 128个字符以内 地址
address_list.coin 是 string 12个字符以内 地址所属主链币种 (若是bnb_bsc请传eth)
address_list.user_id 是 string 40以内字符串 关联到地址的用户ID,由字母、数字和下划线组成。

返回参数说明

参数名 类型 说明
status 是 int
msg 是 string
date_time 是 string
time_stamp 是 string
success_data 是 null或JSONObjectString
success_data.address 是 string
success_data.coin 是 string
success_data.user_id 是 string
fail_data 是 null或JSONObjectString
fail_data.address 是 string
fail_data.coin 是 string
fail_data.user_id 是 string
fail_data.status 是 string
fail_data.msg 是 string
fail_data.old_address 是 string
fail_data.owner_user_id 是 string
sign 是 string

注意:商户把地址分配给自己的用户后,一定要请求该接口回传使用状态信息,并获取到 200正确状态码返回值后再开启用户的充提现功能。
1、如果不同步会影响地址获取接口的使用(已分配未使用的地址数量 超过一定量时,平台不再分配新的地址给商家)。
2、如果状态同步没有收到正确返回结果,而是报错提示,请人工排查错误。
设计规则:相同币种或合约币,相同商家,相同用户ID 只能分配一个地址。
如果违法上面规则会报错。

地址验证

$url = "http://api.xxxx.com/shopapi/address/verifyAddress";
$header = [
  'Content-Type:application/json',
];
$params = [
    "app_id" => "hxgmau9imt86qky9",
    "version" => "1.0",
    "time" => 1578997143,
    "sign" => "IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
    "coin" => "trx",
    "address" => "TUEgUZh24tA48EXiAQjA6Qf6rSS7bJKQ6g"
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$return = curl_exec($ch);

print_r($return);

var url = "http://api.xxxx.com/shopapi/address/verifyAddress"
data := map[string]string{
    "app_id":"hxgmau9imt86qky9",
    "version":"1.0",
    "time":"1578997143",
    "sign":"IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
    "coin":"trx",
    "address":"TUEgUZh24tA48EXiAQjA6Qf6rSS7bJKQ6g",
}
dataType, _ := json.Marshal(data)
resp, err := http.Post(url, "application/json", strings.NewReader(string(dataType)))
if err != nil {
  fmt.Println(err)
}
defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) }

fmt.Println(string(body))

let HTTP = require('http')
let postData = {
  "app_id":"hxgmau9imt86qky9",
  "version":"1.0",
  "time":"1578997143",
  "sign":"IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
  "coin":"trx",
  "address":"TUEgUZh24tA48EXiAQjA6Qf6rSS7bJKQ6g",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/address/verifyAddress",
  method: 'POST',
  headers: {
    "Content-Type": "application/json; charset=utf-8"
  }
};
const REQUEST = HTTP.request(POST_OPTIONS,function (res) {
  let data = []
  res.on('data', chunk => {
    data.push(...chunk)
  })
  res.on('end', () => {
    let _date = JSON.parse( new TextDecoder().decode(new Uint8Array(data)))
    console.log(_date)
  })
});

REQUEST.setTimeout(6000) REQUEST.write(JSON.stringify(postData), 'utf8') REQUEST.end()

public static void main(String[] args) {

// 完整实例请查看"签名规则"中的Java示例代码

String baseUrl = "http://api.xxxx.com/shopapi"; String priKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCtdgvcfozY7fe/x6UlXR/Fff8+wX++CiG05YVRafDe90O8y5KJAMZ156TgajEUXSRyKZqASz7iVoMAcu5FqfK1KuOOdjTAg0LFe/twIZvKmAqHcCSS2pjUXk0fTpZEgQ5lmDCK12Mg07YXvr+BeHjF+kBpwRJMPMG/+DGBDYNFNeRSJqWyopt6yyF528soAykHIUQ7TTultJV5IPCrvjRQQrGdJ/QtCdE0vZg+tA09nFN7AqgraU99kIvzyS0sqysj+pP1SJRmTRSGtlVAO3mILfkXOekZl1KD60G7CF+7BIaaW83FPD55tZhAGhnbLMYyiq7OiIyU61LTRcNSaJ0tAgMBAAECggEBAIGgGKcSzxCBbMYdXLV6TPbZ/HeaRGrwyVWUu7cmc0E8CJu6iWvmb2jGzbiCwuCT5luF6ZZ8JKchvU4FlTfsE5r9TQY2IZ/Ht4s65qBaDUEts5iY3kv8HX9+ZSXDJZpV0ztqqsPmx4ZNj+NYwWXwcFiKdb5R8OmV8bgSsnPddD6wFhwewglUOBPRAjropHE4sqk1Vam6q1MlFq5kiekMn/CItyFYFFzST/ruqAtVTp7YIvazAMrfCKH+pvXWk6pYNHZmL/JZey0GglRyJ1nItiqL33X8Lji056FcbAclidq022h/KPLEJpZk6irWqYdqYZeF6YMLHtdZFDkTZ/hXY+UCgYEA5i794UTQ1Kd6K+iui/S8K5H8nGdiXb3+uZ5j5VKYfbRmzXhAdVYisYe8czeTECxhH+MeHgM4tLR4ifx9q60ylvZxl9Fav1p6EaE36YcvGVmpm7Gm3q6QDDBa4gB+X9u7CxCS4LpotV917YS1QvOIF9lnRonSj1zNzFtbXkywrN8CgYEAwOpx/mR40ZvgZxNCq9DsIdrSZYAFFKpw0xy0OtF1PpuwMaREoRabnlVw6Bb3Hofg50XA3JxemzAX6fB92ee+NfXfeL4UtC4vG1K9JyiXHtHq8p9Uw2W03ehIEeNa3xdoRRnLmD4VUpyfL19ViE2+7TM1Gd3TogjDT+AMOCSuq3MCgYBsurPH7gaq/LVT+mRAzgj4l8v4YUlwuGeTbIMJdvt7HXUWB4CDLH3U2CYnUpAQKrZyJok6ahEmIr1xiKggKP7lmmHL8eNo0icpHrtXfzi7Q8Q/PCpzs4dtioXTjaIkS5nNvzVyG/uL+RyuZmpsxrZ5dYM4KbAhchfwORMutxEZhwKBgQC5zpVw4jCEItBmNuTWO+nTScGvxTgfiXIVw+XLaQa2AJoZlhAL34yPWdffko79tv3lgweY9HsimZXO2rU8dbp8mo5c6ydhy8HPXUeWOcAkDSdv/ApWENW9jgYsRIC3swHY3Fl+Dv3Wjce8huQI3mjwaYvRmBhIToxfmHnscVhTBQKBgB9uciEHfz8hMI7ePrPo2PkyK/RbJDm3HnuWE2lFBp7MOUMlh53MXwv4dIRaYMbRrFuN1UIKEFxuKhWwTHSzZJufk/UENrha/81fpj2BoFsAKkEunKeETvaIh6fZSjec16h2+zxbzwkdS6b+yIYkSlaoAxmDYrMtae0C8G4e0YS9"; String pubKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2RZZISModRzproL3eTxRtvVK/nToDbeLmAVdmaVtHgNCwjXMeNCZvHySZKO7+t7XySzBd2PhhQjvAkDd8HRKB5Y0uvP6TFwvhxOMkMydTeBFcUobQWNeAI7ttRms1txSNrmyrZr0WpWfk79VIsO+yI/jFN/Pj2gxD+vh5UUKU1LD2IQq/VxgtEpf8Vs6w7SvafPwYkpdPGCKUFkRvN1FrY2+tq0j1MRVJbB2rIunWDnT8cDUh2sWLXf4yNaJVOaaTFB0zbAk/qcoicGQyW7bVG7dVW8WywKmOAPeQCCQa+SJ4BhfI1k8eEAwFVRuxz/f9Ecfog9hZJ+RgELkpS8qhQIDAQAB";

rsaSigner signer = new rsaSigner();

Map<String, Object> params = new HashMap<>(); params.put("app_id", "hxgmau9imt86qky9"); params.put("version", "1.0"); params.put("key_version", "admin"); params.put("time", Long.toString(System.currentTimeMillis() / 1000)); params.put("coin", "trx"); params.put("address", "HsHGWeEMmx5QLds9UiWfjxarM4RbLAc3xrD");

try {

params.put("sign", signer.genSign(params, priKey));

Gson gson = new GsonBuilder().create(); System.out.println("params = " + gson.toJson(params));

String res = doPost(baseUrl + "/address/verifyAddress", gson.toJson(params)); if (null == res) { throw new RuntimeException("http error"); }

System.out.println("response = " + res);

JsonParser jp = new JsonParser(); JsonObject resEle = jp.parse(res).getAsJsonObject(); boolean retSignOK = signer.verifySign(resEle, resEle.get("sign").getAsString(), pubKey); if (!retSignOK) { throw new RuntimeException("verify response sign fail"); }

} catch (Exception e) { e.printStackTrace(); }

System.out.println("OK"); }

返回结果示例:

{
  "status":200,
  "msg":"验证成功",
  "data":null,
  "date_time":"2020-10-20 15:32:16",
  "time_stamp":1603179136,
  "sign":"isaqtnmKOJca5+QpHHeigqmAXh4Gquv3akniwzF0YEdIiz5prc0lMZ2+PWYsYkkqX66JedddyofD/7pgIjurh8qNaE9PWvVkupBgunzevlfwNUrIvsCUpUx8m1Iv8WPqUqdszoRbCDed3PqM2mcMe0Ol28QIRPeoMc8qRdSh4Bph9EfVtWS4x+8gqcax4SmSsbGGhCpe1LB4uS8OGaMbS18wz50asjz9HRnElwYiHbnz4R5TqHcnVqdFFXNWBlPM5QJjDqh+aArZneNwnmU4VCM82R4teLELZ/ldXOpUuCUzrI77iE8Of2qLaIIplKc3vZ6VqqoguD8M1QEyLAmk8A=="
}

HTTP Request

POST : /address/verifyAddress

请求参数

参数名 必选 类型 说明
公共参数 是 string 公参指:签名(sign)、版本(version)、商户ID(app_id)、时间(time)
coin 是 string 12个字符内主链币名, 币名平台提供为准
address 是 string 地址

返回参数说明

参数名 必选 类型 说明
status 是 int 返回值:200 验证成功;543 验证失败;565 币种不支持
msg 否 string 100字内, 状态描述
data 是 jsonObject —
date_time 否 DateTime 北京时间:2020-06-29 14:28:14
time_stamp 否 string 响应时间,单位秒:1593412094
sign 是 string 返回签名,对以上所有参与参数签名

地址AML反洗钱风险验证

$url = "http://api.xxxx.com/shopapi/address/verifyAml";
$header = [
  'Content-Type:application/json',
];
$params = [
    "app_id" => "hxgmau9imt86qky9",
    "version" => "1.0",
    "time" => 1578997143,
    "sign" => "IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
    "chain" => "trx",
    "address" => "TUEgUZh24tA48EXiAQjA6Qf6rSS7bJKQ6g",
    "skip_api_source" => "OK_LINK"
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$return = curl_exec($ch);

print_r($return);

var url = "http://api.xxxx.com/shopapi/address/verifyAml"
data := map[string]string{
    "app_id":"hxgmau9imt86qky9",
    "version":"1.0",
    "time":"1578997143",
    "sign":"IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
    "chain":"trx",
    "address":"TUEgUZh24tA48EXiAQjA6Qf6rSS7bJKQ6g",
    "skip_api_source": "OK_LINK",
}
dataType, _ := json.Marshal(data)
resp, err := http.Post(url, "application/json", strings.NewReader(string(dataType)))
if err != nil {
  fmt.Println(err)
}
defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) }

fmt.Println(string(body))

let HTTP = require('http')
let postData = {
  "app_id":"hxgmau9imt86qky9",
  "version":"1.0",
  "time":"1578997143",
  "sign":"IUtWA3HEkK+wvTGaSBYwIrdx+ANyoOPl2/1LQTDevCSTxf4/lDXPrg6/ph+skNXIbZTR8Qs2yGGkqTUHEW/vbiTPzWkYZ874rRgplp06vhOBM/Pkw289K7PVCKy1ksOtLjwj1dUfDD/2AEqTgxRDjGyn+yDWRa7HLL/28bjU3pZoFwPPjbPyRxMK9BVL/li9IQ6hb8lyOyQNHNxS3C82sDVaQKqrB0dOqtP61OH0hBonrxMhBAMD8dUmaqO6Ef+bhHzbBm3BCC5VapkOkdthb+UWXKCiBoCipg3gqrwnBdOUGXqx/1mYicNZ+oHeVpBwnJlXudff6FT+HySszr5ISw==",
  "chain":"trx",
  "address":"TUEgUZh24tA48EXiAQjA6Qf6rSS7bJKQ6g",
  "skip_api_source": "OK_LINK",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/address/verifyAml",
  method: 'POST',
  headers: {
    "Content-Type": "application/json; charset=utf-8"
  }
};
const REQUEST = HTTP.request(POST_OPTIONS,function (res) {
  let data = []
  res.on('data', chunk => {
    data.push(...chunk)
  })
  res.on('end', () => {
    let _date = JSON.parse( new TextDecoder().decode(new Uint8Array(data)))
    console.log(_date)
  })
});

REQUEST.setTimeout(6000) REQUEST.write(JSON.stringify(postData), 'utf8') REQUEST.end()

public static void main(String[] args) {

// 完整实例请查看"签名规则"中的Java示例代码

String baseUrl = "http://api.xxxx.com/shopapi"; String priKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCtdgvcfozY7fe/x6UlXR/Fff8+wX++CiG05YVRafDe90O8y5KJAMZ156TgajEUXSRyKZqASz7iVoMAcu5FqfK1KuOOdjTAg0LFe/twIZvKmAqHcCSS2pjUXk0fTpZEgQ5lmDCK12Mg07YXvr+BeHjF+kBpwRJMPMG/+DGBDYNFNeRSJqWyopt6yyF528soAykHIUQ7TTultJV5IPCrvjRQQrGdJ/QtCdE0vZg+tA09nFN7AqgraU99kIvzyS0sqysj+pP1SJRmTRSGtlVAO3mILfkXOekZl1KD60G7CF+7BIaaW83FPD55tZhAGhnbLMYyiq7OiIyU61LTRcNSaJ0tAgMBAAECggEBAIGgGKcSzxCBbMYdXLV6TPbZ/HeaRGrwyVWUu7cmc0E8CJu6iWvmb2jGzbiCwuCT5luF6ZZ8JKchvU4FlTfsE5r9TQY2IZ/Ht4s65qBaDUEts5iY3kv8HX9+ZSXDJZpV0ztqqsPmx4ZNj+NYwWXwcFiKdb5R8OmV8bgSsnPddD6wFhwewglUOBPRAjropHE4sqk1Vam6q1MlFq5kiekMn/CItyFYFFzST/ruqAtVTp7YIvazAMrfCKH+pvXWk6pYNHZmL/JZey0GglRyJ1nItiqL33X8Lji056FcbAclidq022h/KPLEJpZk6irWqYdqYZeF6YMLHtdZFDkTZ/hXY+UCgYEA5i794UTQ1Kd6K+iui/S8K5H8nGdiXb3+uZ5j5VKYfbRmzXhAdVYisYe8czeTECxhH+MeHgM4tLR4ifx9q60ylvZxl9Fav1p6EaE36YcvGVmpm7Gm3q6QDDBa4gB+X9u7CxCS4LpotV917YS1QvOIF9lnRonSj1zNzFtbXkywrN8CgYEAwOpx/mR40ZvgZxNCq9DsIdrSZYAFFKpw0xy0OtF1PpuwMaREoRabnlVw6Bb3Hofg50XA3JxemzAX6fB92ee+NfXfeL4UtC4vG1K9JyiXHtHq8p9Uw2W03ehIEeNa3xdoRRnLmD4VUpyfL19ViE2+7TM1Gd3TogjDT+AMOCSuq3MCgYBsurPH7gaq/LVT+mRAzgj4l8v4YUlwuGeTbIMJdvt7HXUWB4CDLH3U2CYnUpAQKrZyJok6ahEmIr1xiKggKP7lmmHL8eNo0icpHrtXfzi7Q8Q/PCpzs4dtioXTjaIkS5nNvzVyG/uL+RyuZmpsxrZ5dYM4KbAhchfwORMutxEZhwKBgQC5zpVw4jCEItBmNuTWO+nTScGvxTgfiXIVw+XLaQa2AJoZlhAL34yPWdffko79tv3lgweY9HsimZXO2rU8dbp8mo5c6ydhy8HPXUeWOcAkDSdv/ApWENW9jgYsRIC3swHY3Fl+Dv3Wjce8huQI3mjwaYvRmBhIToxfmHnscVhTBQKBgB9uciEHfz8hMI7ePrPo2PkyK/RbJDm3HnuWE2lFBp7MOUMlh53MXwv4dIRaYMbRrFuN1UIKEFxuKhWwTHSzZJufk/UENrha/81fpj2BoFsAKkEunKeETvaIh6fZSjec16h2+zxbzwkdS6b+yIYkSlaoAxmDYrMtae0C8G4e0YS9"; String pubKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2RZZISModRzproL3eTxRtvVK/nToDbeLmAVdmaVtHgNCwjXMeNCZvHySZKO7+t7XySzBd2PhhQjvAkDd8HRKB5Y0uvP6TFwvhxOMkMydTeBFcUobQWNeAI7ttRms1txSNrmyrZr0WpWfk79VIsO+yI/jFN/Pj2gxD+vh5UUKU1LD2IQq/VxgtEpf8Vs6w7SvafPwYkpdPGCKUFkRvN1FrY2+tq0j1MRVJbB2rIunWDnT8cDUh2sWLXf4yNaJVOaaTFB0zbAk/qcoicGQyW7bVG7dVW8WywKmOAPeQCCQa+SJ4BhfI1k8eEAwFVRuxz/f9Ecfog9hZJ+RgELkpS8qhQIDAQAB";

rsaSigner signer = new rsaSigner();

Map<String, Object> params = new HashMap<>(); params.put("app_id", "hxgmau9imt86qky9"); params.put("version", "1.0"); params.put("key_version", "admin"); params.put("time", Long.toString(System.currentTimeMillis() / 1000)); params.put("chain", "trx"); params.put("address", "HsHGWeEMmx5QLds9UiWfjxarM4RbLAc3xrD"); params.put("skip_api_source", "OK_LINK");

try {

params.put("sign", signer.genSign(params, priKey));

Gson gson = new GsonBuilder().create(); System.out.println("params = " + gson.toJson(params));

String res = doPost(baseUrl + "/address/verifyAml", gson.toJson(params)); if (null == res) { throw new RuntimeException("http error"); }

System.out.println("response = " + res);

JsonParser jp = new JsonParser(); JsonObject resEle = jp.parse(res).getAsJsonObject(); boolean retSignOK = signer.verifySign(resEle, resEle.get("sign").getAsString(), pubKey); if (!retSignOK) { throw new RuntimeException("verify response sign fail"); }

} catch (Exception e) { e.printStackTrace(); }

System.out.println("OK"); }

返回结果示例:

{
  "data": {
    "address": "0x8e609ac80f4324e499a6efd24f221a2caa868224",
    "chain": "eth",
    "detail": "{\"可疑交易\":[\"大额交易比例较高\",\"存在高频交易行为\",\"交易的集中程度高\"],\"黑地址关联方\":[\"黑客关联方\"]}",
    "level": "MEDIUM",
    "risk_code": 5103,
    "risk_score": "62",
    "source": "OK_LINK",
    "tag": "风险中等:黑地址关联方;可疑交易"
  },
  "date_time": "2023-11-22 18:19:54",
  "msg": "SUCCESS",
  "sign": "PSkdliG8jomX+ojV9jJ6Vv19/uTw6WqYnNCedm1dySNi4AqFbhW/gQVYmuXhcff51uJvsHKsJXGkAtATi5iqMsHKVZDNdNbsmUFV8pdUKIEHrLCHpIq5G7SYSdU0O5t1BYLVAmCIZa7YLF9vnPKc0gF1Y2so8HmznuFToO5jlHqS0hsLvc8HAjEDuKkl1Zpgykciftc7MvXC4hE14PwLssHmKc8J97oh+ab1BG+AnjxiI1fcArNAZbwj+YUK9l2RqD0C9wh+13qRTC7Aj0rZHGFBwFoTOqpcpxruarSlEcdi98ueZgrLd0amb7/l5tKPTbpasBv0yjzezfrsP2/NIg==",
  "status": 200,
  "time_stamp": 1700648394
}

HTTP Request

POST : /address/verifyAml

请求参数

参数名 必选 类型 说明
公共参数 是 string 公参指:签名(sign)、版本(version)、商户ID(app_id)、时间(time)
chain 是 string 主链币名, 以平台提供为准
address 是 string 地址
skip_api_source 否 string 指定跳过远程接口查询的aml源,可填写来源 OK_LINK 或 BEOSIN,多个逗号分隔。前提是已通过客服开通来相应来源。

返回参数说明

参数名 必选 类型 说明
status 是 int 返回值:200 成功
msg 否 string 100字内, 状态描述
data 是 jsonObject —
data.chain 是 string 主链币名
data.address 是 string 地址
data.risk_code 是 int 风险标识码,默认0:无风险。非0就是有风险,后续可能增加更多标识码。
data.source 是 string AML数据来源,OK_LINK,SLOW_MIST,BEOSIN
data.tag 否 string 风险描述标签
data.detail 否 string 附带描述
data.risk_score 否 string OK_LINK风险分值,满分100无风险。分值越低风险越高。
data.level 否 string OK_LINK风险等级,SEVERE,HIGH,MEDIUM,LOW,NONE
date_time 否 DateTime 北京时间:2020-06-29 14:28:14
time_stamp 否 string 响应时间,单位秒:1593412094
sign 是 string 返回签名,对以上所有参与参数签名

risk_code错误码说明

risk_code 说明
0 无风险
5001 实施勒索活动,涉及恶意挖矿活动
5002 实施盗币攻击
5003 实施钓鱼活动
5004 实施钓鱼活动,涉及网络犯罪
5101 风险极大(OK_LINK来源的)
5102 风险高(OK_LINK来源的)
5103 风险中等(OK_LINK来源的)
5104 风险低(OK_LINK来源的)
5201 风险极大(BEOSIN来源的)
5202 风险高(BEOSIN来源的)
5203 风险中等(BEOSIN来源的)
5204 风险低(BEOSIN来源的)
xxxx 后续可能增加更多标识码...