Sign - BCEX-TECHNOLOGY-LIMITED/API_KR_Docs GitHub Wiki

sign ์ƒ์„ฑ

ํŒŒ๋ผ๋ฏธํ„ฐ ํ•ญ๋ชฉ์„ASCII ์ˆœ์„œ๋กœ ์ •๋ ฌํ•˜๊ณ , json ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด sign ์ƒ์„ฑ ํ›„, sign์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ Base64, URL ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž์‚ฐ์ž”๊ณ  ์กฐํšŒ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ ์š”์ฒญ๏ผš

page=1
size=10
api_key=eb4f25dd532c14cee5e9b0301c8d4671

ASCII ์ˆœ์„œ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •๋ ฌ๏ผš

api_key=eb4f25dd532c14cee5e9b0301c8d4671
page=1
size=10

json ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๏ผš

{"api_key":"eb4f25dd532c14cee5e9b0301c8d4671","page":"1","size":"10"}

Sign ์—ฐ์‚ฐ์„ ํ•˜๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฌธ์ž์—ด๊ณผ ๊ฐœ์ธํ‚ค๋ฅผ ์•”ํ˜ธํ•จ์ˆ˜์— ์ „๋‹ฌํ•œ ํ›„, sha1์—ฐ์‚ฐ์„ ํ•˜์—ฌ sign์„ ์ƒ์„ฑ Base64๋กœ ์ธ์ฝ”๋”ฉํ•œ๋‹ค.

c6jVyjdQ+KX5oDZGDOr0phH0JZPCZ4lgxva7iwPr2J9cHsCVNhJEmnUzHIYIUlemzSreXzl8Xt39mkQYPaH/Tt8eLqZf8QlUPIigy3MlKzq/BTDzXkJc4vna9ltT42W6ePwNi9q3Otm6FK6gMhiXqWwwUwa7OciHjYYehEomzoo=

์ฃผ์˜๏ผ API๋ฅผ ์‹ ์ฒญํ•  ๋•Œ ๊ฐœ์ธ ํ‚ค๊ฐ€ api_key์™€ ํ•จ๊ป˜ ๋ฐ˜ํ™˜๋œ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ์ธ ํ‚ค๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALSQaafkE4wNY21T
+B2sCydP2FwkTQ6xi+bWLMVeF9bhFKyAZndmwxGgEc9bR6/rur5dAblka7OKpw3n
J27p3b5Ig/kd+dOSj4SfMp9pt96nHWud2KNZdAKUH4ybhg51D8TM0AXL474Gh8Cc
PrRvZspMdnlPM17YyUd6VjKQJs55AgMBAAECgYBF7mBdO8IuTckiQJEpvMYdFZlw
JkcJ182dO3nffs+w0z+Uh64ntE78dogvTOT4x01uCMtwJ+pmgN6uTcZB+KV+NEEC
7298kRZyclUZP4IDyc8qW95ljEHIJnDYwOzLop/IAY3PYwYT3ATJe8ceJ7nan32S
howHKNV+8abiD2yt4QJBANh/II1cF8wtSwVgUxaiKchZwz71GPIMxENRwF+Pgzpf
p61FIw8+If8sR1X036HgyY1+fmuakcqqjg68eF19SC0CQQDVgtOtx8BT9YtPEchv
dChqduHZi7f3IkrMuq7dzkZ9XI5QUdnAhnm8WiW8z8ruKUo32yyxJEWIUGOy6NLi
kqL9AkEAwGvVee7Vc/L5z/B6SQ6exmUJxUZBArnYIuFhc03x3Asy1C0z6RNXUh5/
1OVNcuqBGdLI+Eistg37LxvSe32jjQJAEWnPG9A7xl0zVGqN31Eo7q3tc5GqmlRI
p3PeSSbGpvjCfph+Wu5cxVjQ1RpZYZ0qeW29smDT7u8ngnLsqB/vfQJBAJwsJYVC
8V0D8waVTeDS0zgVcmKtjqHOtuJ3VuFivuSX0BZQALQIq5UlwUhIHwUKimEhffHc
84m43hIAVLHj7eM=
-----END PRIVATE KEY-----

