Sign - BCEX-TECHNOLOGY-LIMITED/API_KR_Docs GitHub Wiki
ํ๋ผ๋ฏธํฐ ํญ๋ชฉ์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"}]}}