NAV
go php js java

Outer Address Monitoring

Add Outer Address

$url = "http://api.xxxx.com/shopapi/outer_address/add";
$header = [
  'Content-Type:application/json',
];
$params = [
    "addresses": [
        "0xeb482aee7b329058ec81223f98488d28e12b15a2",
        "0x4d5fa5df5963405d5ecc40ea25c08fbed129004f"
    ],
    "app_id": "hxgmau9imt86qky9",
    "chain": "bnb_bsc",
    "key_version": "admin",
    "sign": "OZYwC4br4wti9PFst9X5QBuxRh3voVn29pkzxEUTc92npPoVa1plnsYCcTzvAr7sy9a8dk63My2dlNhnzsypI4XvLT0/zSboC+MCtM9Q8Q8l1B4lb4nZMBkAUZFfb/80UtEBUGOni2KfnU/ciHNOsE+f9bs8i+AnRypstHnajDEuhoKEqSwmOkeYA+PRtA5SVvUdvIXM6CMnlmWokYzRys6kvb9XET1gBo9HBMI5YdTZnLavCDky3mPv5jTyiIzN4NScnxC7hIepolEUbB8smsz3oNtXSDpzZDhzm9ZjJ/5ZWEbEvK413GmsV4fodnJHJdJM+EhvAWTgxVLIbyCuFA==",
    "time": 1665478775,
    "version": "1.0"
];
$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/outer_address/add"
data := map[string]string{
    "addresses": [
        "0xeb482aee7b329058ec81223f98488d28e12b15a2",
        "0x4d5fa5df5963405d5ecc40ea25c08fbed129004f"
    ],
    "app_id": "hxgmau9imt86qky9",
    "chain": "bnb_bsc",
    "key_version": "admin",
    "sign": "OZYwC4br4wti9PFst9X5QBuxRh3voVn29pkzxEUTc92npPoVa1plnsYCcTzvAr7sy9a8dk63My2dlNhnzsypI4XvLT0/zSboC+MCtM9Q8Q8l1B4lb4nZMBkAUZFfb/80UtEBUGOni2KfnU/ciHNOsE+f9bs8i+AnRypstHnajDEuhoKEqSwmOkeYA+PRtA5SVvUdvIXM6CMnlmWokYzRys6kvb9XET1gBo9HBMI5YdTZnLavCDky3mPv5jTyiIzN4NScnxC7hIepolEUbB8smsz3oNtXSDpzZDhzm9ZjJ/5ZWEbEvK413GmsV4fodnJHJdJM+EhvAWTgxVLIbyCuFA==",
    "time": 1665478775,
    "version": "1.0",
}
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 = {
  "addresses": [
    "0xeb482aee7b329058ec81223f98488d28e12b15a2",
    "0x4d5fa5df5963405d5ecc40ea25c08fbed129004f"
  ],
  "app_id": "hxgmau9imt86qky9",
  "chain": "bnb_bsc",
  "key_version": "admin",
  "sign": "OZYwC4br4wti9PFst9X5QBuxRh3voVn29pkzxEUTc92npPoVa1plnsYCcTzvAr7sy9a8dk63My2dlNhnzsypI4XvLT0/zSboC+MCtM9Q8Q8l1B4lb4nZMBkAUZFfb/80UtEBUGOni2KfnU/ciHNOsE+f9bs8i+AnRypstHnajDEuhoKEqSwmOkeYA+PRtA5SVvUdvIXM6CMnlmWokYzRys6kvb9XET1gBo9HBMI5YdTZnLavCDky3mPv5jTyiIzN4NScnxC7hIepolEUbB8smsz3oNtXSDpzZDhzm9ZjJ/5ZWEbEvK413GmsV4fodnJHJdJM+EhvAWTgxVLIbyCuFA==",
  "time": 1665478775,
  "version": "1.0",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/outer_address/add",
  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) {

// more detail functions, see "Signature Regulations"Java demo

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", "bnb_bsc");

List<String> addresses = new ArrayList<>(); addresses.add("0x4d5fa5df5963405d5ecc40ea25c08fbed129004f"); addresses.add("0xeb482aee7b329058ec81223f98488d28e12b15a2"); params.put("addresses", addresses);

try {

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

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

String res = doPost(baseUrl + "/outer_address/add", 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"); }

Example of return result:

{
  "status": 200,
  "msg": "请求成功",
  "data": {
    "fail_addresses": []
  },
  "date_time": "2022-10-11 16:59:35",
  "time_stamp": 1665478775,
  "sign": "AcNiY8kJTb/L2fZqtN0kVIVazbMdr/jiYSDetNBIlmEbEzwFhT7ZJxx15AzUcU62Ptnyb0wZF+xN/h/2YPo1XuMNVNcQdRvmdLfeDM8Pnk4+QCVnQjzqJ8fEjRTdkoujMS3VpywGJxL8ncMDMgmbnSWpXWMYprupQb27sKhPak7mSuib7xozc2/6D9T+oWxKIRMfvV7ZPq6p24PqUt1R9z6z2e3kxZanx/MMv2XljrAEMkI8iMbwQ910gNwuKkYP2GDCEXMBgzWMxJd2JdIEFexN+DFUk/pP1S5B+EPAwpoSB8Brflmpr1XAfwQKdocq+lDWRVI/HNEExcfuLdtUFA=="
}

HTTP Request

POST : /outer_address/add

Request parameter description

parameter name required type description
common parameter yes string common parameter refers to: signature (sign), version (version), merchant ID (app_id), time (time)
chain yes string the chain name, 12 character limit
addresses yes string array addresses,array length limit 100

Response parameter description

parameter name type description
status int status code
msg string status description
data jsonObject response data。
data.fail_addresses string array save fail addresses, empty when no fail
date_time string formated time
time_stamp int timestamp in seconds
sign string signature

Delete Outer Address

$url = "http://api.xxxx.com/shopapi/outer_address/delete";
$header = [
  'Content-Type:application/json',
];
$params = [
    "addresses": [
        "0xeb482aee7b329058ec81223f98488d28e12b15a2",
        "0x4d5fa5df5963405d5ecc40ea25c08fbed129004f"
    ],
    "app_id": "hxgmau9imt86qky9",
    "chain": "bnb_bsc",
    "key_version": "admin",
    "sign": "OZYwC4br4wti9PFst9X5QBuxRh3voVn29pkzxEUTc92npPoVa1plnsYCcTzvAr7sy9a8dk63My2dlNhnzsypI4XvLT0/zSboC+MCtM9Q8Q8l1B4lb4nZMBkAUZFfb/80UtEBUGOni2KfnU/ciHNOsE+f9bs8i+AnRypstHnajDEuhoKEqSwmOkeYA+PRtA5SVvUdvIXM6CMnlmWokYzRys6kvb9XET1gBo9HBMI5YdTZnLavCDky3mPv5jTyiIzN4NScnxC7hIepolEUbB8smsz3oNtXSDpzZDhzm9ZjJ/5ZWEbEvK413GmsV4fodnJHJdJM+EhvAWTgxVLIbyCuFA==",
    "time": 1665478775,
    "version": "1.0"
];
$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/outer_address/delete"
data := map[string]string{
    "addresses": [
        "0xeb482aee7b329058ec81223f98488d28e12b15a2",
        "0x4d5fa5df5963405d5ecc40ea25c08fbed129004f"
    ],
    "app_id": "hxgmau9imt86qky9",
    "chain": "bnb_bsc",
    "key_version": "admin",
    "sign": "OZYwC4br4wti9PFst9X5QBuxRh3voVn29pkzxEUTc92npPoVa1plnsYCcTzvAr7sy9a8dk63My2dlNhnzsypI4XvLT0/zSboC+MCtM9Q8Q8l1B4lb4nZMBkAUZFfb/80UtEBUGOni2KfnU/ciHNOsE+f9bs8i+AnRypstHnajDEuhoKEqSwmOkeYA+PRtA5SVvUdvIXM6CMnlmWokYzRys6kvb9XET1gBo9HBMI5YdTZnLavCDky3mPv5jTyiIzN4NScnxC7hIepolEUbB8smsz3oNtXSDpzZDhzm9ZjJ/5ZWEbEvK413GmsV4fodnJHJdJM+EhvAWTgxVLIbyCuFA==",
    "time": 1665478775,
    "version": "1.0",
}
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 = {
  "addresses": [
    "0xeb482aee7b329058ec81223f98488d28e12b15a2",
    "0x4d5fa5df5963405d5ecc40ea25c08fbed129004f"
  ],
  "app_id": "hxgmau9imt86qky9",
  "chain": "bnb_bsc",
  "key_version": "admin",
  "sign": "OZYwC4br4wti9PFst9X5QBuxRh3voVn29pkzxEUTc92npPoVa1plnsYCcTzvAr7sy9a8dk63My2dlNhnzsypI4XvLT0/zSboC+MCtM9Q8Q8l1B4lb4nZMBkAUZFfb/80UtEBUGOni2KfnU/ciHNOsE+f9bs8i+AnRypstHnajDEuhoKEqSwmOkeYA+PRtA5SVvUdvIXM6CMnlmWokYzRys6kvb9XET1gBo9HBMI5YdTZnLavCDky3mPv5jTyiIzN4NScnxC7hIepolEUbB8smsz3oNtXSDpzZDhzm9ZjJ/5ZWEbEvK413GmsV4fodnJHJdJM+EhvAWTgxVLIbyCuFA==",
  "time": 1665478775,
  "version": "1.0",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/outer_address/delete",
  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) {

// more detail functions, see "Signature Regulations"Java demo

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", "bnb_bsc");

List<String> addresses = new ArrayList<>(); addresses.add("0x4d5fa5df5963405d5ecc40ea25c08fbed129004f"); addresses.add("0xeb482aee7b329058ec81223f98488d28e12b15a2"); params.put("addresses", addresses);

try {

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

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

String res = doPost(baseUrl + "/outer_address/delete", 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"); }

Example of return result:

{
  "status": 200,
  "msg": "请求成功",
  "data": [],
  "date_time": "2022-10-11 16:59:35",
  "time_stamp": 1665478775,
  "sign": "AcNiY8kJTb/L2fZqtN0kVIVazbMdr/jiYSDetNBIlmEbEzwFhT7ZJxx15AzUcU62Ptnyb0wZF+xN/h/2YPo1XuMNVNcQdRvmdLfeDM8Pnk4+QCVnQjzqJ8fEjRTdkoujMS3VpywGJxL8ncMDMgmbnSWpXWMYprupQb27sKhPak7mSuib7xozc2/6D9T+oWxKIRMfvV7ZPq6p24PqUt1R9z6z2e3kxZanx/MMv2XljrAEMkI8iMbwQ910gNwuKkYP2GDCEXMBgzWMxJd2JdIEFexN+DFUk/pP1S5B+EPAwpoSB8Brflmpr1XAfwQKdocq+lDWRVI/HNEExcfuLdtUFA=="
}

HTTP Request

POST : /outer_address/delete

Request parameter description

parameter name required type description
common parameter yes string common parameter refers to: signature (sign), version (version), merchant ID (app_id), time (time)
chain yes string the chain name, 12 character limit
addresses yes string array addresses,array length limit 100

Response parameter description

parameter name type description
status int status code
msg string status description
data jsonObject response data
date_time string formated time
time_stamp int timestamp in seconds
sign string signature

Outer Address Transaction Notify

$url = "provided by the merchant";
$header = [
  'Content-Type:application/json',
];
$params = [
    "data": {
        "address": "0xeb482aee7b329058ec81223f98488d28e12b15a2",
        "amount": "0.00013556",
        "chain": "bnb_bsc",
        "coin": "bnb_bsc",
        "confirm_count": 12,
        "gas_fee": "0.000105",
        "status": 1,
        "time": 1665479732,
        "token_address": "",
        "transaction_type": 2,
        "txid": "0x735dc8becd0d5dc0023b526584b75c8772551fc9268668991608dadc69facb39",
    },
    "sign": "Yyyyg==",
];
$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 = "provided by the merchant"
data := map[string]interface{}{
    "data": {
        "address": "0xeb482aee7b329058ec81223f98488d28e12b15a2",
        "amount": "0.00013556",
        "chain": "bnb_bsc",
        "coin": "bnb_bsc",
        "confirm_count": 12,
        "gas_fee": "0.000105",
        "status": 1,
        "time": 1665479732,
        "token_address": "",
        "transaction_type": 2,
        "txid": "0x735dc8becd0d5dc0023b526584b75c8772551fc9268668991608dadc69facb39",
    },
    "sign": "Yyyyg==",
}
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 = {
  "data": {
    "address": "0xeb482aee7b329058ec81223f98488d28e12b15a2",
    "amount": "0.00013556",
    "chain": "bnb_bsc",
    "coin": "bnb_bsc",
    "confirm_count": 12,
    "gas_fee": "0.000105",
    "status": 1,
    "time": 1665479732,
    "token_address": "",
    "transaction_type": 2,
    "txid": "0x735dc8becd0d5dc0023b526584b75c8772551fc9268668991608dadc69facb39",
  },
  "sign": "Yyyyg==",
};
let POST_OPTIONS = {
  port: 80,
  host: "provided by the merchant",
  path: "",
  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 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 = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArXYL3H6M2O33v8elJV0fxX3/PsF/vgohtOWFUWnw3vdDvMuSiQDGdeek4GoxFF0kcimagEs+4laDAHLuRanytSrjjnY0wINCxXv7cCGbypgKh3AkktqY1F5NH06WRIEOZZgwitdjINO2F76/gXh4xfpAacESTDzBv/gxgQ2DRTXkUialsqKbesshedvLKAMpByFEO007pbSVeSDwq740UEKxnSf0LQnRNL2YPrQNPZxTewKoK2lPfZCL88ktLKsrI/qT9UiUZk0UhrZVQDt5iC35FznpGZdSg+tBuwhfuwSGmlvNxTw+ebWYQBoZ2yzGMoquzoiMlOtS00XDUmidLQIDAQAB";
    rsaSigner signer = new rsaSigner();

Map<String, Object> data = new HashMap<>(); data.put("address", "0xeb482aee7b329058ec81223f98488d28e12b15a2"); data.put("amount", "0.00013556"); data.put("chain", "bnb_bsc"); data.put("coin", "bnb_bsc"); data.put("confirm_count", 12); data.put("gas_fee", "0.000105"); data.put("status", 1); data.put("time", 1665479732); data.put("token_address", ""); data.put("transaction_type", 2); data.put("txid", "0x735dc8becd0d5dc0023b526584b75c8772551fc9268668991608dadc69facb39");

try { Map<String, Object> params = new HashMap<>(); params.put("data", data); params.put("sign", signer.genSign(data, priKey));

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

String res; // platform request shop callback API // res = doPost("http://api.shophost.com/outer_address/recharge/callback", gson.toJson(params)); // if (null == res) { // throw new RuntimeException("http error"); // }

// mock response from shop callback API { res = """ { "status": 200, "msg":"请求成功", "sign": "Yyyyg==", "data": { "success_data": "success" } } """; }

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

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

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

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

Example of return result:

{
  "status": 200,
  "msg":"success",
  "sign": "Yyyyg==",
  "data": {
    "success_data": "success"
  }
}

HTTP Request

POST: The specific callback address is provided by the merchant to the platform side

Request parameter description

parameter name required type description
sign yes string signature
data yes jsonObject transaction object
data.address yes string merchant monitoring address
data.amount yes string amount
data.chain yes string chain symbol
data.coin yes string contract coin symbol, main coin same to chain
data.confirm_count yes int confirmations count
data.gas_fee yes string gas fee
data.status yes int status:0=unconfirm,1=confirmed
data.time yes int block time(second)
data.token_address no string contract token address, main coin is empty
data.transaction_type yes int transaction type:1=transfer in,2=transfer out
data.txid yes string transaction hash

Response parameter description

parameter name required type description
status yes int status code, 200 is ok
msg yes string status code description
data yes JSONObject response data
data.success_data yes string whether handle success, if not return 'success',platform will retry request
sign yes string signature