Base64์ฝ”๋”ฉํ›„ ๊ฒฐ๊ณผ๋ฅผ URL๋กœ ์ฝ”๋”ฉํ•œ๋‹ค.

c6jVyjdQ%2BKX5oDZGDOr0phH0JZPCZ4lgxva7iwPr2J9cHsCVNhJEmnUzHIYIUlemzSreXzl8Xt39mkQYPaH%2FTt8eLqZf8QlUPIigy3MlKzq%2FBTDzXkJc4vna9ltT42W6ePwNi9q3Otm6FK6gMhiXqWwwUwa7OciHjYYehEomzoo%3D

์ด์— ๋”ฐ๋ผ ์„œ๋ฒ„์— ์ „์†ก ๋  API ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š”๏ผš

page=1
size=10
api_key=eb4f25dd532c14cee5e9b0301c8d4671
sign=c6jVyjdQ%2BKX5oDZGDOr0phH0JZPCZ4lgxva7iwPr2J9cHsCVNhJEmnUzHIYIUlemzSreXzl8Xt39mkQYPaH%2FTt8eLqZf8QlUPIigy3MlKzq%2FBTDzXkJc4vna9ltT42W6ePwNi9q3Otm6FK6gMhiXqWwwUwa7OciHjYYehEomzoo%3D

sign์ฝ”๋“œ ์ƒ์„ฑ ์˜ˆ์‹œ๏ผš

<!--php์ฝ”๋“œ-->
    //ํŒŒ๋ผ๋ฏธํ„ฐ ์š”์ฒญ
    $params = [
        'page' => '1',
        'size' => '10',
        'api_key' => 'eb4f25dd532c14cee5e9b0301c8d4671'
    ];

    //๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ASCII ์ฝ”๋“œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ ํ•œ๋‹ค.
ksort($params);

    //ํŒŒ๋ฆฌ๋ฏธํ„ฐ๋ฅผ json ํ˜•์‹ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
    $str = json_encode($params);

    //๊ฐœ์ธ ํ‚ค ๋ฌธ์ž์—ด ๋ฐ›๊ธฐ
    $key = file_get_contents('./private_key.pem');

    // ๋‹ค๋ฅธ ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์ธ ํ‚ค๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•œ๋‹ค.
    $private_key = openssl_pkey_get_private($key);

    //sign ์ƒ์„ฑ
    openssl_sign($str, $sign, $private_key, OPENSSL_ALGO_SHA1);

    //๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐœ์ธํ‚ค๋ฅผ  ํ•ด์ œํ•œ๋‹ค. 
    openssl_free_key($private_key);

    //sign๋ฅผ base64๋กœ ์ฝ”๋”ฉํ•œ๋‹ค.
    $sign = base64_encode($sign);
    
    // sign๋ฅผ url์ธ์ฝ”๋”ฉํ•œ๋‹ค.
    $sign = urlencode($sign);
    
    //sign๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•œ๋‹ค.
    $params['sign'] = $sign;

#python์ฝ”๋“œ

