NAV
go php js java

The MPC Custom Source-Available Code Framework

CipherBC is introducing the Source-Available MPC Framework, a selected open initiative designed to provide transparency for auditors and partners while preserving the integrity of our core IP. Unlike traditional open-source projects, this framework follows an non-commercial license, allowing authorized institutions, compliance teams, and academic researchers to review, analyze, and validate our MPC-HSM Key Architecture under NDA.

With USD 1.17B+ in total transaction volume and USD 15B+ in assets under custody, this Source-Available MPC Framework delivers real, enterprise-grade advantages:

Flexibility & Transparency: Introduces a Source-Available model that adapts to the security requirements and privacy expectations of each enterprise partner. Access scopes, reviewed modules, and technical insight levels are customized on demand, guaranteeing that collaboration happens in a secured, private, and mutually trusted environment, enabling faster integration.

Security & Compliance: By granting access only to certified third-party auditors, security teams, and regulated partners, CipherBC strengthens code reliability and resilience through independent validation, establishing CipherBC as a foundation for bank-grade audits, institutional due-diligence, and regulatory scrutiny.

Collaborative IP Protection: Selective access is extended to academic institutions for non-commercial cryptography research and theoretical validation, enabling continuous knowledge exchange and fosters technological evolution, while custom licensing and legal safeguards ensure CipherBC’s core intellectual property and commercial value remain fully preserved.

Technology Architecture

Built on a professional Omnibus Wallet architecture, the project features a clean and modular code structure, enabling partners to perform systematic, comprehensive, and high-efficiency security audits with confidence.

Further Notes & Information

Please note that our project does not follow the traditional open-source definition set by the Open Source Initiative (OSI). It is a source-available project designed for controlled knowledge sharing and collaboration with trusted partners, rather than unrestricted community participation.

Access to our project source code requires an application. Please have your GitHub account ready and contact support@cipherbc.com for authorization.

To have a full understanding of this framework, please go visit: https://github.com/cipherbc1024/OpenSource

Welcome to CipherBC API

Preparing for API

1 Register APP_ID

Contact customer service to register for APP_ID,and provide relevant qualification information. Example:Company Name,domain name,IP, first person in charge and other business information needed。

2 Provide a list of main chains and contract currencies that needs to be supported.

Coin require basic information such as coin address、main chain、precision、name and other relevant information will be provided to business coordinator.

3 Debugging API test environment

API adopting RSA2048bit for two-way signature verification to ensures the credibility of communication. Merchants are required to give the public key to the platform, where platform uses it to verify request parameters sent to the platform. Merchants need to obtain the platform public key in advance, which can be used to verify platform response.

Supported Coin

Coin Name Full name Blockchain Explorer
btc btc https://blockchair.com/bitcoin
eth eth https://etherscan.io
bnb_bsc BSC(BNB Smart Chain) https://bscscan.com
ht_heco heco https://www.hecoinfo.com
hc Hc https://hc-explorer.h.cash/explorer
qtum qtum https://explorer.qtum.org
trx Tron https://tronscan.io
eos eos https://eosflare.io/
xrp xrp https://xrpscan.com
bnb bnb https://explorer.bnbchain.org
doge doge https://dogechain.info
ltc ltc https://litecoinblockexplorer.net
dash dash https://dashblockexplorer.com
zec zec https://explorer.zcha.in
dcr dcr https://dcrdata.decred.org
bch Bitcoin Cash https://blockchair.com/bitcoin-cash
btm btm https://btmscan.com
etc etc https://etcblockexplorer.com
fil fil https://filscan.io
sol solana https://explorer.solana.com
pol Polygon https://polygonscan.com
okt okt https://www.oklink.com/en/okc
avax_c avax c chain https://snowtrace.io
avax_x X chain of avax https://explorer-xp.avax.network
lunc lunc https://finder.terra.money/classic
bsv Bitcoin SV https://www.bitcoinsv.io
movr moon river https://moonriver.moonscan.io
eth_aurora aurora https://aurorascan.dev
atom atom https://www.mintscan.io/injective
dot dot https://polkastats.io
rei rei https://scan.rei.network
smartbch smart bch https://www.smartscan.cash
ftm Fantom https://ftmscan.com
luna luna https://finder.terra.money/mainnet
eth_optimism optimism https://optimistic.etherscan.io
eth_arbitrum arbitrum https://arbiscan.io
plcu PLCUltima https://plcultima.info/en
ksm Kusama https://kusama.subscan.io
fis Stafi https://stafi.subscan.io
edg edgeware https://edgeware.subscan.io
sdn Shiden https://shiden.subscan.io
aca Acala https://acala.subscan.io
astr astr https://astar.subscan.io
ada cardano https://cardanoscan.io
cmp Caduceus https://mainnet.scan.caduceus.foundation
ethw EthereumPoW https://www.oklink.com/en/ethw
apt aptos https://explorer.aptoslabs.com
mbe MBE https://browser.mbechain.com
core core https://scan.coredao.org
xx xx https://explorer.xx.network
wemix wemix https://explorer.wemix.com
ethg Etherum gold https://etherumgold.me/
eth_zksync ZKsync Era https://explorer.zksync.io
gdcc GDCC https://www.gdccscan.io
algo Algorand https://algoexplorer.io
sui Sui https://suiexplorer.com
taproot Taproot https://www.oklink.com
main_hec Hermes Edu Coin (HEC) https://bc-explore.eduaube.com
cvn consciousdao https://explore.consciousdao.com
nrk Nordek https://nordekscan.com
eth_base Base https://basescan.org
aelf aelf https://explorer.aelf.io
ton Toncoin https://tonviewer.com
smart smart https://smartexplorer.com
scdo scdo https://scdoscan.io/#
tfuel_theta TFuel on Theta https://www.thetascan.io
dnx Dynexcoin https://blockexplorer.dynexcoin.org
alyx alyx https://alyxscan.com
xvg Verge https://verge-blockchain.info
btc_merlin Merlin https://scan.merlinchain.io
eth_strk Stark https://starkscan.co
btc_runes Bitcoin RuneStone https://www.oklink.com/zh-hans/btc
qubic qubic https://explorer.qubic.org
ckb CKBnervos https://explorer.nervos.org/en/
kas Kaspa https://explorer.kaspa.org
nuls nuls https://nulscan.io
assethub_dot AssetHub Polkadot https://assethub-polkadot.subscan.io
venom Venom https://venomscan.com
zeta Zeta https://explorer.zetachain.com
main_taiko Taiko eth https://taikoscan.io

Signature Regulations

<?php

$obj = new obj();
$obj->coin_list();

class obj
{
    public $baseUrl = 'http://api.xxxxx.com/shopapi';
    public $priKey = "-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8d6RGCeQkrobx
+4xO1jXnHwiMU48UyOaRaNW2FMQrN9DcK/T2h58FyuA7kYN0CVNFEnaZQS9S8Nur
Tl0lOVJcbwKfCSnu9nmFYDvPWqlCTqQW3F83sKNi9IWrMFFny3CX35eUHpeJahE2
R9wma2oJIFJv3ux/I3+w8fQQ6zMPIqpDx4Tcu9sCVpot+/siWJDpyiQBlbXfcxuH
YOePUGx+tJ5HLXtJOUtPcgyhFTXRmW9r17DnnsjrT5Vc50IbN//JXbvr96eexQ/e
/IXHZP6MZWdthjuv9y2TaxS+JMnpKLrXfgazoQEsKmchAsTLEyX6tHG5tHq+3MaK
BSTFCoHHAgMBAAECggEAYodR1GPbZ+nuFpfhlF2ctIWe3G3awYz+LUrXX2ef3tBB
WrmISVJBqq+TZtD+Hi254MR0SE6xxPSygu5m98zt5/EJN8d8qrckdLwIyLCnCElA
s8rl5KFt6Y/YSdTq2g6bgGqePgt4QZi4At6yk0tYlgjV0DKFBTqzyPfVFvs/KEuZ
o8le0XjgJA+Rnti35Gi5UDL1Tn9LcmCU/JcdpksFgPvU/wPmlNb8azM68ougXcrf
hBebSRWbS0F2OXRJd7+hrTq+pwTNIH+IyzsUZHQCcH0tFe2Q304oDuVuwX5VxB3S
tYG8+LoECW1nKalJbolkmdRqVxZRXG/Ho8/aRCHBcQKBgQDBmoZzUaKU2F4Sa6P+
5vCQ5RAAiAATWao/WYfL9BBVnLzbkbzget3BNdJcJZKp1Avh6F/jeB0xUOD0aFgm
rJAZjVAFu77damKWwiEPxKfdgSbBedV/KWCMASzr4m4cdYKOcmlLFsh+Du2+oZW5
3Mn35hyfbTf1OyYxrvOVrhSu+wKBgQD5NVfxWTBsugAE++d4CCy8TUL7QCqb1I1v
EQ0FNdZsmXslPbCFlJ5UCFJXAF6s2x0MDKCl7y2ixlDo31H7DI6xlOP5kjYon7wr
mB0U2bclGtlJ3FvCwDBFkfZykYZqPyey8A3D+kf4pnvZvn/0BgKfWCVSYnqEB4mp
BI5WhywOpQKBgH4Mio8YTn8UZCMgG/UBDQ15ZbLC2THABj0aoHRkoiHrW3ala1DI
DgsWbLB78gJKQbZCofOqp28NVnkqWoJLhcJtI/Wnp/vmoOvA1t+6TQTFaqM7HIqf
OPHObh3iHYi/5VGzIeS2n7CbLaUY9S++lWymUGpoJK+wZAyi+IqyfVrzAoGAPKmI
g75zNDQ+pvfuy2AqC5g/Esv200H1P7EF21vUm1DtEg6nNo0L0WbJLFZxtWAM/Q7h
2CKVmEbwEQ+zdAoFfiLBL9Iwjsj7VB1ODvJES6ryc7FJQOnpljXGqPLVpm1DK6KV
pzv4YwWbplBh8zO3VbRuOVSxgAwZrWPnhhaXWeUCgYEAwVHYXN1qGTBS1uyrldDr
OMuXyfvE7lbfJlg2EfG2A7PtTooPkh1IbRjlJ8ACbiadM0pYhnGGPk0D1WSKvRxU
SmSc6PgW2weANQ8QCemo2V/zZ0DlWFZDdCV+7jMbAFBhQHcVh0qUr+uNyntjLTjj
OPdMSnhKLoKtleu+NiMIogc=
-----END PRIVATE KEY-----";
    public $pubKey = "-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk7K9s+r82lofBFaj3KWp
o/5E1ryDPDlLGZ4Rv68DcoCxV/bv0IvYX3cleC0WvTpwbdTpGtLjS6RHj89JREhi
svv5qmk5YTfjEqd3RmtYDmOVz2Ry6E76wLh9qi1pqpneMGr3shvEzZC6gkieXRCA
MOlEYbE7TSzxxDJxmovdeElowdRZcvwwPLvh/BLmCn+H1MXfdx01c/eFpTvu8BZG
1m7AqDOqnaPcR1ru/ekJoIwotF1jCPM2E5kAbQQutNaeSXhLbkfom4bxqF2/ni6k
Cwnz3fbBYcXP3Ww3/AdI1dn0iLr6450qn72yBpDtQY8OZ7+Krff4Fa5jOBY7OHEN
FwIDAQAB
-----END PUBLIC KEY-----";

    public function coin_list()
    {
        $data = $this->get_public_data();
        $data["chain"] = "eth";
        $data["coin"] = "eth";
        $data['sign'] = Signature::encryption($data, $this->priKey);
        $res = self::curlByPost($this->baseUrl . '/coin/list', $data);
        print_r($res);
        // verification
        $resp = json_decode($res, true);
        if (Signature::checkSignature($resp["sign"], $resp, $this->pubKey)) {
            print_r("verification successful");
        } else {
            print_r("verification failed");
        }
    }

    public static function curlByPost($url, $data = null, $timeout = 60)
    {
        $SSL = substr($url, 0, 8) == "https://" ? TRUE : FALSE;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_URL, $url);
        if ($SSL) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        }
        $data = json_encode($data);

        $headers = [
            'Content-Type: application/json; charset=utf-8',
            'Content-Length:' . strlen($data)
        ];
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        $output = curl_exec($ch);
        return $output;

    }

    public function get_public_data()
    {
        $data['app_id'] = "xxxxxx";  
        $data['version'] = '1.0';
        $data['key_version'] = 'admin';
        $data['time'] = time();
        return $data;
    }
}

class Signature
{
    /**
     * Private key signing
     *
     * @param $data
     * @param $private_key
     */
    public static function encryption($data, $private_key)
    {
        if (is_array($data))
            $signString = self::getSignString($data);
        else
            $signString = $data;
        $privKeyId = openssl_pkey_get_private($private_key);
        $signature = '';
        openssl_sign($signString, $signature, $privKeyId, OPENSSL_ALGO_MD5);
        openssl_free_key($privKeyId);
        return base64_encode($signature);
    }


    /**
     * Use the other party's public key to verify the signature and check whether the signature matches
     *
     * @param $sign
     * @param $data
     * @param $public_key
     * @return bool
     */
    public static function checkSignature($sign, $data, $public_key)
    {
        $toSign = self::getSignString($data);
        $publicKeyId = openssl_pkey_get_public($public_key);
        $result = openssl_verify($toSign, base64_decode($sign), $publicKeyId, OPENSSL_ALGO_MD5);
        openssl_free_key($publicKeyId);
        return $result === 1 ? true : false;
    }

    public static function getSignString($data)
    {
        unset($data['sign']);
        ksort($data);
        reset($data);
        $pairs = array();
        foreach ($data as $k => $v) {
            if (is_array($v)) $v = self::arrayToString($v);
            $pairs[] = "$k=$v";
        }

        return implode('&', $pairs);
    }

    private static function arrayToString($data)
    {
        $str = '';
        foreach ($data as $list) {
            if (is_array($list)) {
                $str .= self::arrayToString($list);
            } else {
                $str .= $list;
            }
        }

        return $str;
    }
}
package main

import (
  "crypto"
  "crypto/md5"
  "crypto/rand"
  "crypto/rsa"
  "crypto/x509"
  "encoding/base64"
  "encoding/json"
  "encoding/pem"
  "errors"
  "fmt"
  "github.com/imroc/req"
  "github.com/tidwall/gjson"
  "sort"
  "time"
)

var (
  BaseUrl        = "http://api.xxxxx.com/shopapi"
  signPrivateKey = `-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8d6RGCeQkrobx
+4xO1jXnHwiMU48UyOaRaNW2FMQrN9DcK/T2h58FyuA7kYN0CVNFEnaZQS9S8Nur
Tl0lOVJcbwKfCSnu9nmFYDvPWqlCTqQW3F83sKNi9IWrMFFny3CX35eUHpeJahE2
R9wma2oJIFJv3ux/I3+w8fQQ6zMPIqpDx4Tcu9sCVpot+/siWJDpyiQBlbXfcxuH
YOePUGx+tJ5HLXtJOUtPcgyhFTXRmW9r17DnnsjrT5Vc50IbN//JXbvr96eexQ/e
/IXHZP6MZWdthjuv9y2TaxS+JMnpKLrXfgazoQEsKmchAsTLEyX6tHG5tHq+3MaK
BSTFCoHHAgMBAAECggEAYodR1GPbZ+nuFpfhlF2ctIWe3G3awYz+LUrXX2ef3tBB
WrmISVJBqq+TZtD+Hi254MR0SE6xxPSygu5m98zt5/EJN8d8qrckdLwIyLCnCElA
s8rl5KFt6Y/YSdTq2g6bgGqePgt4QZi4At6yk0tYlgjV0DKFBTqzyPfVFvs/KEuZ
o8le0XjgJA+Rnti35Gi5UDL1Tn9LcmCU/JcdpksFgPvU/wPmlNb8azM68ougXcrf
hBebSRWbS0F2OXRJd7+hrTq+pwTNIH+IyzsUZHQCcH0tFe2Q304oDuVuwX5VxB3S
tYG8+LoECW1nKalJbolkmdRqVxZRXG/Ho8/aRCHBcQKBgQDBmoZzUaKU2F4Sa6P+
5vCQ5RAAiAATWao/WYfL9BBVnLzbkbzget3BNdJcJZKp1Avh6F/jeB0xUOD0aFgm
rJAZjVAFu77damKWwiEPxKfdgSbBedV/KWCMASzr4m4cdYKOcmlLFsh+Du2+oZW5
3Mn35hyfbTf1OyYxrvOVrhSu+wKBgQD5NVfxWTBsugAE++d4CCy8TUL7QCqb1I1v
EQ0FNdZsmXslPbCFlJ5UCFJXAF6s2x0MDKCl7y2ixlDo31H7DI6xlOP5kjYon7wr
mB0U2bclGtlJ3FvCwDBFkfZykYZqPyey8A3D+kf4pnvZvn/0BgKfWCVSYnqEB4mp
BI5WhywOpQKBgH4Mio8YTn8UZCMgG/UBDQ15ZbLC2THABj0aoHRkoiHrW3ala1DI
DgsWbLB78gJKQbZCofOqp28NVnkqWoJLhcJtI/Wnp/vmoOvA1t+6TQTFaqM7HIqf
OPHObh3iHYi/5VGzIeS2n7CbLaUY9S++lWymUGpoJK+wZAyi+IqyfVrzAoGAPKmI
g75zNDQ+pvfuy2AqC5g/Esv200H1P7EF21vUm1DtEg6nNo0L0WbJLFZxtWAM/Q7h
2CKVmEbwEQ+zdAoFfiLBL9Iwjsj7VB1ODvJES6ryc7FJQOnpljXGqPLVpm1DK6KV
pzv4YwWbplBh8zO3VbRuOVSxgAwZrWPnhhaXWeUCgYEAwVHYXN1qGTBS1uyrldDr
OMuXyfvE7lbfJlg2EfG2A7PtTooPkh1IbRjlJ8ACbiadM0pYhnGGPk0D1WSKvRxU
SmSc6PgW2weANQ8QCemo2V/zZ0DlWFZDdCV+7jMbAFBhQHcVh0qUr+uNyntjLTjj
OPdMSnhKLoKtleu+NiMIogc=
-----END PRIVATE KEY-----
`
  signPublicKey = `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk7K9s+r82lofBFaj3KWp
o/5E1ryDPDlLGZ4Rv68DcoCxV/bv0IvYX3cleC0WvTpwbdTpGtLjS6RHj89JREhi
svv5qmk5YTfjEqd3RmtYDmOVz2Ry6E76wLh9qi1pqpneMGr3shvEzZC6gkieXRCA
MOlEYbE7TSzxxDJxmovdeElowdRZcvwwPLvh/BLmCn+H1MXfdx01c/eFpTvu8BZG
1m7AqDOqnaPcR1ru/ekJoIwotF1jCPM2E5kAbQQutNaeSXhLbkfom4bxqF2/ni6k
Cwnz3fbBYcXP3Ww3/AdI1dn0iLr6450qn72yBpDtQY8OZ7+Krff4Fa5jOBY7OHEN
FwIDAQAB
-----END PUBLIC KEY-----
`
)