# -*- coding: utf-8 -*-
    
    import base64
    import collections
    import json
    import requests
    from requests import Session
    
    #์„ค์น˜ ํ›„ ์‚ฌ์šฉ๏ผšpip install pyOpenSSL
    from OpenSSL import crypto
    
    try:
        import urllib.parse as _urlencode    # Python 3
    except ImportError:
        import urllib as _urlencode          # Python 2
    
    
    params = {
        'page' : '1',
        'size' : '10',
        'api_key' : 'eb4f25dd532c14cee5e9b0301c8d4671',
        }
    
    secret = '''-----BEGIN PRIVATE KEY-----
    MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALSQaafkE4wNY21T
    +B2sCydP2FwkTQ6xi+bWLMVeF9bhFKyAZndmwxGgEc9bR6/rur5dAblka7OKpw3n
    J27p3b5Ig/kd+dOSj4SfMp9pt96nHWud2KNZdAKUH4ybhg51D8TM0AXL474Gh8Cc
    PrRvZspMdnlPM17YyUd6VjKQJs55AgMBAAECgYBF7mBdO8IuTckiQJEpvMYdFZlw
    JkcJ182dO3nffs+w0z+Uh64ntE78dogvTOT4x01uCMtwJ+pmgN6uTcZB+KV+NEEC
    7298kRZyclUZP4IDyc8qW95ljEHIJnDYwOzLop/IAY3PYwYT3ATJe8ceJ7nan32S
    howHKNV+8abiD2yt4QJBANh/II1cF8wtSwVgUxaiKchZwz71GPIMxENRwF+Pgzpf
    p61FIw8+If8sR1X036HgyY1+fmuakcqqjg68eF19SC0CQQDVgtOtx8BT9YtPEchv
    dChqduHZi7f3IkrMuq7dzkZ9XI5QUdnAhnm8WiW8z8ruKUo32yyxJEWIUGOy6NLi
    kqL9AkEAwGvVee7Vc/L5z/B6SQ6exmUJxUZBArnYIuFhc03x3Asy1C0z6RNXUh5/
    1OVNcuqBGdLI+Eistg37LxvSe32jjQJAEWnPG9A7xl0zVGqN31Eo7q3tc5GqmlRI
    p3PeSSbGpvjCfph+Wu5cxVjQ1RpZYZ0qeW29smDT7u8ngnLsqB/vfQJBAJwsJYVC
    8V0D8waVTeDS0zgVcmKtjqHOtuJ3VuFivuSX0BZQALQIq5UlwUhIHwUKimEhffHc
    84m43hIAVLHj7eM=
    -----END PRIVATE KEY-----'''
    
    
    query = collections.OrderedDict(sorted(params.items(), key=lambda t: t[0]))
    json_str = json.dumps(query, separators=(',', ':'))
    key = crypto.load_privatekey(crypto.FILETYPE_PEM, secret)
    signature_base64 = base64.b64encode(crypto.sign(key, bytes(json_str, encoding = "utf8"), 'RSA-SHA1'))
    signature_str_tmp = str(signature_base64, encoding='utf-8')
    query['sign'] = _urlencode.quote(signature_str_tmp, safe="~()*!.'")
    body = json.dumps(query, separators=(',', ':'))
    print (body)
    print ()
    #{"api_key":"eb4f25dd532c14cee5e9b0301c8d4671","page":"1","size":"10","sign":"c6jVyjdQ%2BKX5oDZGDOr0phH0JZPCZ4lgxva7iwPr2J9cHsCVNhJEmnUzHIYIUlemzSreXzl8Xt39mkQYPaH%2FTt8eLqZf8QlUPIigy3MlKzq%2FBTDzXkJc4vna9ltT42W6ePwNi9q3Otm6FK6gMhiXqWwwUwa7OciHjYYehEomzoo%3D"}
    
    
    url = 'https://api.bcex.vip/api_market/getBalance'
    headers = {
        'Content-Type': 'application/json',
    }
    
    r = requests.post(url, headers=headers, data=body)
    
    print (r)
    #<Response [200]>
    
    print (r.text)
    #{"code":0,"msg":"\u64cd\u4f5c\u6210\u529f","data":{"count":5,"data":[{"user_id":352,"org_id":9,"token":"EOS","usable":"0","locked":"0","total":"0","token_as":"EOS"},{"user_id":352,"org_id":9,"token":"ETH","usable":"0","locked":"0","total":"0","token_as":"ETH"},{"user_id":352,"org_id":9,"token":"ONT","usable":"0","locked":"0","total":"0","token_as":"ONT"},{"user_id":352,"org_id":9,"token":"QTUM","usable":"0","locked":"0","total":"0","token_as":"QTUM"},{"user_id":352,"org_id":9,"token":"USDT","usable":"162449.02927762","locked":"2615.345","total":"165064.37427762","token_as":"USDT"}]}}
โš ๏ธ **GitHub.com Fallback** โš ๏ธ