func main() {
  pub := make(map[string]string)
  // Open Parameter
  pub["app_id"] = "xxxxxxxxx"
  pub["version"] = "1.0"
  pub["key_version"] = "admin"
  pub["time"] = fmt.Sprintf("%d", time.Now().Unix())
  // Business Coin Parameter
  pub["chain"] = "eth"
  pub["coin"] = "eth"
  pub["sign"] = getSign(pub)

  url := fmt.Sprintf("%s/coin/list", BaseUrl)
  r := req.New()
  r.EnableInsecureTLS(true)
  post, err := r.Post(url, req.BodyJSON(&pub))
  if err != nil {
    panic(err)
  }
  fmt.Println("return", post.String())
  // verification
  checkSign(post.String())
}

// Getting signature string
func getSign(data map[string]string) string {
  err, signStr := ApiSign(data, signPrivateKey)
  if err != nil {
    panic(err)
  }
  fmt.Println("signature string:", signStr)
  return signStr
}

// verifying signature
func checkSign(resp string) {
  var res map[string]interface{}
  err := json.Unmarshal([]byte(resp), &res)
  if err != nil {
    panic(err)
  }
  sign := res["sign"].(string)
  data := ParseJsonToClassMap(resp)
  err = ApiVerifySign(data, signPublicKey, sign)
  if err != nil {
    fmt.Println("verification failed")
    return
  }
  fmt.Println("verification successful")
}

/**
 * Local private key signature
 * @param data parameter
 * @param priKey local private key
 * @return error
* @return string
*/
func ApiSign(data map[string]string, priKey string) (error, string) {
  hashed := getSignString(data)
  // rsa
  block, _ := pem.Decode([]byte(priKey))
  if block == nil {
    return errors.New("private key error"), ""
  }
  privateKey, err := x509.ParsePKCS8PrivateKey(block.Bytes)
  if err != nil {
    return err, ""
  }
  signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey.(*rsa.PrivateKey), crypto.MD5, hashed)
  if err != nil {
    return err, ""
  }
  ciphertext := base64.StdEncoding.EncodeToString(signature)

  return nil, ciphertext
}

/**
 * Using other party's public key to verify the signature, and determine whether the signature matches
 * @param data parameter
 * @param signed signature body
 * @param pubKey public key
 * @return error
 */
func ApiVerifySign(data map[string]string, pubKey string, signed string) error {
  hashed := getSignString(data)
  block, _ := pem.Decode([]byte(pubKey))
  if block == nil {
    return errors.New("public key error")
  }
  // Parse public key
  pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
  if err != nil {
    return err
  }
  pub := pubInterface.(*rsa.PublicKey)

  decodeString, err := base64.StdEncoding.DecodeString(signed)
  if err != nil {
    return err
  }
  err = rsa.VerifyPKCS1v15(pub, crypto.MD5, hashed, decodeString)
  if err != nil {
    return err
  }

  return nil
}

// Splice parameter
func getSignString(data map[string]string) []byte {
  delete(data, "sign")
  var keys []string
  for k := range data {
    keys = append(keys, k)
  }
  sort.Strings(keys)

  var signStr string
  for _, k := range keys {
    if signStr != "" {
      signStr = signStr + "&" + k + "=" + data[k]
    } else {
      signStr = k + "=" + data[k]
    }
  }

  hashMd5 := md5.Sum([]byte(signStr))
  hashed := hashMd5[:]

  return hashed
}

func ParseJsonToClassMap(jsonStr string) (m map[string]string) {
  m = make(map[string]string)
  result := gjson.Parse(jsonStr)
  result.ForEach(func(key, value gjson.Result) bool {
    if value.Type == gjson.JSON && gjson.Valid(value.String()) {
      m[key.String()] = JsonToString(value.String())
    } else {
      m[key.String()] = value.String()
    }
    return true
  })
  return
}

func JsonToString(jsonStr string) string {
  str := ""
  r := gjson.Parse(jsonStr)
  r.ForEach(func(key, value gjson.Result) bool {
    if value.Type == gjson.JSON && gjson.Valid(value.String()) {
      str += JsonToString(value.String())
    } else {
      str += value.String()
    }
    return true
  })
  return str
}
var crypto = require('crypto');

var priKey = `-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8d6RGCeQkrobx
+4xO1jXnHwiMU48UyOaRaNW2FMQrN9DcK/T2h58FyuA7kYN0CVNFEnaZQS9S8Nur
Tl0lOVJcbwKfCSnu9nmFYDvPWqlCTqQW3F83sKNi9IWrMFFny3CX35eUHpeJahE2
R9wma2oJIFJv3ux/I3+w8fQQ6zMPIqpDx4Tcu9sCVpot+/siWJDpyiQBlbXfcxuH
YOePUGx+tJ5HLXtJOUtPcgyhFTXRmW9r17DnnsjrT5Vc50IbN//JXbvr96eexQ/e
/IXHZP6MZWdthjuv9y2TaxS+JMnpKLrXfgazoQEsKmchAsTLEyX6tHG5tHq+3MaK
BSTFCoHHAgMBAAECggEAYodR1GPbZ+nuFpfhlF2ctIWe3G3awYz+LUrXX2ef3tBB
WrmISVJBqq+TZtD+Hi254MR0SE6xxPSygu5m98zt5/EJN8d8qrckdLwIyLCnCElA
s8rl5KFt6Y/YSdTq2g6bgGqePgt4QZi4At6yk0tYlgjV0DKFBTqzyPfVFvs/KEuZ
o8le0XjgJA+Rnti35Gi5UDL1Tn9LcmCU/JcdpksFgPvU/wPmlNb8azM68ougXcrf
hBebSRWbS0F2OXRJd7+hrTq+pwTNIH+IyzsUZHQCcH0tFe2Q304oDuVuwX5VxB3S
tYG8+LoECW1nKalJbolkmdRqVxZRXG/Ho8/aRCHBcQKBgQDBmoZzUaKU2F4Sa6P+
5vCQ5RAAiAATWao/WYfL9BBVnLzbkbzget3BNdJcJZKp1Avh6F/jeB0xUOD0aFgm
rJAZjVAFu77damKWwiEPxKfdgSbBedV/KWCMASzr4m4cdYKOcmlLFsh+Du2+oZW5
3Mn35hyfbTf1OyYxrvOVrhSu+wKBgQD5NVfxWTBsugAE++d4CCy8TUL7QCqb1I1v
EQ0FNdZsmXslPbCFlJ5UCFJXAF6s2x0MDKCl7y2ixlDo31H7DI6xlOP5kjYon7wr
mB0U2bclGtlJ3FvCwDBFkfZykYZqPyey8A3D+kf4pnvZvn/0BgKfWCVSYnqEB4mp
BI5WhywOpQKBgH4Mio8YTn8UZCMgG/UBDQ15ZbLC2THABj0aoHRkoiHrW3ala1DI
DgsWbLB78gJKQbZCofOqp28NVnkqWoJLhcJtI/Wnp/vmoOvA1t+6TQTFaqM7HIqf
OPHObh3iHYi/5VGzIeS2n7CbLaUY9S++lWymUGpoJK+wZAyi+IqyfVrzAoGAPKmI
g75zNDQ+pvfuy2AqC5g/Esv200H1P7EF21vUm1DtEg6nNo0L0WbJLFZxtWAM/Q7h
2CKVmEbwEQ+zdAoFfiLBL9Iwjsj7VB1ODvJES6ryc7FJQOnpljXGqPLVpm1DK6KV
pzv4YwWbplBh8zO3VbRuOVSxgAwZrWPnhhaXWeUCgYEAwVHYXN1qGTBS1uyrldDr
OMuXyfvE7lbfJlg2EfG2A7PtTooPkh1IbRjlJ8ACbiadM0pYhnGGPk0D1WSKvRxU
SmSc6PgW2weANQ8QCemo2V/zZ0DlWFZDdCV+7jMbAFBhQHcVh0qUr+uNyntjLTjj
OPdMSnhKLoKtleu+NiMIogc=
-----END PRIVATE KEY-----
`
var pubKey = `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk7K9s+r82lofBFaj3KWp
o/5E1ryDPDlLGZ4Rv68DcoCxV/bv0IvYX3cleC0WvTpwbdTpGtLjS6RHj89JREhi
svv5qmk5YTfjEqd3RmtYDmOVz2Ry6E76wLh9qi1pqpneMGr3shvEzZC6gkieXRCA
MOlEYbE7TSzxxDJxmovdeElowdRZcvwwPLvh/BLmCn+H1MXfdx01c/eFpTvu8BZG
1m7AqDOqnaPcR1ru/ekJoIwotF1jCPM2E5kAbQQutNaeSXhLbkfom4bxqF2/ni6k
Cwnz3fbBYcXP3Ww3/AdI1dn0iLr6450qn72yBpDtQY8OZ7+Krff4Fa5jOBY7OHEN
FwIDAQAB
-----END PUBLIC KEY-----
`

/**
 * Private key signing
 */
function encryption(data) {
    let signString = getSignString(data)
    let sign = crypto.createSign('md5WithRSAEncryption');

    sign.update(signString, 'utf8');
    sign.end();
    let signature = sign.sign(priKey, 'base64');

    return signature
}

/**
 * Use the other party's public key to verify the signature and check whether the signature matches
 * @param sign
 * @param data
 * @return bool
 */
function checkSignature(sign, data) {
    let signString = getSignString(data)
    let verify = crypto.createVerify('md5WithRSAEncryption');
    verify.update(signString, 'utf8');
    verify.end();
    return verify.verify(pubKey, sign, 'base64');
}

// Splice parameter
function getSignString(data) {
    delete(data["sign"])
    var keys = Object.keys(data)
    keys = keys.sort()
    let signStr = ""
    for(let k in keys) {
        if(typeof(data[keys[k]]) == "object") {
            signStr = keys[k] + "=" + arrayToString(data[keys[k]])
        }else {
            if (signStr != "") {
                signStr = signStr + "&" + keys[k] + "=" + data[keys[k]]
            } else {
                signStr = keys[k] + "=" + data[keys[k]]
            }
        }
    }
    return signStr
}
function arrayToString(data) {
    let str = '';
    for(let list in data) {
        if (typeof (data[list]) == "object") {
            str += arrayToString(data[list]);
        } else {
            str += data[list];
        }
    }
    return str;
}

//send http post
function httpByPost(data) {
    let HTTP = require('http')
    let POST_OPTIONS = {
        port: 8888,
        host: "http://api.xxxxx.com/shopapi",
        path: "/coin/list",
        method: 'POST',
        headers: {
            "Content-Type": "application/json"
        }
    };
    const REQUEST = HTTP.request(POST_OPTIONS, requestOnResponse)
    REQUEST.setTimeout(6000)

    REQUEST.write(JSON.stringify(data), 'utf8')
    REQUEST.end()
}

function requestOnResponse(incomingMessage){
    let data = []
    incomingMessage.on('data', chunk => {
        data.push(...chunk)
    })

    incomingMessage.on('end', () => {
        let _date = JSON.parse( new TextDecoder().decode(new Uint8Array(data)))
        let res = checkSignature(_date["sign"], _date)

        console.log(res)
    })
}
/*****testing********/
let data = {
    'app_id' : 'xxxxxxxxx',
    'version' : '1.0',
    'key_version' : 'admin',
    'time' : Math.floor(Date.now()/1000),
    'chain' :'eth',
    'coin' : 'eth',
}
data['sign'] = encryption(data)
httpByPost(data);
package com.junior.common;

import com.google.gson.*;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.*;
import java.util.stream.Collectors;

public class rsaSigner {

    public static void main(String[] args) {

        String baseUrl = "http://api.xxxxx.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");
    }

    public String genSign(Map<String, Object> data, String priKey) throws NoSuchAlgorithmException, InvalidKeySpecException, SignatureException, InvalidKeyException {
        Map<String, String> stringMap = toStringMap(new GsonBuilder().create().toJson(data));
        return this.sign(this.genSignString(stringMap), priKey);
    }

    public String genSignString(Map<String, String> params) {
        if (null == params || params.size() == 0) {
            return "";
        }

        List<String> sortedKeys = new ArrayList<>(params.keySet());
        sortedKeys.remove("sign");
        sortedKeys.sort(null);
        String sb = sortedKeys.stream().map(s -> s + "=" + params.get(s)).collect(Collectors.joining("&"));

        System.out.println("genSignString = " + sb);

        return sb;
    }

    public String sign(String str, String priKey) throws NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, SignatureException {
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        byte[] decodedKey = Base64.getDecoder().decode(priKey.getBytes(StandardCharsets.UTF_8));
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decodedKey);
        PrivateKey pk = keyFactory.generatePrivate(keySpec);

        Signature signature = Signature.getInstance("MD5withRSA");
        signature.initSign(pk);
        signature.update(str.getBytes(StandardCharsets.UTF_8));
        return new String(Base64.getEncoder().encode(signature.sign()), StandardCharsets.UTF_8);
    }

    public boolean verifySign(JsonElement data, String sign, String pubKey) throws NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, SignatureException {
        Map<String, String> resMap = toStringMap(data);
        String signString = this.genSignString(resMap);

        byte[] keyBytes = Base64.getDecoder().decode(pubKey.getBytes(StandardCharsets.UTF_8));
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PublicKey key = keyFactory.generatePublic(keySpec);
        Signature signature = Signature.getInstance("MD5withRSA");
        signature.initVerify(key);
        signature.update(signString.getBytes(StandardCharsets.UTF_8));
        return signature.verify(Base64.getDecoder().decode(sign.getBytes(StandardCharsets.UTF_8)));
    }

    public static Map<String, String> toStringMap(String str) {
        JsonParser jp = new JsonParser();
        JsonElement jEle = jp.parse(str);
        return toStringMap(jEle);
    }

    public static Map<String, String> toStringMap(JsonElement jEle) {
        Map<String, String> resMap = new HashMap<>();
        if (null != jEle && jEle.isJsonObject()) {
            for (Map.Entry<String, JsonElement> entry : jEle.getAsJsonObject().entrySet()) {
                resMap.put(entry.getKey(), valueAsString(entry.getValue()));
            }
        }
        return resMap;
    }

    public static String valueAsString(JsonElement element) {
        if (element.isJsonNull()) {
            return "";
        } else if (element.isJsonPrimitive()) {
            return element.getAsJsonPrimitive().getAsString();
        } else if (element.isJsonObject()) {
            StringBuilder sb = new StringBuilder();
            for (Map.Entry<String, JsonElement> entry : element.getAsJsonObject().entrySet()) {
                sb.append(valueAsString(entry.getValue()));
            }
            return sb.toString();
        } else if (element.isJsonArray()) {
            StringBuilder sb = new StringBuilder();
            for (JsonElement vv : element.getAsJsonArray()) {
                sb.append(valueAsString(vv));
            }
            return sb.toString();
        }
        return "";
    }

    public static String doPost(String httpUrl, String param) {
        //send http post request
    }
}

Create private key

openssl genrsa -out rsa_private_key.pem 2048

Create public key from private key

openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout

Signature Algorithm Details

Generate the signature string, for the following parameter array: user_id = 1 coin = eth address = 0x038B8E7406dED2Be112B6c7E4681Df5316957cad amount = 10.001 trade_id = 20220131012030274786

Sort each key in the array in order from a to z. If the same first letter is encountered, look at the second letter, and so on. After sorting, connect all array values ​​with "&" characters, such as $dataString:

address=0x038B8E7406dED2Be112B6c7E4681Df5316957cad&amount=10.001&coin=eth&trade_id=20220131012030274786&user_id=1
This string is the transfromed string.

Public information description

The following information is common to all interfaces, and the description of each interface is not repeated

Production Environment

Please contact customer service to obtain the API address

test environment

Please contact customer service to obtain the API address

Common paremeter in Request

Parameter Name Required Type Constraint Case Description
app_id Yes string Generated by the system A6vZLiqyRYxu Merchant ID assigned by the system when docking
version yes string fixed 1.0 interface version number - fixed according to the agreement at the time of access
sign yes string length 344 bits Dr7MnhPYh… RSA-2048 bit key mode
time yes string length 10 digits 1578829811 timestamp - ignoring timezone timestamp in seconds
key_version no string dynamic enumeration type default: admin key version number: admin / read / arbitrary - can be authorized for any 1-n interfaces

Public Information Notice

Name Type Case Description
time1 timeStamp 1578829811 UTC time unified time without time zone
Time 2 DateTime 2020-01-09 15:48:42 The global system defaults to Beijing time if this format appears
Request Method POST All requests are POST
Encoding UTF-8 Other encodings may produce garbled characters and errors
Communication Protocol HTTPS https Currently only HTTPS is supported
Signature Type RSA-2048-bit Dr7MnhPYh… Click to view rule details
Request and Return JSON All request and response parameters are in JSON format
Note on the amount parameter string The number of digits after the decimal point exceeds 8, and the number of digits before the decimal point exceeds 12, which cannot be passed, and the last invalid 0 must be deleted.

Address

Address get

$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) {

    // 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("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");
}

Example of return result:

{
  "status":200,
  "msg":"Request succeeded",
  "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": "Insufficient address",
  "data": null,
  "date_time": "2020-01-09 15:46:14",
  "sign": "rzbmkcf0Vr1AEZAo0Lsnlmk1s6HGONYZkpQxWKhGwIFxyN/fkaYzA6UxhIm9C8Drlfa8oZxpyrH89POuoaVfToxPhC9p8w10rfb4G/kNaZBE/gIo2H8e4/CTvEsiX5lz/ASNLiSe6BmegtMubb0wRD55Bmeubb+TFClbsHSytUw
}
{
  "status":551,
  "msg":"There are 6 allocated unused addresses, please use them up before requesting a new address",
  "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

request parameters

parameter name required type description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
coin yes string main chain coin name within 12 characters, the coin name platform shall prevail (if bnb_bsc please use eth). Can query /coin/list to get available coins

Response parameter description

parameter name required type description
status yes int status code
msg no string within 100 characters Status description
data no jsonObject status 200 returns an array of addresses, 500 returns null for insufficient addresses, 551 has allocated unused addresses, returns unused numbers
date_time No DateTime Beijing time: 2020-06-29 14:28:14
time_stamp no string response time in seconds: 1593412094
sign yes string return the signature, sign all the above parameters

The contract coin and the main chain coin share the same address. Please only use the main chain coin name to apply. It is not supported to apply for the address by the contract coin name. Only one main chain coin address can be allocated. Example: user_coin table

User ID coin name Address
1688eth0xa6f8745c56a7c4fcb094678a2fbdcbd9ee9228f7
1688usdt_erc200xa6f8745c56a7c4fcb094678a2fbdcbd9ee9228f7
1688leek0xa6f8745c56a7c4fcb094678a2fbdcbd9ee9228f7

Address list

$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) {

    // 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("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");
}

Example of return result:

{
  "status":200,
  "msg":"Processing successful",
  "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

request parameters

parameter name required type description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
coin yes string main chain coin name - see the description of the public information of supported coins (if bnb_bsc please use eth)
address no string address
page no int 1<= N <=Max, if it exceeds Max, take Max, if it is less than 1, return 1
is_used no int 1=used, 2=not used

Response parameter description

Parameter name Type Description
statusintstatus code
msgstringstatus description
datajsonObject**See below** "data details".
data.pageintcurrent page
data.max_pageinttotal pages
data.countintNumber of records on this page
data.listjsonArrayrecord
date_timestringresponse time
time_stampinttimestamp in seconds
signstringsignature

EOS-like address + memo mode

$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) {

    // 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("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");
}

Example of return result:

{
  "status":200,
  "msg":"Request succeeded",
  "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=="
}

request parameters

parameter name required type description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
coin yes string main chain coin name - see the description of the public information of supported coins (if bnb_bsc please use eth)

Response parameter description

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

Address state synchronization

$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) {

    // 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("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");
}

Example of return result:

{
  "status":200,
  "msg":"Successful synchronization",
  "data":{
    "address":"0x0603b5a606e6ae28e729d145f4d5a99bd8769950",
    "coin":"eth"
  },
  "date_time":"2020-01-14 00:33:58",
  "sign":"KVZrYNjK9xwZvqJHMSRxxK4PjbirEtS1vyI220BzK/rF7bp+iU+ClQU5BSERcaujFz0EqRtZW5LSojjgRPeGbh4Wyqmlpk/Qz7ulTC0lqkik3torj3xL4SP2MKvUMXyPRRn8MKh586c8XLIDUrAPRR48mBmDV
}

HTTP Request

POST: /address/syncStatus

request parameters

parameter name required type description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
coin yes string Within 12 characters, the main chain currency of the address (if bnb_bsc, please pass eth)
address yes string address, within 128 characters
user_id yes string User id related to the address, consists of letters, numbers, and underscores. length under 40.

Response parameter description

parameter name required type description
status yes int return status code
msg yes string status code description
date_time yes string interface return time
time_stamp yes string no time zone time unit seconds
data yes null or JSONObjectString return data
sign yes string backend signature

Note: After the merchant assigns the address to its own user, it must request the interface to return the usage status information, and obtain the correct status code return value of 200 before enabling the user's deposit and withdrawal function.
*1. If it is not synchronized, it will affect the use of the address acquisition interface (when the number of allocated unused addresses exceeds a certain amount, the platform will no longer allocate new addresses to merchants).
*2. If the status synchronization does not receive the correct return result, but reports an error prompt, please manually troubleshoot the error.
Design rules: The same currency or contract currency, the same merchant, and the same user ID can only be assigned one address.
If the above rules are violated, an error will be reported.

Address status batch synchronization

$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) {

    // 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));
    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;
    }
}

Example of return result:

{
  "status":200,
  "msg":"Request succeeded",
  "data":{
    "success_data":[
      {
        "address":"0x038B8E7406dED2Be112B6c7E4681Df5316957cad",
        "user_id":"123sa",
        "coin":"eth"
      }
    ],
    "fail_data":[
      {
        "address":"0xf854AC319A546ae11e367ef80a203AaC923ca6A3",
        "user_id":"123sb",
        "coin":"eth",
        "msg":"The address has been assigned to other users and cannot be assigned repeatedly",
        "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

request parameters

parameter name required type length description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
address_list yes array
address_list.address yes string within 128 characters address
address_list.coin Yes string Within 12 characters The currency of the main chain to which the address belongs (if bnb_bsc, please pass eth)
address_list.user_id yes string string within 40 User id related to the address, consists of letters, numbers, and underscores.

Response parameter description

parameter name type description
status yes int
msg yes string
date_time yes string
time_stamp yes string
success_data yes null or JSONObjectString
success_data.address yes string
success_data.coin yes string
success_data.user_id yes string
fail_data yes null or JSONObjectString
fail_data.address yes string
fail_data.coin yes string
fail_data.user_id yes string
fail_data.status yes string
fail_data.msg yes string
fail_data.old_address yes string
fail_data.owner_user_id yes string
sign yes string

Note: After the merchant assigns the address to its own user, it must request the interface to return the usage status information, and obtain the correct status code return value of 200 before enabling the user's deposit and withdrawal function.
1. If it is not synchronized, it will affect the use of the address acquisition interface (when the number of allocated unused addresses exceeds a certain amount, the platform will no longer allocate new addresses to merchants).
2. If the status synchronization does not receive the correct return result, but reports an error prompt, please manually troubleshoot the error.
Design rules: The same currency or contract currency, the same merchant, and the same user ID can only be assigned one address.
If the above rules are violated, an error will be reported.

Address verification

$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) {

    // 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("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");
}

Example of return result:

{
  "status":200,
  "msg":"Verification succeeded",
  "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

request parameters

parameter name required type description
common parameter yes string common parameter refers to: signature (sign), version (version), merchant ID (app_id), time (time)
coin Yes string Main chain coin name within 12 characters, the coin name provided by the platform shall prevail
address yes string address

Response parameter description

parameter name required type description
status yes int Return value: 200 Verification successful; 543 Verification failed; 565 Currency not supported
msg no string within 100 characters, state description
data yes jsonObject
date_time No DateTime Beijing time: 2020-06-29 14:28:14
time_stamp no string response time in seconds: 1593412094
sign yes string return the signature, sign all the above parameters

Address AML verification

$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) {

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

Example of return result:

{
  "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

request parameters

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 Main chain coin name within 12 characters, the coin name provided by the platform shall prevail
address yes string address
skip_api_source no string Specify the aml source that skips remote api query, you can fill in the source OK_LINK or BEOSIN, separated by multiple commas. The premise is that the corresponding source has been activated through customer service.

Response parameter description

parameter name required type description
status yes int Return value: 200 success
msg no string within 100 characters, state description
data yes jsonObject
data.chain yes string main coin name of chain
data.address yes string address
data.risk_code yes int risk code. default value 0, means no risk. Non Zero means there is risk, and more code will be added later.
data.source yes string AML data source,OK_LINK,SLOW_MIST,BEOSIN
data.tag no string risk tags
data.detail no string risk description
data.risk_score no string OK_LINK risk score,value 100 means no risk.The lower the score, the higher the risk.
data.level no string OK_LINK risk level,SEVERE,HIGH,MEDIUM,LOW,NONE
date_time No DateTime Beijing time: 2020-06-29 14:28:14
time_stamp no string response time in seconds: 1593412094
sign yes string return the signature, sign all the above parameters

risk_code description

risk_code description
0 no risk
5001 Extortion involving malicious mining activities
5002 money theft attacks
5003 phishing attacks
5004 phishing attacks involving cybercrime
5101 SEVERE risk level(source OK_LINK)
5102 HIGH risk level(source OK_LINK)
5103 MEDIUM risk level(source OK_LINK)
5104 LOW risk level(source OK_LINK)
5201 Severe risk level(source BEOSIN)
5202 High risk level(source BEOSIN)
5203 Medium risk level(source BEOSIN)
5204 Low risk level(source BEOSIN)
xxxx may more codes ...

Deposit

Top-up list

$url = "http://api.xxxx.com/shopapi/receive/list";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" => "1.0",
    "app_id" => "hxgmau9imt86qky9",
    "time" => "1578736053",
    "sign" =>  "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
    "page" => 1,
    "coin" => "eth",
    "order_id" => "20200803220112662436",
    "status" => "1",
    "start_time" => "1578736053",
    "end_time" => "1578836053",
    "page_size" => "20",
    "sort_num" => 2
];
$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/receive/list"
data := map[string]string{
    "version": "1.0",
    "app_id": "hxgmau9imt86qky9",
    "time": "1578736053",
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
    "page": "1",
    "coin" : "eth",
    "order_id" : "20200803220112662436",
    "status" : "1",
    "start_time" : "1578736053",
    "end_time" : "1578836053",
    "page_size" : "20",
    "sort_num" : "2",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "page": "1",
  "coin" : "eth",
  "order_id" : "20200803220112662436",
  "status" : "1",
  "start_time" : "1578736053",
  "end_time" : "1578836053",
  "page_size" : "20",
  "sort_num" : "2",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/receive/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) {

    // 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("page", "1");
    params.put("coin", "eth");
    params.put("order_id", "20200803220112662436");
    params.put("status", "1");
    params.put("start_time", "1578736053");
    params.put("end_time", "1578836053");
    params.put("page_size", "20");
    params.put("sort_num", "2");

    try {

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

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

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

Example of return result:

{
  "status":200,
  "msg":"Processing successful",
  "data":{
    "page":1,
    "count":9,
    "list":[
      {
        "coin":"hc",
        "txid":"b064a252228105d7be10fefabf02fcdfbb863a071304298f7c3c1c1ace471e2b",
        "total":"0.30000000",
        "chain":"hc",
        "confirm_count":"6",
        "order_id":"20200803220112662436",
        "status":"0",
        "address":"0", #Add address,
        "from_address":"0", #from address
        "time":"1583922327", #Add the time with status=1 if there is no time with status=0
        "type": "1"
      }
    ]
  },
  "date_time":"2020-03-11 18:25:27",
  "time_stamp":1583922327,
  "sign":"ESIOqIfhKnYHFh3HPD1XewWYBraPz+MukYIFcMrMLv7zEKZEIY/ZsxOYTwQ1AtcfSPiVlOJtp9SqtAVxRxcwRNK9X0ZHjSo+eP8YRXYhDCTi0jFETy5hA2Cy8j3X0t7LFiO9feGE6qA/Xok4sngbTwbQ3MqZP+lN/P3dK2VZyiFKywx5/pPi4tUAOpCo4SJEtLkapS4rCHwNreo72Z7D8L9YiT4iCOkzYBL/2ryuwZrpM1sX6WvC4Zf3LRLTE+X4XFZ++AlbrAuSS+zis+bWEG/qEYAdTXOXhkQrgfuidpH/U2HGjA9zf/skYlisdAt4cMiMiQmgIHTuO2Ujobn2Ow=="
}

Query order status through the batch query interface

HTTP Request

POST: /receive/list

request parameters

parameter name required type description
common parameter yes string common parameter refers to: signature (sign), version (version), merchant ID (app_id), time (time)
page no int, default is 1 1<= N <=Max, N>Max ? N=Max ; N<1 ? N=1
coin no varchar coin name (eg: eth)
order_id no varchar platform order number
status no int 0 pending review 1 transfer successful
start_time no int start time (creation time) format: timestamp
end_time no int end time (creation time) format: timestamp
page_size no int number of pages per page (20-100), default 20
sort_num no int default list sorting is ascanding order of record creation time ( 1 positive order; 2 reverse order)

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject
data.page int page number
data.count int number of records on this page
data.list jsonArray specific record
data.list.coin string currency
data.list.txid string on-chain txid
data.list.total numberString total amount
data.list.chain string main chain coin name
data.list.confirm_count string number of confirmations
data.list.order_id string order number
data.list.status string 0 credited but not confirmed 1 confirmed successful 5 failed 8 waiting for refund 10 refunding 20 refunded
data.list.address string forwarding address
data.list.from_address string from address
data.list.time string The default is the time of status=1, if status=0 is the time of status=0
data.list.type string 1 on-site deposit 2 on-chain deposit
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Account balance query

$url = "http://api.xxxx.com/shopapi/balance";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" => "1.0",
    "app_id" => "hxgmau9imt86qky9",
    "time" => "1578736053",
    "sign" => "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
    "coin" => "etc"
];
$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/balance"
data := map[string]string{
    "version": "1.0",
    "app_id": "hxgmau9imt86qky9",
    "time": "1578736053",
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
    "coin": "etc",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "coin": "etc",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/balance",
  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("page", "1");
    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 + "/balance", 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": "Request succeeded",
  "data": {
    "chain_hot_amount": "0",
    "amount": "0",
    "freeze_amount": "0",
    "total": "0",
    "waiting_collect_amount": "0"
  },
  "date_time": "2022-07-22 19:03:08",
  "time_stamp": 1658487788,
  "sign": "tA8F3+VBGqyA0hmPPGMSIGgCH6hRssZc6Ez+KPst+c28SoakNI0k6Xoqh6qbHXsaPNBuPuaQnpR3unxWsOs675podt8vQREhzInOH1iieceqRzdtzKifEcaekhWDblGUK+h6yJTYGY0ABRtDDfb7X/GByEdmzBeOGz8LFa3oRNkVc59r5CPfBBbqGyYVM5KJM5l2RHXezXC8z2OmL7XK23o/zxD2JAQHukXqrAj5WhUpClhw4WEVzBhswj/dELKq4jUI2Rp4PVDLMj+H4itPf7XLkV3F/cwc67rBlTXgR31vUqwCbFbdbDIjcbm+9ksrTH4QHkkdW4GlXCLO/aqvEA=="
}

Currency balance query interface, which returns the total remaining balance of on-chain deposit of a single currency.

HTTP Request

POST: /balance

request parameters

parameter name required type description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
coin yes string coin name within 20 characters, the coin name provided by the platform shall prevail

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject
data.amount string
data.freeze_amount string
data.total string
data.chain_hot_amount string
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Deposit result callback notification

$url = "The specific callback address is provided by the merchant to the platform";
$header = [
  'Content-Type:application/json',
];
$params = [
    "data" => [
        "order_id" => "2020010211153423123456",
        "coin" => "eth",
        "chain" => "eth",
        "address" => "this is test address",
        "from_address" => "this is test address",
        "txid" => "this is txid",
        "total" => "5",
        "amount" => "10.0089",
        "fee" => "0",
        "status" => "0",
        "confirm_count" => "5",
        "time" => "1650011196",
        "type" => 1
    ],
    "sign" => "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
];
$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 = "The specific callback address, provided by the merchant to the platform side"
data := map[string]interface{}{
    "data": map[string]string{
        "order_id": "2020010211153423123456",
        "coin": "eth",
        "chain": "eth",
        "address": "this is test address",
        "from_address": "this is test address",
        "txid": "this is txid",
        "total": "5",
        "amount": "10.0089",
        "fee": "0",
        "status": "0",
        "confirm_count": "5",
        "time": "1650011196",
        "type": "1",
    },
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
}
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": {
    "order_id": "2020010211153423123456",
    "coin": "eth",
    "chain": "eth",
    "address": "this is test address",
    "from_address": "this is test address",
    "txid": "this is txid",
    "total": "5",
    "amount": "10.0089",
    "fee": "0",
    "status": "0",
    "confirm_count": "5",
    "time": "1650011196",
    "type": "1",
  },
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "The specific callback address, provided by the merchant to the platform side",
  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("order_id", "2020010211153423123456");
    data.put("coin", "eth");
    data.put("chain", "eth");
    data.put("address", "this is test address");
    data.put("from_address", "this is test address");
    data.put("txid", "this is txid");
    data.put("amount", "1");
    data.put("fee", "0");
    data.put("total", "1");
    data.put("status", "1");
    data.put("confirm_count", "3");
    data.put("time", "1650011196");
    data.put("type", "1");

    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/deposit/callback", gson.toJson(params));
//            if (null == res) {
//                throw new RuntimeException("http error");
//            }

        // mock response from shop callback API
        {
            res = """
                    {
                      "status":200,
                      "sign": "A3wCWwcw1w7Ee/xDDWBpf80i2Wc1oqpcqChznv9mr7dgLcKPQAECtemvmRTPwAxsZm6SJeGSN7P3ssB8/wmyZcJiVykr1HWbcQNL/YNYb6MCJqBXpbpnOwaBSWGr+aOh/1ql1ciW04W/rhF8rHch13Se+ZQ1TmJ5/JooEssCxaIRI4EiwGM47cpFSpuMv1e0UMsozCNvudAZDhwh/fDU4eIk2n3qikFEN6uAkG2gN2Y0dseG1/ua1RLYn97lb6oU4cYTpmrlGYZCMzc+cvhDkBL83UsU1hiVYMQtTJ5jtrUe5sumkYuVqkT0VjZklszvKtDDblK/KYXtZ2kRkWn2kg==",
                      "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,
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "data":{
    "success_data":"success"
  }
}

User's deposit arrival notification callback, a platform initiates a request, and the merchant responds

HTTP Request

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

request parameters

parameter name required type description
data no string callback notification carries data structure
data.order_id yes string order number
data.coin yes string coin name
data.chain yes string main chain coin name
data.address yes string account address
data.from_address yes string from address,product environment return this field only for merchant, who created after 2023-05-05.
data.txid yes string on-chain txid
data.total yes string actual credit total = amount - fee
data.fee yes string platform fee
data.amount no string on-chain amount (this field is for reference only)
data.status yes int 0 credited but not confirmed 1 confirmed successful 5 failed 8 waiting for refund 10 refunding 20 refunded
data.confirm_count Yes int Confirmation count is for reference only, with status=1 as successful entry
data.time yes int order confirmation time
data.type yes int 1 on-site deposit 2 on-chain deposit
data.reject_reason no string The rejection reason selected during merchant review. See the following table for value description. This parameter does not exist by default. If you need to return it, please contact us.
sign yes string sign the data in data

Response parameter description

parameter name required type description
status yes int status code
data yes jsonObject returns the data object
data.success_data yes sring success Received successfully
sign yes string signature

request parameter data.reject_reason description

value description
no-shop-coin Shop coin not supported
shop-coin-no-recharge Shop coin not support recharge
aml-slow-mist Slow Mist aml risk address
aml-ok-link OKLink aml risk address
other other

Withdraw

Withdrawal application

$url = "http://api.xxxx.com/shopapi/transfer";
$header = [
  'Content-Type:application/json',
];
$params = [
    "app_id" => "hxgmau9imt86qky9",
    "version" => "1.0",
    "time" => 1579004943,
    "user_id" => "0",
    "coin" => "hc",
    "address" => "HsRDEePh7WBCsdJPfo1UsjfurwLBU6HD5Vi",
    "amount" => "0.02",
    "trade_id" => "20200114202903274786",
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/transfer"
data := map[string]interface{}{
    "app_id":"hxgmau9imt86qky9",
    "version":"1.0",
    "time":"1579004943",
    "user_id":"0",
    "coin":"hc",
    "address":"HsRDEePh7WBCsdJPfo1UsjfurwLBU6HD5Vi",
    "amount":"0.02",
    "trade_id":"20200114202903274786",
    "sign":"dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA==",
}
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":"1579004943",
  "user_id":"0",
  "coin":"hc",
  "address":"HsRDEePh7WBCsdJPfo1UsjfurwLBU6HD5Vi",
  "amount":"0.02",
  "trade_id":"20200114202903274786",
  "sign":"dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA==",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/transfer",
  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("user_id", "1");
    params.put("coin", "hc");
    params.put("address", "HsRDEePh7WBCsdJPfo1UsjfurwLBU6HD5Vi");
    params.put("amount", "0.02");
    params.put("trade_id", "20200114202903274786");

    try {

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

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

        String res = doPost(baseUrl + "/transfer", 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":"Request succeeded",
  "data":{
    "trade_id":"20200114005026028784"
  },
  "date_time":"2020-01-14 00:50:27",
  "sign":"ib1gqr0E0gJ02yo3InXKcKGaPqIp+r1izMego+KMRvE0B4ZdkFGrLmOtxGStUBibGVMzJRGWppKyU4PzcK877AOEvQlSFiUI+hDL1z8WaZsWD3r3ykbPzU0uWo4U+6WQTpOEo1gJ/N2FlAgwgzJsd
}

The merchant initial a on-chain withdrawal request will use this API. In order to complete the withdrawl request, merchant need to prepare the callback API for risk control callback. ( Detail please refer to the Risk Control callback -> The second review of the withdrawal order)

POST: /transfer

request parameters

parameter name required type description
common parameter yes string common parameter refers to: signature (sign), version (version), merchant ID (app_id), time (time)
user_id no string user ID, composed of letters, numbers and underscores, within 40 characters in length
coin yes string currency abbreviation - platform agreement shall prevail
amount yes string withdrawal amount, an error will occur if it exceeds the range
address yes string payment address, an error will occur if it exceeds the range
memo no string memo/tag needs to be filled in when the current currency is eos and its tokens
trade_id Yes string The unique ID of the merchant's transaction (recommended format: year, month, day, hour, minute, second + 6-digit random number case: 20200311202903000001)

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject
data.trade_id string Merchant-side transaction unique ID
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Withdrawal list

$url = "http://api.xxxx.com/shopapi/transfer/list";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" => "1.0",
    "app_id" => "hxgmau9imt86qky9",
    "time" => "1578736053",
    "page" => 1,
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/transfer/list"
data := map[string]string{
     "version": "1.0",
     "app_id": "hxgmau9imt86qky9",
     "time": "1578736053",
     "page": "1",
     "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "page": "1",
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/transfer/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) {

    // 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("page", "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 + "/transfer/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");
}

Example of return result:

{
  "status": 200,
  "msg": "Processing successful",
  "data": {
    "page": 1,
    "max_page": 1,
    "count": 1,
    "list": [{
      "trade_id": "20200114202903274786",
      "coin": "hc",
      "chain": "hc",
      "txid": "",
      "amount": "0.02",
      "fee": "0",
      "total": "0.02",
      "address": "HsRDEePh7WBCsdJPfo1UsjfurwLBU6HD5Vi",
      "from_address": "the transaction from address",
      "status": "2",
      "time": "1658482253",
      "type": "2",
      "gas_fee": "0.1"
    }]
  },
  "date_time": "2022-07-22 18:36:36",
  "time_stamp": 1658486196,
  "sign": "uuYWvmoMqM5xh7aTcxspJmW78y8op5BBjYXp0XoqcqFXe+HrSGzxN2Ls6LA7SlfsNndCtS4AX1/J+2o1MWZw/HFVfRqtxu02AEfWhM5ZSiJfEtO8f47H2/EGcsKw/eK8nxOnYAyAKwG6Ia6L4KgYIXLwsGt6Dt0VYWADu+vEQEes83/c6+Tc8QdqpdnLbs2XXXkYkl5eijoja+QEMaENbx+DHxnsVZV0iRK5FcSQH9PdOIpWmC944BA2v0tnPQWb6WDnOTsw5xoVKiL57WGIeOaxepvjo6poi1a/+HYrowT4IcejZZHi9YW0iM4eNm8MPK0tloAQ8GWY7kVs9uEwOA=="
}

You can query the status of an order through this interface, you can query only one, or you can query multiple ones vaguely.

HTTP Request

POST: /transfer/list

request parameters

parameter name required type description
common parameter yes string common parameter refers to: signature (sign), version (version), merchant ID (app_id), time (time)
trade_id No string If the trade_id is passed as exact search, the following parameters will be invalid
page no int 1<= N <=Max, take Max if it exceeds Max, return 1 if it is less than 1 or if no parameter is passed
status no int 0 pending review 1 successful withdrawal, 2 waiting for risk control processing, 5 waiting for currency issuance, 10 review failed, 20 transfer failed
start_time no int start time (creation time) format: timestamp
end_time no int end time (creation time) format: timestamp
page_size no int number of pages per page (20 ~ 100), default 20
sort_num no int default list sorting is ascanding order of record creation time ( 1 positive order; 2 reverse order)

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject
data.page int page number
data.count int number of records on this page
data.list jsonArray specific record
data.list.trade_id string trade id
data.list.coin string currency
data.list.txid string on-chain txid
data.list.amount string total amount
data.list.fee string handling fee (business rule fee is not on-chain gasfee), external deduction mode
data.list.total string Total withdrawal amount total = amount+fee
data.list.address string withdrawal transaction to address
data.list.from_address string withdrawal transaction from address, product environment return this field only for merchant, who created after 2025-01-22
data.list.chain string main chain coin name
data.list.memo string memo/tag will return this field when it is currently eos and its token
data.list.status enum 0 pending review, 1 successful withdrawal, 2 waiting for risk control processing, 5 waiting for currency issuance, 10 review failed, 20 transfer failed
data.list.time time_stamp Status time, finally fixed at the time when status=1
data.list.type string 1 On-site transaction 2 On-chain transaction 5 Centralized withdrawal
data.list.gas_fee string gas fee,product environment return this field only for merchant, who created after 2024-08-14, the precision is 8 digits
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Withdrawal result callback notification

$url = "The withdrawal callback URL configured in the backend of the merchant";
$header = [
  'Content-Type:application/json',
];
$params = [
    "data" => [
          "trade_id" => "this is trade_id",
          "coin" => "eth",
          "txid" => "this is txid",
          "address" => "this is to address",
          "from_address" => "this is from address",
          "time" => "1591779242",
          "amount" => "10.1",
          "fee" => "0",
          "total" => "10.1",
          "status" => "1",
          "msg" => "Prompt information",
          "type" => 1,
          "gas_fee" => "0.1",
    ],
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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 = "The withdrawal callback URL configured in the backend of the merchant"
data := map[string]interface{}{
    "data": map[string]string{
        "trade_id":"this is trade_id",
        "coin":"eth",
        "txid":"this is txid",
        "address":"this is to address",
        "from_address":"this is from address",
        "time":"1591779242",
        "amount": "10.1",
        "fee":"0",
        "total":"10.1",
        "status":"1",
        "msg":"Prompt information",
        "type":"1",
        "gas_fee":"0.1",
    },
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
}
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": {
    "trade_id":"this is trade_id",
    "coin":"eth",
    "txid":"this is txid",
    "address":"this is to address",
    "from_address":"this is from address",
    "time":"1591779242",
    "amount": "10.1",
    "fee":"0",
    "total":"10.1",
    "status":"1",
    "msg":"Prompt information",
    "type":"1",
    "gas_fee":"0.1",
  },
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "The withdrawal callback URL configured in the backend of 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("trade_id","this is trade_id");
    data.put("coin","eth");
    data.put("txid","this is txid");
    data.put("address","this is to address");
    data.put("from_address","this is from address");
    data.put("time","1591779242");
    data.put("amount", "10.1");
    data.put("fee","0");
    data.put("total","10.1");
    data.put("status","1");
    data.put("msg","Prompt information");
    data.put("type","1");
    data.put("gas_fee","0.1");

    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/withdraw/callback", gson.toJson(params));
//            if (null == res) {
//                throw new RuntimeException("http error");
//            }

        // mock response from shop callback API
        {
            res = """
                    {
                      "status":200,
                      "sign": "A3wCWwcw1w7Ee/xDDWBpf80i2Wc1oqpcqChznv9mr7dgLcKPQAECtemvmRTPwAxsZm6SJeGSN7P3ssB8/wmyZcJiVykr1HWbcQNL/YNYb6MCJqBXpbpnOwaBSWGr+aOh/1ql1ciW04W/rhF8rHch13Se+ZQ1TmJ5/JooEssCxaIRI4EiwGM47cpFSpuMv1e0UMsozCNvudAZDhwh/fDU4eIk2n3qikFEN6uAkG2gN2Y0dseG1/ua1RLYn97lb6oU4cYTpmrlGYZCMzc+cvhDkBL83UsU1hiVYMQtTJ5jtrUe5sumkYuVqkT0VjZklszvKtDDblK/KYXtZ2kRkWn2kg==",
                      "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,
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "data":{
    "success_data":"success"
  }
}

HTTP Request

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

request parameters

parameter name required type description
data no string as follows
data.trade_id yes string trade id
data.coin yes string coin name
data.chain yes string main chain coin name
data.txid yes string txid
data.address yes string withdrawal to address
data.from_address string withdrawal from address,product environment return this field only for merchant, who created after 2025-01-22
data.time yes string order last update time
data.amount yes string withdrawal amount, the precision is 8 digits
data.fee yes string handling fee, the precision is 8 digits
data.total yes string total amount of withdrawal total=amount+fee, the precision is 8 digits
data.status Yes string Withdrawal status: 1 success;5 waiting confirm(txid generated but not confirm yet); 10 review failed; 20 transfer failed; other error codes (refer to the description of error codes)
data.msg yes string state description
data.type yes int 1 on-site deposit 2 on-chain deposit
data.gas_fee no string gas fee,product environment return this field only for merchant, who created after 2024-08-14, the precision is 8 digits
sign yes string sign the data in data

Response parameter description

parameter required type description
status yes int status code
data yes jsonObject returns the data object
data.success_data yes sring success Received successfully
sign yes string signature
Type Content Merchant Handling
Success Status=1 corresponding to trade_id Merchant can consider it to be successful
Change to 1 after success Rollback due to chain failure, txid changes. The trade_id and status remain unchanged The merchant side can consider it to be successful, just update the txid
Change to 2 after success The platform broadcast fails, the platform handles The merchant side can think it must be successful, just update the txid
Failure 1 Because the merchant gave the wrong address, the btc address was given to eth The platform does not deduct the money, which requires the merchant to re-request
Failure 2 Due to insufficient user balance The platform does not deduct money, which requires the merchant to re-request

To put it simply: Merchant-side errors cause failures, and merchants re-request for processing. Platform-side errors are handled by the platform. Orders are absolutely unique for platform processing. txid is subject to change.
* Asynchronous notification time point
The platform side executes and finds a client error, or the platform side determines the success or changes after the success.

Exchange

Redemption application

$url = "http://api.xxxx.com/shopapi/exchange/index";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" =>  "1.0",
    "app_id" =>  "hxgmau9imt86qky9",
    "time" =>  1578736053,
    "user_id" => "28",
    "source_coin" => "eth",
    "target_coin" => "usdt",
    "amount" => "0.011",
    "trade_id" => "20200114202903274786",
    "limit_price" => "5",
    "type" => 1,
    "max_time" => 5,
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/exchange/index"
data := map[string]string{
    "version": "1.0",
    "app_id": "hxgmau9imt86qky9",
    "time": "1578736053",
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
    "user_id":"28",
    "source_coin":"eth",
    "target_coin":"usdt",
    "amount":"0.011",
    "trade_id":"20200114202903274786",
    "limit_price":"5",
    "type":"1",
    "max_time":"5",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "user_id":"28",
  "source_coin":"eth",
  "target_coin":"usdt",
  "amount":"0.011",
  "trade_id":"20200114202903274786",
  "limit_price":"5",
  "type":"1",
  "max_time":"5",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/exchange/index",
  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("user_id", "28");
    params.put("source_coin", "eth");
    params.put("target_coin", "usdt");
    params.put("amount", "0.011");
    params.put("trade_id", "20200114202903274786");
    params.put("limit_price", "5");
    params.put("type", "1");
    params.put("max_time", "5");

    try {

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

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

        String res = doPost(baseUrl + "/exchange/index", 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":"Request succeeded",
  "data":{
    "trade_id":"2424sfshdrsfsf210"
  },
  "date_time":"2020-12-29 09:14:10",
  "time_stamp":1609204450,
  "sign":"folFicr8IuNfZVJe/RO3qbP4nCvmVrQS1+hq8MyK9eVE63KRVe8CNdKjlBzt89buN/weu9fLBtdRk1YgAEUB0ZBd8KcMuzvbuk0WZtW3YKjlPidoQWE9ooSU7HmUJ3larBK4iMGpkXcC+t4ucDy8vnc2s8sQWBBOxuXG22cx3LnXXm9KDXRWkV0T4DnaA65/G7UKPATvwNuQCilwLdyej94CAQnHRoVaSjm27i4EWvr2HcM8q38ceswFNwzQ/UYm54A7OidSwRIkDjs9dC0bFMfJvE8vgsUVX0UYDN9Vs276qC6XkbhBWr3B8HN65lJw7OhxqbnGG1QkNM1AGCso0Q=="
}

Merchant initiates redemption and requests this interface.

HTTP Request

POST: /exchange/index

request parameters

parameter name required type description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
user_id No string Merchant user id (required for merchants with risk control enabled)
source_coin yes string exchange coin
target_coin yes string exchange target coin
amount yes string amount of currency exchanged
trade_id Yes string Merchant-side transaction unique ID (up to 32 characters in length. Recommended format: year, month, day, hour, minute, second + 6-digit random number Case column: 20200311202903000001)
limit_price no string limit price (if type=0, this field is required). The minimum exchange price when exchanging stable coins, or the maximum exchange price when exchanging virtual currency.
type yes int exchange mode (1 closing mode / 0 general exchange), default 1. Generally, a pending order is placed under the condition that the minimum price is met. There may be some successes and some failures. If the exchange is not successful within a certain period of time, the order will be cancelled. The closing mode is that the order will be successfully placed, regardless of the impact of slippage, and will continue to try to place the order on the exchange regardless of the price.
max_time no int unit second - maximum redemption time - the redemption will be stopped if the redemption will be completed (the general mode only takes effect)

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject
data.trade_id string trade_id - given by the merchant
date_time string Beijing time
time_stamp string response time in seconds
sign string signature - the signature for all participating parameters above

Exchange account recharge

$url = "http://api.xxxx.com/shopapi/exchange/transfer";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" =>  "1.0",
    "app_id" =>  "hxgmau9imt86qky9",
    "time" =>  "1578736053",
    "coin" => "usdt_erc20",
    "exchange_coin" => "usdt",
    "amount" => "10",
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/exchange/transfer"
data := map[string]string{
    "version": "1.0",
    "app_id": "hxgmau9imt86qky9",
    "time": "1578736053",
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "coin" : "usdt_erc20",
  "exchange_coin" : "usdt",
  "amount":"10",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "coin":"usdt_erc20",
  "exchange_coin":"usdt",
  "amount":"10",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/exchange/transfer",
  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("coin", "usdt_erc20");
    params.put("exchange_coin", "usdt");
    params.put("amount", "10");

    try {

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

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

        String res = doPost(baseUrl + "/exchange/transfer", 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": [],
  "date_time": "2021-08-20 15:44:25",
  "time_stamp": 1629445465,
  "sign": "lRQQoEIc5B9ZwYoTCW3B58M+3GB17wUwTX+SmaOQ9iofK3Vs9RIb4TWzwtpOLZyGls2Ixe6s6MDSZZufjjqiqnSrgx1vqd5k3BkVLeHKJJmPWb8aXBT55qjlqifF7tRWCJJ8ToboBOWaJldWnvJgyQxwgdcGKUR/G2IVlIBddLdUkRlIf+hDqZAqboMU8b9k5tra3iIgIF0AMFrjYas4MeKxHDrnTZr9dJkKqJqWHOdn3cYkkxK9I27s+ZEOHVNhezS/tpwKm9pOJeNdIUPzumnUT7rkd2dSrimlokR85cC48qrqZehoz3lj6Rua4ravWmz0nr8mPLodnkKOerF3qA=="
}

HTTP Request

POST: /exchange/transfer

request parameters

parameter name required type description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
coin yes string hot wallet coin
exchange_coin yes string exchange account coin
amount yes string recharge amount

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject
date_time string Beijing time
time_stamp string response time in seconds
sign string signature - the signature for all participating parameters above

Exchange rate

$url = "http://api.xxxx.com/shopapi/rate/exchange";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" =>  "1.0",
    "app_id" =>  "hxgmau9imt86qky9",
    "time" =>  "1578736053",
    "source_coin" => "eth",
    "target_coin" => "usdt",
    "amount" => "10",
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/rate/exchange"
data := map[string]string{
    "version": "1.0",
    "app_id": "hxgmau9imt86qky9",
    "time": "1578736053",
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
    "source_coin":"eth",
    "target_coin":"usdt",
    "amount":"10",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "source_coin":"eth",
  "target_coin":"usdt",
  "amount":"10",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/rate/exchange",
  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("source_coin", "eth");
    params.put("target_coin", "usdt");
    params.put("amount", "0.011");

    try {

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

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

        String res = doPost(baseUrl + "/rate/exchange", 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": "Request succeeded",
  "data": {
    "rate": "3233.688",
    "max": "20",
    "min": "15",
    "source_unit": "4",
    "base_coin": "usdt"
  },
  "date_time": "2021-08-20 15:44:25",
  "time_stamp": 1629445465,
  "sign": "lRQQoEIc5B9ZwYoTCW3B58M+3GB17wUwTX+SmaOQ9iofK3Vs9RIb4TWzwtpOLZyGls2Ixe6s6MDSZZufjjqiqnSrgx1vqd5k3BkVLeHKJJmPWb8aXBT55qjlqifF7tRWCJJ8ToboBOWaJldWnvJgyQxwgdcGKUR/G2IVlIBddLdUkRlIf+hDqZAqboMU8b9k5tra3iIgIF0AMFrjYas4MeKxHDrnTZr9dJkKqJqWHOdn3cYkkxK9I27s+ZEOHVNhezS/tpwKm9pOJeNdIUPzumnUT7rkd2dSrimlokR85cC48qrqZehoz3lj6Rua4ravWmz0nr8mPLodnkKOerF3qA=="
}

Before exchanging, check the exchange rate.

HTTP Request

POST: /rate/exchange

request parameters

parameter name required type description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
source_coin yes string exchange coin
target_coin yes string exchange target coin
amount yes string amount of currency exchanged

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject
data.rate string The exchange rate of other currencies corresponding to usdt
data.max string The maximum number of coins that can be exchanged in a single transaction
data.min string The minimum supported single exchange quantity of the exchange currency
data.source_unit int Supports the length of the decimal places of the exchange currency (a value such as 4 means that up to 4 decimal places are supported)
data.base_coin string Base currency, the trading area supports the currency as the base currency for the transaction price
date_time string Beijing time
time_stamp string response time in seconds
sign string signature - the signature for all participating parameters above

Batch query exchange rate

$url = "http://api.xxxx.com/shopapi/rate/exchange_batch";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" =>  "1.0",
    "app_id" =>  "hxgmau9imt86qky9",
    "time" =>  "1578736053",
    "source_coin" => "eth",
    "target_coin" => "usdt",
    "amount" => "10",
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/rate/exchange_batch"
data := map[string]string{
    "version": "1.0",
    "app_id": "hxgmau9imt86qky9",
    "time": "1578736053",
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
    "source_coin":"eth",
    "target_coin":"usdt",
    "amount":"10",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "source_coin":"eth",
  "target_coin":"usdt",
  "amount":"10",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/rate/exchange_batch",
  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));

    try {

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

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

        String res = doPost(baseUrl + "/rate/exchange_batch", 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": "Request succeeded",
  "data": [
    {
      "source_coin": "eth",
      "target_coin": "usdt",
      "rate": 3198.707676,
      "max": 0,
      "min": 0,
      "source_unit": 4,
      "base_coin": "usdt"
    },
    {
      "source_coin": "usdt",
      "target_coin": "eth",
      "rate": 3231.075,
      "max": 20,
      "min": 15,
      "source_unit": 4,
      "base_coin": "usdt"
    }
  ],
  "date_time": "2021-08-20 15:47:52",
  "time_stamp": 1629445672,
  "sign": "Jjkpqtjw6oITCvxpIcEDC0EQfhKjDfWQKcnxRqDYOHqCB3oXl7GDHFEQ3g7JFc3g8tW2XQRaQldCnNXd1jw9gddZRUWimULPSiOrdaCYn5wxLBLGTf4bHX//P34ZBrNa45APCURqk26U68ZzQmnmcpzH8te1WOiey2WnCkSABVkBEeMwLjsM8pO3kmiWx5ZQ+hVQqHO6wONRsIToMisDKgr/4YzcxB3fAuY+7J5Ns3ZTrBTKPxg6Idy41sIi0sSjssXFD/mVBt6sIRaD/JknOwCdwCE5a8rVMWT7wPbQdaCDSgNMnjit14x1665a6tNG8S6IC+o/pn4dgVk9rCqVHA=="
}

HTTP Request

POST: /rate/exchange_batch

request parameters

parameter name required type description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject
data.rate string The exchange rate of other currencies corresponding to usdt
data.max string The maximum number of coins that can be exchanged in a single transaction
data.min string The minimum supported single exchange quantity of the exchange currency
data.source_unit int Supports the length of the decimal places of the exchange currency (a value such as 4 means that up to 4 decimal places are supported)
data.base_coin string Base currency, the trading area supports the currency as the base currency for the transaction price
data.source_coin string exchange coin
data.target_coin string target coin
date_time string Beijing time
time_stamp string response time in seconds
sign string signature - the signature for all participating parameters above

Exchange balance query

$url = "http://api.xxxx.com/shopapi/balance/exchange";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" => "1.0",
    "app_id" => "hxgmau9imt86qky9",
    "time" => "1578736053",
    "coin" =>"eth",
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/balance/exchange"
data := map[string]string{
    "version": "1.0",
    "app_id": "hxgmau9imt86qky9",
    "time": "1578736053",
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
    "coin":"eth",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "coin":"eth",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/balance/exchange",
  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("coin", "eth");

    try {

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

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

        String res = doPost(baseUrl + "/balance/exchange", 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": "Request succeeded",
  "data": [{
    "coin": "eth",
    "amount": 0,
    "freeze_amount": 0,
    "total": 0
  }],
  "date_time": "2022-07-22 20:18:01",
  "time_stamp": 1658492281,
  "sign": "xqLyFst5Xv2mqargS2couk7anmeWMZ+1wVEBUYQHlnfJAHdmeXh3eev/bqK5CnfEHGN/A1q+z/vFmMdXfgmzY5S+3iGRz+qGLwqBOFjC4S7J6+fgHu/ciaQedR9jss4KmonxxYrGHoNgsXe/H3toDGe/z/EO956nhZW3K3g9bh/CzZJc/OfNKT0TfgXuOy+B3MvZ5oxZi2mygaXk2aWEjcrZoUEiZfJkx/AzLpolCTrqDt5+1l/U5pQpCptGaR6lOIjTmbd3ycUYRGOxuhoK4OzO3euQIEVxbaf5aRnJU9r48QU2lPUC0PGd3i4+hAHy9gg1S2pNVuWA9PGJvpFhpg=="
}

Exchange account balance query interface, returns the exchange account balance of a single currency

HTTP Request

POST: /balance/exchange

request parameters

parameter name required type description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
coin No string Coin name within 20 characters, which is provided by the coin platform. If the parameter is empty, all coins will be returned

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject
data.amount float available balance
data.freeze_amount float Freeze balance
data.total float frozen + available balance
date_time string Beijing time
time_stamp string response time in seconds
sign string signature - the signature for all participating parameters above

Exchange transaction pair query

$url = "http://api.xxxx.com/shopapi/exchange/coin";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version"=>  "1.0",
    "app_id"=>  "hxgmau9imt86qky9",
    "time"=>  "1578736053",
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/exchange/coin"
data := map[string]string{
    "version": "1.0",
    "app_id": "hxgmau9imt86qky9",
    "time": "1578736053",
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/exchange/coin",
  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));

    try {

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

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

        String res = doPost(baseUrl + "/exchange/coin", 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": "Processing successful",
  "data": [
    {
      "source_coin": "eth",
      "target_coin": "usdt",
      "source_min_amount": "0",
      "source_max_amount": "0",
      "source_unit": "4",
      "target_unit": "2"
    },
    {
      "source_coin": "usdt_trc20",
      "target_coin": "usdt",
      "source_min_amount": "0",
      "source_max_amount": "0",
      "source_unit": "2",
      "target_unit": "6"
    }
  ],
  "date_time": "2021-08-10 09:32:26",
  "time_stamp": 1628559146,
  "sign": "uqhR4gE6jZ1cK0pz3QoUjJIHMBwaK2dYTBVEgjhsq4bbk12rDLJ4VKq99BT510POmouF0o5ZsK2Y9/MlUdumb90rLam2PFwVqcwuBHEIJ7RTMwzcrF4G1z3oCQS4/sPkmOlX8pTK7StcNGzJfbqQB3Gr+4x1chxZR8MZSvXnkKtElco75K/4LyuoYbOUTtGSYgUgYsa5Yh8EnZeKfekR3yclet8WThtqJJ187RdXZMkMUWNU+27N3PbDf0bI8Vxiz26tFg2Y1FIUTJbmOnG2zTNuUUtdgu5H3USRsCMGHUq8YZeyFAZW54odZGrqc5njO2GkRdoyS7f1JGEXwMfdEA=="
}

Query supported exchange currencies

HTTP Request

POST: /exchange/coin

request parameters

parameter name required type description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject
data.source_coin string source currency
data.target_coin string target currency
data.source_min_amount string The minimum supported single exchange amount of the exchange currency
data.source_max_amount string The maximum supported single exchange amount of the exchange currency
data.source_unit string Supports the length of decimal places for exchange currency (a value such as 4 means that up to 4 decimal places are supported)
data.target_unit string Supports the length of the decimal places of the target currency (a value such as 4 means that up to 4 decimal places are supported)
date_time string Beijing time
time_stamp string response time in seconds
sign string signature - the signature for all participating parameters above

Exchange list query

$url = "http://api.xxxx.com/shopapi/exchange/list";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" => "1.0",
    "app_id" => "hxgmau9imt86qky9",
    "time" => "1578736053",
    "trade_id" => "",
    "source_coin" => "eth",
    "target_coin" => "usdt",
    "start_time" => "1587004987",
    "end_time" => "1599616679",
    "status" => "1",
    "page" => "1",
    "page_size" => "20",
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/exchange/list"
data := map[string]string{
"version": "1.0",
    "app_id": "hxgmau9imt86qky9",
    "time": "1578736053",
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
    "trade_id":"",
    "source_coin":"eth",
    "target_coin":"usdt",
    "start_time":"1587004987",
    "end_time":"1599616679",
    "status":"1",
    "page":"1",
    "page_size":"20",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "trade_id":"",
  "source_coin":"eth",
  "target_coin":"usdt",
  "start_time":"1587004987",
  "end_time":"1599616679",
  "status":"1",
  "page":"1",
  "page_size":"20",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/exchange/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) {

    // 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("trade_id","");
    params.put("source_coin","eth");
    params.put("target_coin","usdt");
    params.put("start_time","1587004987");
    params.put("end_time","1599616679");
    params.put("status","1");
    params.put("page","1");
    params.put("page_size","20");

    try {

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

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

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

Example of return result:

{
  "status": 200,
  "msg": "Processing successful",
  "data": {
    "page": 1,
    "max_page": 1,
    "count": 4,
    "list": [
      {
        "order_id": "20210811162504870081",
        "trade_id": "2424sfshdrsfsf211wqe11",
        "user_id": "1001",
        "source_coin": "eth",
        "target_coin": "usdt",
        "source_amount": "0.1234",
        "source_success_amount": "0",
        "source_failed_amount": "0",
        "target_amount": "0",
        "limit_price": "3.4",
        "type": "1",
        "exchange_fee": "0",
        "exchange_rate": "0",
        "status": "2",
        "time": "1629252807"
      },
      {
        "order_id": "20210811162442276466",
        "trade_id": "2424sfshdrsfsf211wqe1",
        "user_id": "1002",
        "source_coin": "eth",
        "target_coin": "usdt",
        "source_amount": "0.1234",
        "source_success_amount": "0",
        "source_failed_amount": "0",
        "target_amount": "0",
        "limit_price": "3.4",
        "type": "1",
        "exchange_fee": "0",
        "exchange_rate": "0",
        "status": "2",
        "time": "1628670282"
      }
    ]
  },
  "date_time": "2021-08-18 17:11:54",
  "time_stamp": 1629277914,
  "sign": "EC2LAtl7T3h0Q93nsqf3QzJAAUDrxqRYPpEsClzg9S+SGk77wCxEkQvNAJEK3IYHBvkTtyrlggbBaH7YA7q4dJeFsuwMVlvuVQ9yHuzEe3XVA8CLDVn98QDvmSjprBHUrQKG4FCvD3YiOlaZj46xXaGD2Dm/A3gvxclDfafUMzKOqXbb2yhOraz71+VzhqszKkZQyghx4Et55GA0ZqSIu1Ui81qjVLvu1t2J90kzq/ffE6rUCz4ZidA+9ybnxTU8T9swzdSpudHiuxMOa5kNaJD0daqVbz3Ez17r0c7w78U9Hj5WWicNSQ8j4VLyQ2BK6hIKqj79ibqM84mxec7Ltw=="
}

Exchange account balance query

Investigate and deal with exchange order status interface, support multi-dimensional query

HTTP Request

POST: /exchange/list

request parameters

parameter name required type description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
trade_id No string If the trade_id is passed as exact search, the following parameters will be invalid
source_coin no string exchange coin
target_coin no string exchange target coin
page no int 1<= N <=Max, take Max if it exceeds Max, return 1 if it is less than 1 or if no parameter is passed
status no int 0 pending review 1 successful exchange, 5 approved, 10 failed, 20 failed
start_time no int start time (creation time) format: timestamp
end_time no int end time (creation time) format: timestamp
page_size no int number of pages per page (20 ~ 500), default 20

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject
data.page int page number
data.count int number of records on this page
data.list jsonArray specific record
data.list.trade_id string trade id
data.list.source_coin string exchange coin
data.list.target_coin string Exchange target coin
data.list.source_amount string Amount of currency exchanged
data.list.target_amount string The amount of target currency to exchange
data.list.limit_price string limit price
data.list.type string Exchange mode (0 general exchange / 1 closing mode)
data.list.exchange_fee string Exchange fee (unit: target currency)
data.list.status string Order status: 0 pending approval, 1 exchange completed, 2 pending, 5 approved, 10 approved, 20 failed transfer
data.list.time string Status time, finally fixed at the time when status=1
data.list.order_id string order id
data.list.exchange_rate string Exchange rate (average transaction price)
data.list.source_success_amount string The actual exchange amount of the exchange currency (there are partial exchanges in the general exchange mode)
data.list.source_failed_amount string The amount of exchange failed to exchange currency (the system will automatically return it to the exchange account)
data.list.user_id string User ID
date_time string Beijing time
time_stamp string response time in seconds
sign string signature - the signature for all participating parameters above

Redeem callback notification

$url = "The specific callback address is provided by the merchant to the platform";
$header = [
  'Content-Type:application/json',
];
$params = [
    "data" => [
        "trade_id"=> "20200114202903274786",
        "order_id"=> "2020010211153423123456",
        "source_coin"=> "eth",
        "target_coin"=> "eth",
        "source_amount"=> "10",
        "target_amount"=> "100",
        "exchange_rate"=> "5",
        "exchange_fee"=> "1",
        "limit_price"=> "100",
        "type"=> "0",
        "status"=> "1",
        "time"=> "1650011196",
        "source_success_amount"=> 10,
        "source_failed_amount"=> 100,
        "user_id"=> 1,
    ],
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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 = "The specific callback address, provided by the merchant to the platform side"
data := map[string]interface{}{
    "data": map[string]string{
        "trade_id":"20200114202903274786",
        "order_id":"2020010211153423123456",
        "source_coin":"eth",
        "target_coin":"eth",
        "source_amount":"10",
        "target_amount":"100",
        "exchange_rate":"5",
        "exchange_fee":"1",
        "limit_price":"100",
        "type":"0",
        "status":"1",
        "time":"1650011196",
        "source_success_amount":"10",
        "source_failed_amount":"100",
        "user_id":"1",
    },
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
}
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": {
      "trade_id":"20200114202903274786",
      "order_id":"2020010211153423123456",
      "source_coin":"eth",
      "target_coin":"eth",
      "source_amount":"10",
      "target_amount":"100",
      "exchange_rate":"5",
      "exchange_fee":"1",
      "limit_price":"100",
      "type":"0",
      "status":"1",
      "time":"1650011196",
      "source_success_amount":"10",
      "source_failed_amount":"100",
      "user_id":"1",
  },
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "The specific callback address, provided by the merchant to the platform side",
  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()

Example of return result:

{
  "status":200,
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "data":{
    "success_data":"success"
  }
}

Exchange result notification (success/failure), a platform initiates a request, and the merchant responds

HTTP Request

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

request parameters

parameter name required type description
data no string callback notification carries data structure
data.trade_id yes string Merchant trade order number
data.order_id yes string platform redemption order number
data.source_coin yes string exchange coin
data.target_coin yes string exchange target coin
data.source_amount yes string actual amount of currency exchanged
data.target_amount yes string amount of target currency exchanged for
data.exchange_rate yes string exchange rate (average transaction price)
data.exchange_fee yes string exchange fee (unit: target currency)
data.limit_price yes string limit price
data.type yes string exchange mode (0 general exchange / 1 closing mode)
data.status Yes string Order status: 0 pending, 1 exchange completed, 2 pending, 5 approved, 10 approved, 20 failed transfer
data.time yes int time of occurrence (timestamp)
data.source_success_amount Yes string The actual exchange amount of the exchange currency (there are partial exchanges in the general exchange mode)
data.source_failed_amount Yes string The amount of exchange failed to exchange currency (the system will automatically return it to the exchange account)
data.user_id yes string user id
sign yes string sign the data in data

Response parameter description

parameter name required type description
status yes int status code
data yes jsonObject returns the data object
data.success_data yes sring success Received successfully
sign yes string signature

Statistics

Merchant financial settlement ledger

$url = "http://api.xxxx.com/shopapi/balance/generalAccount";
$header = [
  'Content-Type:application/json',
];
$params = [
    "app_id"=> "hxgmau9imt86qky9",
    "version"=> "1.0",
    "time"=> 1578997143,
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/balance/generalAccount"
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==",
}
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==",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/balance/generalAccount",
  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));

    try {

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

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

        String res = doPost(baseUrl + "/balance/generalAccount", 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":"Request successful",
  "data":[
    {
      "coin" :"eth",
      "receive_amount":"2.202508",
      "send_amount":0,
      "hot_address_amount":"28.49831843",
      "settlement_amount":"2.15252525",
      "wait_settlement_amount":"0.04998275",
    },
    {
      "coin" :"trx",
      "receive_amount":0,
      "send_amount":0,
      "hot_address_amount":0,
      "settlement_amount":0,
      "wait_settlement_amount":0,
    },
    "usdt_erc20":
    {
      "coin" :"trx",
      "receive_amount":"23092870.028105",
      "send_amount":"1242995.611177",
      "hot_address_amount":"357014.388823",
      "settlement_amount":"23033124.2080808",
      "wait_settlement_amount":"59745.8200242",
    }
  ],
  "date_time":"2020-09-07 11:12:49",
  "time_stamp":1599448369,
  "sign":"Ddhz62FBeMzsxD9ARVwOmMXIgBRHWksbESZ2SFbKymcU94ZP0HIq4UkjaIw/HcU+LFiTLuTIxogsvAhCDVQAA1JPP78eiQCty98Q2HrN/uei5J3lvQFrBxk+/8ys/J9c7tKAU5ltDUBTAMshcSrcMivfGFXFBxwNOHbIFt6WXxDyq9R32EtgzNNLTCsLx9jU76+0aFthgxcy/At6/I5OLRcCya32GsqIi7YK7UOK5wSC64rCnroZFN7OWNkAlVgk9Fo0tyLjTO8ga+SX8BHgWBci2Ue1S4u8ctspWulsP7BLEhQDSKCe0pFDHc3//vWyeOEuLZxM/xDCE0BXmvjzNkqiog=="
}

HTTP Request

POST: /balance/generalAccount

request parameters

parameter name required type description
common parameter yes string common parameter refers to: signature (sign), version (version), merchant ID (app_id), time (time)

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject For details, see "data details" below.
data.coin string coin name
data.receive_amount string The total amount of deposits on the chain
data.send_amount string The total amount of on-chain withdrawals
data.hot_address_amount string Hot wallet balance
data.settlement_amount string Amount settled to merchant
data.wait_settlement_amount string Amount to be settle to the merchant
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Merchant deposit/withdrawal successful number

$url = "http://api.xxxx.com/shopapi/statistics/transfer";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version"=> "1.0",
    "app_id"=> "hxgmau9imt86qky9",
    "time"=> "1578736053",
    "coin"=> "eth",
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/statistics/transfer"
data := map[string]string{
    "version": "1.0",
    "app_id": "hxgmau9imt86qky9",
    "time": "1578736053",
    "coin": "eth",
    "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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "coin": "eth",
  "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/statistics/transfer",
  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("coin","eth");

    try {

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

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

        String res = doPost(baseUrl + "/statistics/transfer", 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": "Processing successful",
  "data": {
    "success_send_count": 60,
    "success_receive_count": 57
  },
  "date_time": "2020-06-02 16:52:05",
  "time_stamp": 1591087925,
  "sign": "tZI1x6RqVW4llNpqMIPe1avItAOWHSqUAdeUrK/8Jpswlq5XyFlOXypDlx/d/ctVkIly8n5qw/po/AUQhEpKCM+rs6pDjk7xRoT1i1dpU01cAvc32D/2Z+olmPeo7iikIDeUlZKxHWtu9V9/xxjEtlEyZXNpJmlCTVttPmYjr1D0WbfL0gXKPK0Qkm8rQlih3mv0BsiTzea7RFOiFP5bWG8FYj0QjL8WqglUgm0AS8812HTmvwlQTkJWO9PS7lsa+Q0nBny5JZ1Rv/rJ4RhhRPXcskgUWqDB26wljHYEppoGJh1XOx/pTVeDIJA0iZohGBmHruYG79m+nCLxF5B5KA=="
}

HTTP Request

POST: /statistics/transfer

request parameters

parameter name required type description
common parameter yes string common parameter refers to: signature (sign), version (version), merchant ID (app_id), time (time)
coin no string

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject For details, see "data details" below.
data.success_send_count int number of successful withdrawals
data.success_receive_count int number of successful deposits
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Risk control callback

The second review of the withdrawal order

$url = "http://*****/withdrawal/order/check";
$header = [
  'Content-Type:application/json',
];
$params = [
    "data" => [
        "amount" => 2.00000000,
        "coin_symbol" => "USDT_TRC20",
        "address" => "TLhdZuFU1fDPnzxPoXfJ6WZZMpKzY15DUi",
        "user_id" => "1",
        "order_id" => "1394934189494173697",
        "timestamp" => 1621493658
    ],
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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://*****/withdrawal/order/check"
data := map[string]interface{}{
    "data": map[string]string{
        "amount":"2.00000000",
        "coin_symbol":"USDT_TRC20",
        "address":"TLhdZuFU1fDPnzxPoXfJ6WZZMpKzY15DUi",
        "user_id":"1",
        "order_id":"1394934189494173697",
        "timestamp":"1621493658",
    },
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
}
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": {
    "amount":"2.00000000",
    "coin_symbol":"USDT_TRC20",
    "address":"TLhdZuFU1fDPnzxPoXfJ6WZZMpKzY15DUi",
    "user_id":"1",
    "order_id":"1394934189494173697",
    "timestamp":"1621493658",
  },
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/withdrawal/order/check",
  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("amount", "2.00000000");
    data.put("coin_symbol", "USDT_TRC20");
    data.put("address", "TLhdZuFU1fDPnzxPoXfJ6WZZMpKzY15DUi");
    data.put("user_id", "1");
    data.put("order_id", "1394934189494173697");
    data.put("timestamp", "1621493658");

    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/withdrawal/order/check", gson.toJson(params));
//            if (null == res) {
//                throw new RuntimeException("http error");
//            }

        // mock response from shop callback API
        {
            res = """
                    {
                      "status":200,
                      "data":{
                        "status_code": 200,
                        "timestamp":1620617260,
                        "order_id":"202105101123221335892766889804"
                      },
                      "sign":"YbRyMoUmsCxLbWopD2JD5EZqkT+pIRARsdTSFo+WyhebOMP/TZ96zV/vy4CYn+9gk6nJ55acFnqSO78N4/uemiOyBgE+a8SaIjutc+kFCWGaCorboy9alFBFUbYPvHvFFKHNFJx19Z2cyv9uceGdOdz09g0OBgp8bTyfkCUNrhbUmut2M2S2ixSH3wSefqUq2SUpohb5hlD6tOsyO3JfZr7M/16aiRGcEye2XglsOMFTO5XRkj4hwHKB+nHacttvuZKnGH67ELyoajCc+ef1DkmzmO3P7vFLIuVtVXQ2FPlXVkzCR/+VesyDOpYogHwqyR1BzCCSzxpbZ/aFc/uANg=="
                    }
                    """;
        }

        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,
  "data":{
    "status_code": 200,
    "timestamp":1620617260,
    "order_id":"202105101123221335892766889804"
  },
  "sign":"YbRyMoUmsCxLbWopD2JD5EZqkT+pIRARsdTSFo+WyhebOMP/TZ96zV/vy4CYn+9gk6nJ55acFnqSO78N4/uemiOyBgE+a8SaIjutc+kFCWGaCorboy9alFBFUbYPvHvFFKHNFJx19Z2cyv9uceGdOdz09g0OBgp8bTyfkCUNrhbUmut2M2S2ixSH3wSefqUq2SUpohb5hlD6tOsyO3JfZr7M/16aiRGcEye2XglsOMFTO5XRkj4hwHKB+nHacttvuZKnGH67ELyoajCc+ef1DkmzmO3P7vFLIuVtVXQ2FPlXVkzCR/+VesyDOpYogHwqyR1BzCCSzxpbZ/aFc/uANg=="
}

HTTP Request

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

request parameters

parameter name required type description
data no string as follows
data.order_id Yes string The unique ID of the merchant transaction (trade_id when withdrawing)
data.user_id yes string user the order belongs to
data.coin_symbol yes string lowercase coin name, subject to the coin provided by the platform
data.address yes string withdrawal address
data.amount yes decimal(20,8) withdrawal amount
data.timestamp yes int current timestamp in second
sign yes string signature, only the parameters in data are signed

Response parameter description

parameter name type description
status int 200 passed, 2001 awaiting review, 5400 failed signature verification, 5401 time is less than 30s, 5402 order number does not exist, 5001 platform order_id is different, 5002 amount is wrong, 5003 user uid is wrong, 5004 address is wrong, 5005 currency The symbol is wrong, 5006 order rejection, 5007 other, the description information can be expanded by yourself
data jsonObject
data.timestamp int current timestamp in second
data.status_code int order status, same as status value, after 2021-12-10, this parameter is required
data.order_id String Order Id
sign string signature - the signature of the content of the data field in the response parameter

2nd review for exchange order

$url = "http://*****/exchange/order/check";
$header = [
  'Content-Type:application/json',
];
$params = [
    "data" => [
        "amount" => "2.00000000",
        "source_coin" => "eth",
        "target_coin" => "usdt_erc20",
        "user_id" => "1",
        "trade_id" => "1394934189494173697",
        "time" => 1621493658
    ],
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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://*****/exchange/order/check"
data := map[string]interface{}{
    "data": map[string]string{
        "amount":"2.00000000",
        "source_coin":"eth",
        "target_coin":"usdt_erc20",
        "user_id":"1",
        "trade_id":"1394934189494173697",
        "time":"1621493658",
    },
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
}
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": {
    "amount":"2.00000000",
    "source_coin":"eth",
    "target_coin":"usdt_erc20",
    "user_id":"1",
    "trade_id":"1394934189494173697",
    "time":"1621493658",
  },
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/exchange/order/check",
  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("amount", "2.00000000");
    data.put("source_coin", "eth");
    data.put("target_coin", "usdt_erc20");
    data.put("user_id", "1");
    data.put("trade_id", "1394934189494173697");
    data.put("time", "1621493658");

    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/exchange/order/check", gson.toJson(params));
//            if (null == res) {
//                throw new RuntimeException("http error");
//            }

        // mock response from shop callback API
        {
            res = """
                    {
                      "status":200,
                      "data":{
                        "time":1620617260,
                        "trade_id":"202105101123221335892766889804"
                      },
                      "sign":"YbRyMoUmsCxLbWopD2JD5EZqkT+pIRARsdTSFo+WyhebOMP/TZ96zV/vy4CYn+9gk6nJ55acFnqSO78N4/uemiOyBgE+a8SaIjutc+kFCWGaCorboy9alFBFUbYPvHvFFKHNFJx19Z2cyv9uceGdOdz09g0OBgp8bTyfkCUNrhbUmut2M2S2ixSH3wSefqUq2SUpohb5hlD6tOsyO3JfZr7M/16aiRGcEye2XglsOMFTO5XRkj4hwHKB+nHacttvuZKnGH67ELyoajCc+ef1DkmzmO3P7vFLIuVtVXQ2FPlXVkzCR/+VesyDOpYogHwqyR1BzCCSzxpbZ/aFc/uANg=="
                    }
                    """;
        }

        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,
  "data":{
    "time":1620617260,
    "trade_id":"202105101123221335892766889804"
  },
  "sign":"YbRyMoUmsCxLbWopD2JD5EZqkT+pIRARsdTSFo+WyhebOMP/TZ96zV/vy4CYn+9gk6nJ55acFnqSO78N4/uemiOyBgE+a8SaIjutc+kFCWGaCorboy9alFBFUbYPvHvFFKHNFJx19Z2cyv9uceGdOdz09g0OBgp8bTyfkCUNrhbUmut2M2S2ixSH3wSefqUq2SUpohb5hlD6tOsyO3JfZr7M/16aiRGcEye2XglsOMFTO5XRkj4hwHKB+nHacttvuZKnGH67ELyoajCc+ef1DkmzmO3P7vFLIuVtVXQ2FPlXVkzCR/+VesyDOpYogHwqyR1BzCCSzxpbZ/aFc/uANg=="
}

HTTP Request

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

request parameters

parameter name required type description
data no string as follows
data.trade_id yes string Merchant-side transaction unique ID
data.user_id yes string the user the order belongs to
data.source_coin Yes string The source coin must be in lowercase, the coin provided by the platform shall prevail
data.target_coin yes string target coin namemust be in lowercase, the coin provided by the platform shall prevail
data.amount yes decimal(20,8) exchange amount
data.time yes int current timestamp in second
sign yes string sign the data in data

Response parameter description

parameter name type description
status int 200 passed, 2001 pending review, 5400 failed signature verification, 5401 time less than 30s, 5402 order number does not exist, 5001 platform order_id is different, 5002 amount is wrong, 5003 user uid is wrong, 5004 address is wrong, 5005 currency The symbol is wrong, 5006 order rejection, 5007 other, the description information can be expanded by yourself
msg string state description
data jsonObject
data.time int current time
data.trade_id String Order Id
sign string signature - the signature of the content of the data field in the response parameter

Mpc order review API

$url = "http://*****/mpc/order/check";
$header = [
  'Content-Type:application/json',
];
$params = [
    "data" => [
        "amount" => 2.00000000,
        "coin_symbol" => "USDT_TRC20",
        "address" => "TLhdZuFU1fDPnzxPoXfJ6WZZMpKzY15DUi",
        "user_id" => "1",
        "order_id" => "1394934189494173697",
        "timestamp" => 1621493658
    ],
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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://*****/mpc/order/check"
data := map[string]interface{}{
    "data": map[string]string{
        "amount":"2.00000000",
        "coin_symbol":"USDT_TRC20",
        "address":"TLhdZuFU1fDPnzxPoXfJ6WZZMpKzY15DUi",
        "user_id":"1",
        "order_id":"1394934189494173697",
        "timestamp":"1621493658",
    },
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
}
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": {
    "amount":"2.00000000",
    "coin_symbol":"USDT_TRC20",
    "address":"TLhdZuFU1fDPnzxPoXfJ6WZZMpKzY15DUi",
    "user_id":"1",
    "order_id":"1394934189494173697",
    "timestamp":"1621493658",
  },
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/mpc/order/check",
  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("amount", "2.00000000");
    data.put("coin_symbol", "USDT_TRC20");
    data.put("address", "TLhdZuFU1fDPnzxPoXfJ6WZZMpKzY15DUi");
    data.put("user_id", "1");
    data.put("order_id", "1394934189494173697");
    data.put("timestamp", "1621493658");

    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/mpc/order/check", gson.toJson(params));
//            if (null == res) {
//                throw new RuntimeException("http error");
//            }

        // mock response from shop callback API
        {
            res = """
                    {
                      "status":200,
                      "data":{
                        "time":1620617260,
                        "trade_id":"202105101123221335892766889804"
                      },
                      "sign":"YbRyMoUmsCxLbWopD2JD5EZqkT+pIRARsdTSFo+WyhebOMP/TZ96zV/vy4CYn+9gk6nJ55acFnqSO78N4/uemiOyBgE+a8SaIjutc+kFCWGaCorboy9alFBFUbYPvHvFFKHNFJx19Z2cyv9uceGdOdz09g0OBgp8bTyfkCUNrhbUmut2M2S2ixSH3wSefqUq2SUpohb5hlD6tOsyO3JfZr7M/16aiRGcEye2XglsOMFTO5XRkj4hwHKB+nHacttvuZKnGH67ELyoajCc+ef1DkmzmO3P7vFLIuVtVXQ2FPlXVkzCR/+VesyDOpYogHwqyR1BzCCSzxpbZ/aFc/uANg=="
                    }
                    """;
        }

        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,
  "data":{
    "is_valid": 1,
    "timestamp":1620617260,
    "order_id":"1394934189494173697"
  },
  "sign":"YbRyMoUmsCxLbWopD2JD5EZqkT+pIRARsdTSFo+WyhebOMP/TZ96zV/vy4CYn+9gk6nJ55acFnqSO78N4/uemiOyBgE+a8SaIjutc+kFCWGaCorboy9alFBFUbYPvHvFFKHNFJx19Z2cyv9uceGdOdz09g0OBgp8bTyfkCUNrhbUmut2M2S2ixSH3wSefqUq2SUpohb5hlD6tOsyO3JfZr7M/16aiRGcEye2XglsOMFTO5XRkj4hwHKB+nHacttvuZKnGH67ELyoajCc+ef1DkmzmO3P7vFLIuVtVXQ2FPlXVkzCR/+VesyDOpYogHwqyR1BzCCSzxpbZ/aFc/uANg=="
}

HTTP Request

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

request parameters

parameter name required type description
data no string as follows
data.order_id Yes string The unique ID of the merchant transaction (trade_id when withdrawing)
data.user_id yes string user the order belongs to
data.coin_symbol yes string lowercase coin name, subject to the coin provided by the platform
data.address yes string withdrawal address
data.amount yes decimal(20,8) withdrawal amount
data.timestamp yes int current timestamp in second
sign yes string sign the data in data

Response parameter description

parameter name type description
status int 200 passed, 2001 pending review, 5400 failed signature verification, 5401 time less than 30s, 5402 order number does not exist, 5001 platform order_id is different, 5002 amount is wrong, 5003 user uid is wrong, 5004 address is wrong, 5005 currency The symbol is wrong, 5006 order rejection, 5007 other, the description information can be expanded by yourself
msg string state description
data jsonObject
data.is_valid int 1 pass; 2 fail
data.order_id string order number
data.timestamp int current time
sign string signature - the signature of the content of the data field in the response parameter

H5 Deposit

Create Order

$url = "/h5_order/create";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version": "1.0",
    "app_id": "hxgmamt86qk",
    "time": "1663741239",
    "sign": "nR+UEj2oCup5bhcxrQlJ24+jeq3AMHdnC5BfOxaqCKwE6EcPc1020ogHHcZ0sLeqAg==",
    "amount": "0.0013",
    "currency": "usd",
    "merchant_order_id" :"8MrxIV1lJd",
    "return_url" :"http://xxxx.com",
    "lang" :"en"
];
$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 = "/h5_order/create"
data := map[string]string{
    "version": "1.0",
    "app_id": "hxgmamt86qk",
    "time": "1663741239",
    "sign": "nR+UEj2oCup5bhcxrQlJ24+jeq3AMHdnC5BfOxaqCKwE6EcPc1020ogHHcZ0sLeqAg==",
    "amount": "0.0013",
    "currency": "usd",
    "merchant_order_id" :"8MrxIV1lJd",
    "return_url" :"http://xxxx.com",
    "lang" :"en",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmamt86qk",
  "time": "1663741239",
  "sign": "nR+UEj2oCup5bhcxrQlJ24+jeq3AMHdnC5BfOxaqCKwE6EcPc1020ogHHcZ0sLeqAg==",
  "amount": "0.0013",
  "currency": "usd",
  "merchant_order_id" :"8MrxIV1lJd",
  "return_url" :"http://xxxx.com",
  "lang" :"en",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/h5_order/create",
  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("amount","0.0013");
    params.put("currency","usd");
    params.put("merchant_order_id","8MrxIV1lJd");
    params.put("return_url","http://xxxx.com");
    params.put("lang","en");

    try {

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

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

        String res = doPost(baseUrl + "/h5_order/create", 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":"success",
  "data":{
    "order_no":"BCTOTNI57P",
    "merchant_order_id":"8MrxIV1lJd",
    "amount":"0.0013",
    "currency":"usd",
    "status":0,
    "created_at":1665659047,
    "expires_at":1665660847,
    "addresses":[
      {
        "coin":"usdt_erc20",
        "address":"0x1708F6b16D5437730D410D983B8D0235c345433c",
        "amount":"0.0013"
      },
      {
        "coin":"usdt_trc20",
        "address":"TKzqd9hTDgeeQcHf1RXiCuG6vPPFJK8BDP",
        "amount":"0.0013"
      }
    ],
    "return_url":"https://xxx.com/pay",
    "checkout_url":"http://api.xxxx.com/order/BCTOTNI57P?lang=en"
  },
  "date_time":"2022-10-13 19:04:07",
  "time_stamp":1665659047,
  "sign":"C4XPA9jK32xYngKAEsb1KEQDyOFBD29H1MqfQNSl4jnxvT2RQHdiUtf2TMX96O2Pv0AGHv3EJU89l6k1hHa5arQ6LQUIbD8c/WbpXvhaoWYbhnrPhrVXcHMFlP714W6hmURWXkauySq5VzB8iS+Bb2HAv"
}

HTTP Request

POST : /h5_order/create

request parameters

parameter name required type description
common parameter yes string common parameter refers to: signature (sign), version (version), merchant ID (app_id), time (time)
merchant_order_id yes string merchant trade order number
amount yes string order amount
currency no string fiat currency, defaultusd
return_url no string page jump return address
lang no string language “en”, “ko”, “zh”

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject
data.order_no string platform order number
data.merchant_order_id string merchant trade order number
data.amount string order amount
data.currency string fiat currency
data.status int 0 pending payment 1 completed 2 abnormal payment 10 cancelled
data.return_url string page jump return address
data.checkout_url string cashier address
data.expires_time int order expiration time
data.create_time int creation time
data.addresses jsonArray address information
data.addresses.coin string coin name
data.addresses.address string address
data.addresses.amount string amount payable in currency
date_time string Beijing time
time_stamp int response time in seconds
sign string signature - the signature for all participating parameters above

Cancel Order

$url = "/h5_order/cancel";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version": "1.0",
    "app_id": "hxgmamt86qk",
    "time": "1663741239",
    "sign": "nR+UEj2oCup5bhcxrQlJ24+jeq3AMHdnC5BfOxaqCKwE6EcPc1020ogHHcZ0sLeqAg==",
    "order_no": "test123",
];
$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 = "/h5_order/cancel"
data := map[string]string{
    "version": "1.0",
    "app_id": "hxgmamt86qk",
    "time": "1663741239",
    "sign": "nR+UEj2oCup5bhcxrQlJ24+jeq3AMHdnC5BfOxaqCKwE6EcPc1020ogHHcZ0sLeqAg==",
    "order_no": "test123",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmamt86qk",
  "time": "1663741239",
  "sign": "nR+UEj2oCup5bhcxrQlJ24+jeq3AMHdnC5BfOxaqCKwE6EcPc1020ogHHcZ0sLeqAg==",
  "order_no": "test123",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/h5_order/cancel",
  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("order_no","test123");

    try {

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

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

        String res = doPost(baseUrl + "/h5_order/cancel", 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": "success",
  "data": [],
  "date_time": "2020-11-23 16:51:51",
  "time_stamp": 1606121511,
  "sign": "OotOCtyUPfYQFjE+FEPMQQK5PQ2eGJtcvwNBCI0ilTpNn/B9gBtzR+ibmyK00kW/bg=="
}

HTTP Request

POST : /h5_order/cancel

request parameters

parameter name required type description
common parameter yes string common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
order_no yes string platform order number

Response parameter description

Parameter name Type Description
status int status code
msg string status description
data jsonObject empty
date_time string Beijing time
time_stamp int response time in seconds
sign string signature - the signature for all participating parameters above

Order Details

$url = "/h5_order/detail";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version": "1.0",
    "app_id": "hxgmamt86qk",
    "time": "1663741239",
    "sign": "nR+UEj2oCup5bhcxrQlJ24+jeq3AMHdnC5BfOxaqCKwE6EcPc1020ogHHcZ0sLeqAg==",
    "order_no": "JDYFJEEA7T",
];
$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 = "/h5_order/detail"
data := map[string]string{
    "version": "1.0",
    "app_id": "hxgmamt86qk",
    "time": "1663741239",
    "sign": "nR+UEj2oCup5bhcxrQlJ24+jeq3AMHdnC5BfOxaqCKwE6EcPc1020ogHHcZ0sLeqAg==",
    "order_no": "JDYFJEEA7T",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmamt86qk",
  "time": "1663741239",
  "sign": "nR+UEj2oCup5bhcxrQlJ24+jeq3AMHdnC5BfOxaqCKwE6EcPc1020ogHHcZ0sLeqAg==",
  "order_no": "JDYFJEEA7T",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/h5_order/detail",
  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("order_no","JDYFJEEA7T");

    try {

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

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

        String res = doPost(baseUrl + "/h5_order/detail", 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":"success",
  "data":{
    "order_no":"JDYFJEEA7T",
    "merchant_order_id":"8MrxIV1lJd",
    "amount":"0.0013",
    "currency":"usd",
    "status":1,
    "created_at":1664360232,
    "expires_at":1664362032,
    "addresses":[
      {
        "coin":"usdt_erc20",
        "address":"0x1708F6b16D5437730D410D983B8D0235c345433c",
        "amount":"0.0013"
      },
      {
        "coin":"usdt_trc20",
        "address":"TKzqd9hTDgeeQcHf1RXiCuG6vPPFJK8BDP",
        "amount":"0.0013"
      }
    ],
    "payments":[
      {
        "coin":"usdt_trc20",
        "address":"TKzqd9hTDgeeQcHf1RXiCuG6vPPFJK8BDP",
        "txid":"422a7eef6af75960efa3e204fee1e642caf0b7d25dccd2678d6ae4e086733096",
        "amount":"0.0013",
        "confirm_time":1664360357,
        "status":1,
        "check_status":0
      }
    ],
    "return_url":"https://xxx.com/pay"
  },
  "date_time":"2022-10-13 19:24:26",
  "time_stamp":1665660266,
  "sign":"ERROp+Kr46ZjjGlIVcNXT0iEpvh8KCyfJNGax3gA5qdfa4Gw+k8qdKoJl+FYBHQsarlsaush8b5uhjFbbJQc7BxvEi+CvbAVm1CkqBITPZHNNr4B3dDBWkn3Fk0m+OLGvW+JB7ueDKy+rzwaFsHw46CIcFBRAdasfieQRqu9TuO+Y4IpFaROxDoicXQLMN28PReVLxAqwAxkZW16ujnviSOHlHlbO+CIxCrKRqZISnUKY8q9Ej649BtE1s0mFwCd9HJ0Ti5oawHAGvwhcw++aEh2cCKMNJ1ICZVqcqf5B6Xt+K2a/M7ifqHORRKjO4GkEWyPVLY27aA/v9329tAeFw=="
}

HTTP Request

POST : /h5_order/detail

request parameters

parameter name required type description
common parameter yes string common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
order_no yes string platform order number

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject
data.order_no string platform order number
data.merchant_order_id string merchant trade order number
data.amount string order amount
data.currency string fiat currency
data.status int 0 pending payment 1 completed 2 abnormal payment 10 cancelled
data.return_url string return address
data.expires_time int order expiration time
data.create_time int creation time
data.addresses jsonObject
data.addresses.coin string coin name
data.addresses.address string address
data.addresses.amount string amount payable in currency
data.payments jsonObject
data.payments.coin string payment currency
data.payments.address string payment address
data.payments.txid string on-chain txid
data.payments.amount string payment amount
data.payments.confirm_time int verify the time
data.payments.status int 0 pending payment 1 completed 2 abnormal payment
data.payments.check_status int Abnormal reason: 1001 The payment amount does not match 1002 Repeated payment for the completed order
date_time string Beijing time
time_stamp int response time in seconds
sign string signature - the signature for all participating parameters above

H5 Deposit result callback notification

$url = "The specific callback address is provided by the merchant to the platform side";
$header = [
  'Content-Type:application/json',
];
$params = [
    "data":[
        "order_no":"2020010211153423123456",
        "merchant_order_id":"ESIOqIfhKnY",
        "status":1,
        "payments":[
            [
              "address":"0x038B8E7406dED2Be112B6c7E4681Df5316957cad",
              "coin":"eth",
              "txid":"0x038B8E7406dED2Be112B6c7E4681Df5316957cad",
              "amount":"0.1"
              "confirm_time":"15612312112"
              "check_code":"0",
            ],
        ]
    ],
   "sign": "ywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
];
$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 = "The specific callback address is provided by the merchant to the platform side"
    data := map[string]interface{}{
        "data": map[string]interface{}{
            "order_no":          "IGQUNC2WHT",
            "merchant_order_id": "ESIOqIfhKnY",
            "status":            1,
            "payments": []interface{}{
                map[string]interface{}{
                    "address":      "0x038B8E7406dED2Be112B6c7E4681Df5316957cad",
                    "coin":         "eth",
                    "txid":         "0x038B8E7406dED2Be112B6c7E4681Df5316957cad",
                    "amount":       "1",
                    "confirm_time": 15612312112,
                    "check_code":   1001,
                },
            },
        },
        "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
    }
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": {
  "order_no":          "IGQUNC2WHT",
    "merchant_order_id": "ESIOqIfhKnY",
    "status":            1,
    "payments": [
    {
      "address":      "0x038B8E7406dED2Be112B6c7E4681Df5316957cad",
        "coin":         "eth",
        "txid":         "0x038B8E7406dED2Be112B6c7E4681Df5316957cad",
        "amount":       "1",
        "confirm_time": 15612312112,
        "check_code":   1001,
    },
  ],
},
"sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "The specific callback address is provided by the merchant to the platform side",
  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("order_no", "IGQUNC2WHT");
    data.put("merchant_order_id", "ESIOqIfhKnY");
    data.put("status", 1);
    List<Object> payments = new ArrayList<>();
    payments.add(new HashMap<String, Object>() {{
        put("address", "0x038B8E7406dED2Be112B6c7E4681Df5316957cad");
        put("coin", "eth");
        put("txid", "0xttt");
        put("amount", "1");
        put("confirm_time", 15612312112L);
        put("check_code", 1001);
    }});
    data.put("payments", payments);

    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/h5order/callback", gson.toJson(params));
//            if (null == res) {
//                throw new RuntimeException("http error");
//            }

        // mock response from shop callback API
        {
            res = """
                    {
                      "status":200,
                      "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
                      "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,
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "data":{
    "success_data":"success"
  }
}

H5 Deposit result notification (success/failure), a platform initiates a request, and the merchant responds

HTTP Request

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

request parameters

parameter name required type description
data no string callback notification carries data structure
data.order_no yes string platform order number
data.merchant_order_id yes string merchant trade order number
data.status yes int 0 pending payment 1 completed 2 abnormal payment 10 cancelled
data.payments yes jsonArray payment information
data.payments.coin yes string payment currency
data.payments.address yes string payment address
data.payments.txid yes string on-chain txid
data.payments.amount yes string payment amount
data.payments.confirm_time yes int verify the time
data.payments.check_code yes int Abnormal reason: 1001 The payment amount does not match 1002 Repeated payment for the completed order
sign yes string sign the data in data

Response parameter description

parameter name required type description
status yes int status code
data yes jsonObject
data.success_data yes sring success
sign yes string signature - the signature for all participating parameters above

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

Other

Coin query

$url = "http://api.xxxx.com/shopapi/coin/list";
$header = [
  'Content-Type:application/json',
];
$params = [
    "app_id" => "hxgmau9imt86qky9",
    "version" => "1.0",
    "time" => 1579004943,
    "coin" => "eth",
    "chain" => "eth",
    "page" => 1,
    "page_size" => 20,
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/coin/list"
data := map[string]string{
    "version": "1.0",
    "app_id":"hxgmau9imt86qky9",
    "time":"1579004943",
    "coin":"eth",
    "chain":"eth",
    "page":"1",
    "page_size":"20",
    "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 = {
  "version": "1.0",
  "app_id":"hxgmau9imt86qky9",
  "time":"1579004943",
  "coin":"eth",
  "chain":"eth",
  "page":"1",
  "page_size":"20",
  "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/coin/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) {

    // 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("coin","eth");
    params.put("chain","eth");
    params.put("page","1");
    params.put("page_size","20");

    try {

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

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

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

Example of return result:

{
  "status": 200,
  "msg": "Processing successful",
  "data": {
    "page": 1,
    "max_page": 2,
    "count": 20,
    "list": [
      {
        "coin": "eth",
        "chain": "eth",
        "contract_address": "",
        "status": "1",
        "open_in": 1,
        "open_out": 1,
        "open_address": "1",
        "confirm_count": "6",
        "min_transfer_in_amount": "0.00000001",
        "min_transfer_out_amount": "0"
      },
      {
        "coin": "hc",
        "chain": "hc",
        "contract_address": "",
        "status": "1",
        "open_in": 1,
        "open_out": 1,
        "open_address": "1",
        "confirm_count": "1",
        "min_transfer_in_amount": "0",
        "min_transfer_out_amount": "0.0001"
      },
      ...
    ]
  },
  "date_time": "2020-08-04 15:19:56",
  "time_stamp": 1596525596,
  "sign": "OD3xNGUDAsR0G9IXH6JIAJIrzU5rftHQLQT9qSe5qBqO9hDp+LXE2vJ5AAMqZoX6YNeeJy0tQUBM6aF/OIl6czKr520Y6xOhYvagw5Ip3iyOARZordlUhGR+KmJq3BFarxsiTL01bWQOPIz9v3CY4s0xgkl/nL6ZeNn9woDqw50vaDPSNC/tB9Qb/yFZdOI5npFipTRvxGFh2/EVH+1STlDjWyVPAnri26YEbob3xtSkCZP6894ScRW8ps/+7EW8FCKlhg/39XuysyNtMKt9rT5+yHzuDe/1oJZ9r5zTV8pDs2D3SjPWVLT1naMLhNFH0TLGUcgOneNjG6aMzWb9WA=="
}

Coin related api for the merchant

HTTP Request

POST: /coin/list

request parameters

parameter name required type description
common parameter yes string common parameter refers to: signature (sign), version (version), merchant ID (app_id), time (time)
coin no varchar coin name (eg: eth)
chain No varchar Main chain name (query main chain and its tokens, such as: eth)
page no int, default is 1 1<= N <=Max, N>Max ? N=Max ; N<1 ? N=1
page_size no int number of pages per page (20 ~ 500), default 20

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject For details, see "data details" below.
data.page int page number
data.max_page int total number of pages
data.count int number of records on the current page
data.list jsonArray specific record
data.list.coin string currency
data.list.chain string main chain name
data.list.status int status: 1 on; 0 off
data.list.open_in int deposit status: 1 on; 0 off
data.list.open_out int Withdrawal status: 1 on; 0 off
data.list.open_address int Assign address status: 1 on; 0 off
data.list.confirm_count int deposit confirmation count (default 6, the actual credit is subject to the order status)
data.list.min_transfer_in_amount string Minimum transfer amount (0 means no limit)
data.list.min_transfer_out_amount string Minimum withdrawal amount (0 means no limit)
data.list.contract_address string The contract address of a contract coin.
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Coin exchange rate

$url = "http://api.xxxx.com/shopapi/rate/index";
$header = [
  'Content-Type:application/json',
];
$params = [
    "app_id" => "hxgmau9imt86qky9",
    "version" => "1.0",
    "time" => 1579004943,
    "source_coin" => "eth",
    "target_coin" => "usdt",
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/rate/index"
data := map[string]string{
    "app_id":"hxgmau9imt86qky9",
    "version":"1.0",
    "time":"1579004943",
    "source_coin":"eth",
    "target_coin":"usdt",
    "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 = {
  "app_id":"hxgmau9imt86qky9",
  "version":"1.0",
  "time":"1579004943",
  "source_coin":"eth",
  "target_coin":"usdt",
  "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/rate/index",
  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("source_coin","eth");
    params.put("target_coin","usdt");

    try {

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

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

        String res = doPost(baseUrl + "/rate/index", 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":"Request succeeded",
  "data":{
    "rate":"19490.64944834"
  },
  "date_time":"2020-01-14 00:50:27",
  "sign":"ib1gqr0E0gJ02yo3InXKcKGaPqIp+r1izMego+KMRvE0B4ZdkFGrLmOtxGStUBibGVMzJRGWppKyU4PzcK877AOEvQlSFiUI+hDL1z8WaZsWD3r3ykbPzU0uWo4U+6WQTpOEo1gJ/N2FlAgwgzJsd
}

The exchange rate of various coins corresponding to usdt (this is use for coin price calculation, please go to the coin exchange rate API for coin exchange). Currently supported (btc eth hc eos trx xrp)

HTTP Request

POST: /rate/index

request parameters

parameter name required type description
common parameter yes string common parameter refers to: signature (sign), version (version), merchant ID (app_id), time (time)
source_coin yes string exchange coin
target_coin yes string target coin currently only supports usdt

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject For details, see "data details" below.
data.rate string exchange rate such as 1btc= 19490.64944834 usdt
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Coin to fiat currency rate

$url = "http://api.xxxx.com/shopapi/rate/fiat_currency";
$header = [
  'Content-Type:application/json',
];
$params = [
    "app_id" => "hxgmau9imt86qky9",
    "version" => "1.0",
    "time" => 1579004943,
    "source_coin" => "eth",
    "target_currency" => "usd",
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/rate/fiat_currency"
data := map[string]string{
    "app_id":"hxgmau9imt86qky9",
    "version":"1.0",
    "time":"1579004943",
    "source_coin":"eth",
    "target_currency":"usd",
    "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 = {
  "app_id":"hxgmau9imt86qky9",
  "version":"1.0",
  "time":"1579004943",
  "source_coin":"eth",
  "target_currency":"usd",
  "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/rate/fiat_currency",
  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("source_coin","eth");
    params.put("target_currency","usd");

    try {

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

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

        String res = doPost(baseUrl + "/rate/fiat_currency", 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":{
    "rate":"2166.81",
    "source_coin": "eth",
    "target_currency": "usd"
  },
  "date_time":"2020-01-14 00:50:27",
  "sign":"ib1gqr0E0gJ02yo3InXKcKGaPqIp+r1izMego+KMRvE0B4ZdkFGrLmOtxGStUBibGVMzJRGWppKyU4PzcK877AOEvQlSFiUI+hDL1z8WaZsWD3r3ykbPzU0uWo4U+6WQTpOEo1gJ/N2zJsdTRcMVgJMSC7LEAg7oib4se2NPFlw="
}

HTTP Request

POST: /rate/fiat_currency

request parameters

parameter name required type description
common parameter yes string common parameter refers to: signature (sign), version (version), merchant ID (app_id), time (time)
source_coin yes string source coin
target_currency yes string target fiat currency,default value usd。support usd,cny,aed,sgd,jpy,krw.

Response parameter description

parameter name type description
status int status code
msg string state description
data jsonObject For details, see "data details" below.
data.rate string coin to fiat currency rate. eg: 1eth= 2166.81 usd
data.source_coin string source coin
data.target_currency string target fiat currency
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Collection fee calculation

$url = "http://api.xxxx.com/shopapi/balance/transactionFee";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" => "1.0",
    "app_id" => "hxgmau9imt86qky9",
    "time" => "1578736053",
    "sign" =>  "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
    "coin" =>  "eth"
];
$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/balance/transactionFee"
data := map[string]string{
    "version": "1.0",
    "app_id": "hxgmau9imt86qky9",
    "time": "1578736053",
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
    "coin": "eth",
}
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 = {
    "version": "1.0",
    "app_id": "hxgmau9imt86qky9",
    "time": "1578736053",
    "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
    "coin": "eth",
};
let options = {
    hostname: 'api.xxxx.com',
    port: 80,
    path: '/shopapi/balance/transactionFee',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    }
};
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("coin","eth");

    try {

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

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

        String res = doPost(baseUrl + "/balance/transactionFee", 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":"Request successful",
  "data":{
    "fee":"0.01386",
    "coin":"eth"
  },
  "date_time":"2020-10-20 15:58:53",
  "time_stamp":1603180733,

}

HTTP Request

POST: /balance/transactionFee

request parameters

Parameter Name Required Type Description
common parameter Yes JSON common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
coin Yes string Coin name is provided by the platform

Response parameter description

parameter name type description
status int status code
msg string status description
data jsonObject
data.fee string Fee
data.coin string Coin name (unit of handling fee)
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Withdrawal gas fee estimate query

$url = "http://api.xxxx.com/shopapi/transfer/transactionFee";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" =>  "1.0",
    "app_id" =>  "hxgmau9imt86qky9",
    "time" =>  "1578736053",
    "coin" =>  "eth",
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/transfer/transactionFee"
data := map[string]string{
   "version": "1.0",
   "app_id": "hxgmau9imt86qky9",
   "time": "1578736053",
   "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
   "coin": "eth",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
  "coin": "eth",
};
let options = {
    hostname: 'api.xxxx.com',
    port: 80,
    path: '/shopapi/transfer/transactionFee',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    }
};
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("coin","eth");

    try {

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

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

        String res = doPost(baseUrl + "/transfer/transactionFee", 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": "Request succeeded",
  "data": [
    {
      "coin": "fil", //coin name
      "fee": "0.00379379", //Current coin (coin) transaction fee
      "unit": "fil"//Unit of handling fee
    }, {
      "coin": "eth",
      "fee": "0.000231",
      "unit": "eth"
    }, {
      "coin": "mof",
      "fee": "0.00000005",
      "unit": "eth"
    }
  ],
  "date_time": "2021-06-17 16:58:52",
  "time_stamp": 1623920332,

}

Withdrawal fee estimate API, returns the fee for withdrawal of the supported currency. (Currently only supports eth and its contract, fil)

HTTP Request

POST: /transfer/transactionFee

request parameters

Parameter Name Required Type Description
common parameter yes string common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
coin No string The coin name is provided by the platform

Response parameter description

parameter name type description
status int status code
msg string status description
data jsonObject
data.coin sring coin name
data.fee sring handling fee
data.unit sring Handling fee unit
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Refund order list

$url = "http://api.xxxx.com/shopapi/refund/list";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" => "1.0",
    "app_id" =>  "hxgmau9imt86qky9",
    "time" =>  "1578736053",
    "page" =>  1,
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/refund/list"
data := map[string]string{
     "version": "1.0",
     "app_id": "hxgmau9imt86qky9",
     "time": "1578736053",
     "page": "1",
     "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "page": "1",
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/refund/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("page", "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 + "/refund/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");
}

Example of return result:

{
  "status": 200,
  "msg": "success",
  "data": {
    "page": 1,
    "max_page": 1,
    "count": 1,
    "list": [{
      "block_number": 69471385,
      "block_time": 1742882698,
      "coin": "pol",
      "contract": "pol",
      "contract_address": "",
      "created_at": 1742882633,
      "creator": "CS007",
      "end_time": 1742882749,
      "from_address": "0xDCE6e20FfC7b651Cd5d7ad922b8B77691E999dB2",
      "gas_fee": "0.00062635",
      "method": 0,
      "order_id": "20250101123456",
      "receive_amount": "0.03",
      "receive_order_id": "",
      "receive_txid": "0xb6042b5eac8a9b7fbc538ad9564b2ada7d59cbc39a462d2da784494562556590",
      "refund_amount": "0.029",
      "remark": "",
      "status": 1,
      "to_address": "0xb4bd96957e7b078566cd1e40de2c131d1f4374e4",
      "txid": "0xc3b148c2ede826bbadf68682486fce8fabe5a5c53e3973c45b9e5578787ff359",
      "type": 1
    }]
  },
  "date_time": "2022-07-22 18:36:36",
  "time_stamp": 1658486196,
  "sign": "uuYWvmoMqM5xh7aTcxspJmW78y8op5BBjYXp0XoqcqFXe+HrSGzxN2Ls6LA7SlfsNndCtS4AX1/J+2o1MWZw/HFVfRqtxu02AEfWhM5ZSiJfEtO8f47H2/EGcsKw/eK8nxOnYAyAKwG6Ia6L4KgYIXLwsGt6Dt0VYWADu+vEQEes83/c6+Tc8QdqpdnLbs2XXXkYkl5eijoja+QEMaENbx+DHxnsVZV0iRK5FcSQH9PdOIpWmC944BA2v0tnPQWb6WDnOTsw5xoVKiL57WGIeOaxepvjo6poi1a/+HYrowT4IcejZZHi9YW0iM4eNm8MPK0tloAQ8GWY7kVs9uEwOA=="
}

HTTP Request

POST: /refund/list

request parameters

Parameter Name Required Type Description
common parameter yes string common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
page no int default is 1, 1<= N <=Max, N>Max ? N=Max ; N<1 ? N=1
page_size no int number of pages per page (20 ~ 500), default 20
sort_num no int default list sorting is ascanding order of record creation time ( 1 positive order; 2 reverse order)
status no string status of refund order, default return all statuses, 0 pending; 1 succeeded; 2 failed; 5 to be audit; 6 audit rejected; 10 wait platform audit; 11 platform rejected; 25 refunding; 26 lacking gas fee;
start_time no int start time (creation time) format: timestamp
end_time no int end time (creation time) format: timestamp
contract no string main chain name
coin no string coin name
receive_order_id no string related recharge order_id
receive_txid no string related recharge tx hash
txid no string the refund order tx hash
from_address no string transaction from address ,as well the recharge user address
to_address no string transaction from address, as well the cold wallet address, or the recharge transaction from address

Response parameter description

parameter name type description
status int status code
msg string status description
data jsonObject
data.page int page number
data.count int record total count
data.list jsonArray
data.list.block_number int refund transaction block number
data.list.block_time int refund transaction block time
data.list.coin string refund coin name
data.list.contract string refund chain name
data.list.contract_address string refund coin token address
data.list.created_at int create time
data.list.creator string refund order creator
data.list.end_time int end time
data.list.from_address string transaction from address ,as well the recharge user address
data.list.gas_fee string transaction gas fee
data.list.method int refund method, 0: refund back to the recharge from address,1: cold wallet address
data.list.order_id string refund order_id
data.list.receive_amount string related recharge transaction amount
data.list.receive_order_id string related recharge order_id
data.list.receive_txid string related recharge transaction hash
data.list.refund_amount string actual refund amount
data.list.remark string remark
data.list.status int status of refund order, default return all statuses, 0 pending; 1 succeeded; 2 failed; 5 to be audit; 6 audit rejected; 10 wait platform audit; 11 platform rejected; 25 refunding; 26 lacking gas fee;
data.list.to_address string transaction from address, as well the cold wallet address, or the recharge transaction from address
data.list.txid string related recharge tx hash
data.list.type int refund type, 0: relate recharge 1:supported coin with out recharge 2: not support coin 3: not support chain
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Check whether the number of currencies recorded in its ledger is consistent with the data in its on-chain wallet

$url = "http://api.xxxx.com/shopapi/reconcile/balances";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" => "1.0",
    "app_id" =>  "hxgmau9imt86qky9",
    "time" =>  "1578736053",
    "list" =>  [
        [
            "chain" => "eth",
            "coin" => "usdt_erc20",
            "ledger_balance" => "100"
        ],
        [
            "chain" => "btc",
            "coin" => "btc",
            "ledger_balance" => "10"
        ]
    ],
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/reconcile/balances"
data := map[string]string{
     "version": "1.0",
     "app_id": "hxgmau9imt86qky9",
     "time": "1578736053",
     "list": [
        {
            "chain": "eth",
            "coin": "usdt_erc20",
            "ledger_balance": "100"
        },
        {
            "chain": "btc",
            "coin": "btc",
            "ledger_balance": "10"
        }
    ],
     "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "list": [
    {
      "chain": "eth",
      "coin": "usdt_erc20",
      "ledger_balance": "100"
    },
    {
      "chain": "btc",
      "coin": "btc",
      "ledger_balance": "10"
    }
  ],
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/reconcile/balances",
  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<Map<String, String>> list = new ArrayList<>();
    Map<String, String> item1 = new HashMap<>();
    item1.put("chain", "eth");
    item1.put("coin", "usdt_erc20");
    item1.put("ledger_balance", "100");
    list.add(item1);
    params.put("list", list);

    try {

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

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

        String res = doPost(baseUrl + "/reconcile/balances", 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": {
    "list": [
      {
        "chain": "eth",
        "coin": "usdt_erc20",
        "ledger_balance": "100",
        "onchain_balance": "100",
        "matched": true,
        "note": "",
        "difference": "0"
      },
      {
        "chain": "btc",
        "coin": "btc",
        "ledger_balance": "10",
        "onchain_balance": "9",
        "matched": false,
        "note": "",
        "difference": "-1"
      }
    ]
  },
  "date_time": "2022-07-22 18:36:36",
  "time_stamp": 1658486196,
  "sign": "uuYWvmoMqM5xh7aTcxspJmW78y8op5BBjYXp0XoqcqFXe+HrSGzxN2Ls6LA7SlfsNndCtS4AX1/J+2o1MWZw/HFVfRqtxu02AEfWhM5ZSiJfEtO8f47H2/EGcsKw/eK8nxOnYAyAKwG6Ia6L4KgYIXLwsGt6Dt0VYWADu+vEQEes83/c6+Tc8QdqpdnLbs2XXXkYkl5eijoja+QEMaENbx+DHxnsVZV0iRK5FcSQH9PdOIpWmC944BA2v0tnPQWb6WDnOTsw5xoVKiL57WGIeOaxepvjo6poi1a/+HYrowT4IcejZZHi9YW0iM4eNm8MPK0tloAQ8GWY7kVs9uEwOA=="
}

HTTP Request

POST: /reconcile/balances

request parameters

Parameter Name Required Type Description
common parameter yes string common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
list.chain no string chain name
list.coin yes string token coin name
list.ledger_balance no string ledger balance

Response parameter description

parameter name type description
status int status
msg string message
data jsonObject data
data.list jsonArray list
data.list.chain string chain name
data.list.coin string coin name
data.list.ledger_balance string ledger balance
data.list.onchain_balance string onchain balance
data.list.difference string balance difference
data.list.matched bool is balance matched
data.list.note string note
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Check whether the number of coins in an account address is consistent with the number on the chain

$url = "http://api.xxxx.com/shopapi/reconcile/addressBalance";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" => "1.0",
    "app_id" =>  "hxgmau9imt86qky9",
    "time" =>  "1578736053",
    "list" =>  [
        [
            "chain" => "eth",
            "coin" => "usdt_erc20",
            "address" => "0x111...2222",
            "ledger_balance" => "100"
        ],
        [
            "chain" => "btc",
            "coin" => "btc",
            "address" => "1bcd...zxc",
            "ledger_balance" => "10"
        ]
    ],
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/reconcile/addressBalance"
data := map[string]string{
     "version": "1.0",
     "app_id": "hxgmau9imt86qky9",
     "time": "1578736053",
     "list": [
        {
            "chain": "eth",
            "coin": "usdt_erc20",
            "address": "0x111...2222",
            "ledger_amount": "100"
        },
        {
            "chain": "btc",
            "coin": "btc",
            "address": "1bcd...zxc",
            "ledger_amount": "10",
            "difference": "0"
        }
    ],
     "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "list": [
    {
      "chain": "eth",
      "coin": "usdt_erc20",
      "address": "0x111...2222",
      "ledger_amount": "100"
    },
    {
      "chain": "btc",
      "coin": "btc",
      "address": "1bcd...zxc",
      "ledger_amount": "10",
      "difference": "0"
    }
  ],
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/reconcile/addressBalance",
  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<Map<String, String>> list = new ArrayList<>();
    Map<String, String> item1 = new HashMap<>();
    item1.put("chain", "eth");
    item1.put("coin", "usdt_erc20");
    item1.put("address", "0x111...2222");
    item1.put("ledger_balance", "100");
    list.add(item1);
    params.put("list", list);

    try {

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

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

        String res = doPost(baseUrl + "/reconcile/addressBalance", 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": {
    "list": [
      {
        "chain": "eth",
        "coin": "usdt_erc20",
        "address": "0x111...2222",
        "matched": true,
        "ledger_amount": "100",
        "onchain_balance": "100",
        "note": "",
        "difference": "0"
      },
      {
        "chain": "btc",
        "coin": "btc",
        "address": "1bcd...zxc",
        "matched": false,
        "ledger_amount": "10",
        "onchain_balance": "9",
        "note": "",
        "difference": "-1"
      }
    ]
  },
  "date_time": "2022-07-22 18:36:36",
  "time_stamp": 1658486196,
  "sign": "uuYWvmoMqM5xh7aTcxspJmW78y8op5BBjYXp0XoqcqFXe+HrSGzxN2Ls6LA7SlfsNndCtS4AX1/J+2o1MWZw/HFVfRqtxu02AEfWhM5ZSiJfEtO8f47H2/EGcsKw/eK8nxOnYAyAKwG6Ia6L4KgYIXLwsGt6Dt0VYWADu+vEQEes83/c6+Tc8QdqpdnLbs2XXXkYkl5eijoja+QEMaENbx+DHxnsVZV0iRK5FcSQH9PdOIpWmC944BA2v0tnPQWb6WDnOTsw5xoVKiL57WGIeOaxepvjo6poi1a/+HYrowT4IcejZZHi9YW0iM4eNm8MPK0tloAQ8GWY7kVs9uEwOA=="
}

HTTP Request

POST: /reconcile/addressBalance

request parameters

Parameter Name Required Type Description
common parameter yes string common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
list.chain no string chain name
list.coin yes string token coin name
list.ledger_balance no string ledger balance
list.address yes string chain account address

Response parameter description

parameter name type description
status int status
msg string message
data jsonObject data
data.list jsonArray list
data.list.chain string chain name
data.list.coin string coin name
data.list.address string chain account address
data.list.ledger_balance string ledger balance
data.list.onchain_balance string onchain balance
data.list.difference string balance difference
data.list.matched bool is balance matched
data.list.note string note
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Check whether the withdrawal data recorded in the internal ledger is consistent with the data on its wallet chain

$url = "http://api.xxxx.com/shopapi/reconcile/withdrawal";
$header = [
  'Content-Type:application/json',
];
$params = [
    "version" => "1.0",
    "app_id" =>  "hxgmau9imt86qky9",
    "time" =>  "1578736053",
    "list" =>  [
        [
            "trade_id" => "W20250001",
            "chain" => "eth",
            "coin" => "usdt_erc20",
            "from_address" => "0x111...222",
            "to_address" => "0x111...333",
            "txid" => "0x123...321",
            "ledger_amount" => "100"
        ],
        [
            "trade_id" => "W20250002",
            "chain" => "btc",
            "coin" => "btc",
            "from_address" => "bc1q...3cyx",
            "to_address" => "bc1q...0cur",
            "txid" => "dd8a...7ff8",
            "ledger_amount" => "100"
        ]
    ],
    "sign" => "dLtK+uiPcnxt2ACKMbBqQ6wI5ttAvesOHzK5ybVID1R6hqYPDTkagl7Tsjr5iLJafehcSLTZyJLtCRI8O2CtIWQUUroGXBneHZC486NUi/4FMOQs0FaAgm17pWlbhX5/96cWXXXMVeoe3IZFKaFNYSWaA14v3RcdDU6QDE/9ixGiSJ0DIxm9NKA0+RkbIFbyYeuFn8d63OcjmUhv7tsOE6rKCc3Q2yi7Qe9i6BNAQFYMFATztb18MsxsBHKUxNqklqyVnl0ofETAHmQhfOHLmungOJQnOqAAuwfmRtg50Qci5F+R2mXeqjmIXko/u3E+DLYW1ygDBp3afKZmU4PwmA=="
];
$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/reconcile/withdrawal"
data := map[string]string{
     "version": "1.0",
     "app_id": "hxgmau9imt86qky9",
     "time": "1578736053",
     "list": [
        {
            "trade_id": "W20250001",
            "chain": "eth",
            "coin": "usdt_erc20",
            "from_address": "0x111...222",
            "to_address": "0x111...333",
            "txid": "0x123...321",
            "ledger_amount": "100"
        },
        {
            "trade_id": "W20250002",
            "chain": "btc",
            "coin": "btc",
            "from_address": "bc1q...3cyx",
            "to_address": "bc1q...0cur",
            "txid": "dd8a...7ff8",
            "ledger_amount": "100"
        }
    ],
     "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
}
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 = {
  "version": "1.0",
  "app_id": "hxgmau9imt86qky9",
  "time": "1578736053",
  "list": [
    {
      "trade_id": "W20250001",
      "chain": "eth",
      "coin": "usdt_erc20",
      "from_address": "0x111...222",
      "to_address": "0x111...333",
      "txid": "0x123...321",
      "ledger_amount": "100"
    },
    {
      "trade_id": "W20250002",
      "chain": "btc",
      "coin": "btc",
      "from_address": "bc1q...3cyx",
      "to_address": "bc1q...0cur",
      "txid": "dd8a...7ff8",
      "ledger_amount": "100"
    }
  ],
  "sign": "OTA8utI8y8G93p7RPCyb4qIilFQ0B4Aq4iUjhaXWK9m2kgektqlHOASDKXT2VE7NPNysrGycYlVfjDR2WGZn1G66phHo3qa9CcCNpG9klOBEuBEMjiVbb/d8AXcxEzvQr9OCwNsikyxonyzLiY/lsNHeGm9cC5eRvlNLdUSVBipH+ajPd0lDHCayZPs1eCMfbm/xnf8e2lfy6z0UPOpHGfyX/0+hz99Ir5Xnx+0sBBzyZZJxKm4ROid5aDv/9m9guILpURae+Yw/IrkYF4uAKGX+/44cBvtTRQSdX76CAOBSiywZa6BAgDYBLRtkAPM+i+vwNzFBovqHUvI+4Ponaw==",
};
let POST_OPTIONS = {
  port: 80,
  host: "api.xxxx.com",
  path: "/shopapi/reconcile/withdrawal",
  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<Map<String, String>> list = new ArrayList<>();
    Map<String, String> item1 = new HashMap<>();
    item1.put("trade_id", "W20250001");
    item1.put("chain", "eth");
    item1.put("coin", "usdt_erc20");
    item1.put("from_address", "0x111...2222");
    item1.put("to_address", "0x111...333");
    item1.put("ledger_balance", "100");
    list.add(item1);
    params.put("list", list);

    try {

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

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

        String res = doPost(baseUrl + "/reconcile/withdrawal", 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": {
    "list": [
      {
        "trade_id": "W20250001",
        "chain": "eth",
        "coin": "usdt_erc20",
        "from_address": "0x111...222",
        "to_address": "0x111...333",
        "txid": "0x123...321",
        "matched": true,
        "ledger_amount": "100.00",
        "onchain_amount": "100.00",
        "difference": "0",
        "note": ""
      },
      {
        "trade_id": "W20250002",
        "chain": "btc",
        "coin": "btc",
        "from_address": "bc1q...3cyx",
        "to_address": "bc1q...0cur",
        "txid": "dd8a...7ff8",
        "matched": false,
        "onchain_amount": "99.12",
        "ledger_amount": "100.00",
        "difference": "-0.88",
        "note": ""
      }
    ]
  },
  "date_time": "2022-07-22 18:36:36",
  "time_stamp": 1658486196,
  "sign": "uuYWvmoMqM5xh7aTcxspJmW78y8op5BBjYXp0XoqcqFXe+HrSGzxN2Ls6LA7SlfsNndCtS4AX1/J+2o1MWZw/HFVfRqtxu02AEfWhM5ZSiJfEtO8f47H2/EGcsKw/eK8nxOnYAyAKwG6Ia6L4KgYIXLwsGt6Dt0VYWADu+vEQEes83/c6+Tc8QdqpdnLbs2XXXkYkl5eijoja+QEMaENbx+DHxnsVZV0iRK5FcSQH9PdOIpWmC944BA2v0tnPQWb6WDnOTsw5xoVKiL57WGIeOaxepvjo6poi1a/+HYrowT4IcejZZHi9YW0iM4eNm8MPK0tloAQ8GWY7kVs9uEwOA=="
}

HTTP Request

POST: /reconcile/withdrawal

request parameters

Parameter Name Required Type Description
common parameter yes string common parameter refer to: signature (sign), version (version), merchant ID (app_id), time (time)
list.trade_id yes string merchant withdraw order no
list.chain no string chain name
list.coin no string coin name
list.ledger_amount no string withdraw amount
list.from_address no string withdraw from address
list.to_address no string withdraw to address
list.txid no string transaction hash

Response parameter description

parameter name type description
status int status
msg string message
data jsonObject data
data.list jsonArray list
data.list.trade_id string merchant withdraw order no
data.list.chain string chain name
data.list.coin string coin name
data.list.from_address string withdraw from address
data.list.to_address string withdraw to address
data.list.ledger_amount string withdraw ledger amount
data.list.onchain_amount string withdraw onchain amount
data.list.difference string amount difference
data.list.matched bool is amount matched
data.list.note string note
date_time string response time
time_stamp int unix timestamp in second
sign string signature

Response status code

Status Code Meaning Remarks
200 Request has succeeded
500 Request failed
501 Parameter error
502 Common parameter error
503 Invalid app_id
504 Invalid Merchant
505 Bad Signature
506 Data does not exist
507 System maintenance, service suspended
520 Coin is required
521 Address is required
522 User ID is required
523 Address does not exist
524 This address has already been assigned to another user and cannot be reassigned
525 The user id has already been assigned an address and cannot be reassigned
526 Eos and its token memo parameters are required, the value can be empty
527 The combination of coin and contract address does not exist
528 User does not exist
529 Coin does not exist
530 Rate limit exceeded, please try again later
533 Malformed main chain name
534 Wrong order number
535 Abnormal exchange rate
536 The merchant has not configured coin exchange, please contact the platform administrator to activate
537 Merchant review failed
538 The name of the exchange target coin is required
539 Exchange coin name is required
540 Malformed exchange target coin name
541 Malformed exchange target coin name
542 malformed user_id
543 Address format error
544 Txid format error
545 The format of the coin name is incorrect
546 Amount exceeded maximum threshold value
547 Amount up to 8 decimal places
548 The transfer address is not a valid address
549 The transfer amount should be greater than the minimum transfer amount %s
550 Daily rate limit exceeded, please contact customer service to increase the limit
551 Please use up allocated address before request a new address
552 Insufficient address or failed to get address
553 The transfer amount should be greater than 0
554 Insufficient account balance
555 The transaction ID cannot be empty and cannot be larger than 32 bits
556 Duplicate submissions
557 The transaction was not found
558 Under review
559 Transferring
560 Cancel
561 Failed to transfer
562 The coin is not supported or the coin is not the main chain coin
563 The ip is wrong, please contact the administrator to deal with it
564 Bad IP
565 This coin is not supported
566 IP rate limit exceeded
567 Address creation is off
568 The withdrawal status is closed and cannot be withdrawn
569 Abnormal withdrawal data, transfer failed
570 The merchant has not opened the key setting
571 Wrong merchant key version number
572 The refund_txid format is incorrect
573 Refund_txid is required
574 The refund_txid does not exist
575 Refund for the refund_txid has not been received
576 Exchange transaction does not exist
577 Redemption is successful, no refunds
578 During the exchange transaction, no refund is allowed
579 The merchant has not configured a wallet address, please contact the administrator
580 Cancel Order Wallet Layer Cancel Order
581 Query for transaction fee for this coin is not supported
582 Please configure hyperpay shared wallet
583 Type Error
584 The exchange coin is not supported
585 The exchange trading pair is not supported
586 The exchange rate for to coin currently only supports usdt