All
กรองโดย:
ฉันจะฝากเงินสดเข้าบัญชีของฉันได้อย่างไร
ฉันต้องการความช่วยเหลือเกี่ยวกับการตรวจสอบยืนยันบัญชี
ทำไมฉันเข้าถึงบัญชีของฉันไม่ได้
มีค่าธรรมเนียมการถอนคริปโตหรือไม่
ฉันต้องการความช่วยเหลือในการเข้าสู่ระบบบัญชีของฉัน
การยืนยันตัวตน API จำเป็นทุกครั้งที่การเรียก API เข้าถึงบัญชีผ่านวิธีการ API ส่วนตัววิธีใดวิธีหนึ่ง
ตัวอย่างเช่น วิธีการจัดการบัญชี เช่น Balance, TradeBalance และ OpenOrders; วิธีการซื้อขาย AddOrder และ CancelOrder; และวิธีการระดมทุน เช่น DepositAddresses และ WithdrawInfo ล้วนเป็นวิธีการ API ส่วนตัวที่ต้องมีการยืนยันตัวตน API
การยืนยันตัวตน API อิงตามคู่คีย์สาธารณะ/ส่วนตัว (รวมเรียกว่า API key) และลายเซ็นเข้ารหัสโดยใช้อัลกอริทึมแฮช เช่น SHA256 และ HMAC SHA512
ตัวอย่าง API key จะประกอบด้วยคีย์สาธารณะและคีย์ส่วนตัวที่คล้ายกับต่อไปนี้:
Bash
Public Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
Private Key: FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==โปรดทราบว่าตัวอย่างเหล่านี้ไม่สามารถใช้ได้เนื่องจากไม่ได้เชื่อมโยงกับบัญชี Kraken ใดๆ
ลายเซ็นเข้ารหัสถูกสร้างขึ้นแบบเรียลไทม์โดยโค้ดไคลเอ็นต์ API ข้อมูลสำหรับการเรียก API จะถูกส่งผ่านชุดของอัลกอริทึมแฮชและการยืนยันตัวตนข้อความ ซึ่งจะลงนามข้อมูลอย่างปลอดภัยโดยใช้ API secret (ส่วนส่วนตัวของ API key)
API key และลายเซ็นจะถูกส่งไปยัง API ผ่าน HTTP headers ที่กำหนดเอง API-Key และ API-Sign
API key ใช้เพื่อระบุว่ากำลังเข้าถึงบัญชีใด ดังนั้นค่าคีย์จึงเหมือนกันสำหรับการเรียก API ทุกครั้ง ลายเซ็นเข้ารหัสใช้เพื่อยืนยันตัวตนการเรียก API และคำนวณโดยใช้ค่าตัวแปร (เช่น nonce) ดังนั้นค่าลายเซ็นจึงแตกต่างกันสำหรับการเรียก API ทุกครั้ง
ตัวอย่างของ HTTP headers API-Key และ API-Sign มีดังนี้:
API-Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
API-Sign: RdQzoXRC83TPmbERpFj0XFVArq0Hfadm0eLolmXTuN2R24hzIqtAnF/f7vSfW1tGt7xQOn8bjm+Ht+X0KrMwlA==
โปรดทราบว่าค่า API-Key เหมือนกับ public key ที่แสดงไว้ข้างต้นทุกประการ แต่ค่า API-Sign (ลายเซ็น) แตกต่างจาก private key ที่แสดงไว้ข้างต้น และจะเปลี่ยนเป็นค่าใหม่สำหรับการเรียก API แต่ละครั้ง
ใน เอกสาร API ของเราระบุว่าค่า API-Sign คือ "ลายเซ็นข้อความที่ใช้ HMAC-SHA512 ของ (URI path + SHA256(nonce + POST data)) และ API key ลับที่ถอดรหัส base64 แล้ว" ซึ่งสามารถแยกออกเป็นส่วนต่างๆ ได้ดังนี้:
ตัวแปร
URI path = URL ของการเรียก API โดยไม่มี 'https://api.kraken.com'.
nonce = ตัวระบุที่ไม่ซ้ำกันซึ่งต้องมีค่าเพิ่มขึ้นกับการเรียก API แต่ละครั้ง (มักจะเป็น UNIX timestamp ซึ่งเป็นเวลาปัจจุบันในหน่วยวินาที (หรือมิลลิวินาทีสำหรับความละเอียดที่สูงขึ้น) ตั้งแต่วันที่ 1 มกราคม 1970).
POST data = คู่ชื่อ/ค่าที่เข้ารหัสแบบฟอร์มของ nonce และพารามิเตอร์เมธอด API.
ตัวอย่างของตัวแปรสำหรับการเรียกเมธอด TradeBalance มีดังนี้ (โปรดทราบว่าค่าทั้งหมดเป็นค่าสตริง ไม่ว่าค่าเหล่านั้นจะแสดงถึงอะไรก็ตาม):
URI path = "/0/private/TradeBalance"
nonce = "1540973848000"
POST data = "nonce=1540973848000&asset=xbt"
อัลกอริทึม
คำนวณ SHA256 ของ nonce และ POST data.
ถอดรหัส API secret (ส่วนส่วนตัวของ API key) จาก base64.
คำนวณ HMAC ของ URI path และ SHA256 โดยใช้ SHA512 เป็น HMAC hash และ API secret ที่ถอดรหัสแล้วเป็น HMAC key.
เข้ารหัส HMAC เป็น base64.
ตัวอย่างของอัลกอริทึมที่ใช้ตัวแปรที่แสดงไว้ข้างต้นมีดังนี้:
Base64Encode(HMAC-SHA512 of ("/0/private/TradeBalance" + SHA256("1540973848000nonce=1540973848000&asset=xbt")) using Base64Decode("FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==") as the HMAC key
ผลลัพธ์คือค่า API-Sign.
ตัวอย่างโค้ดที่เรียบง่าย (ไม่มีการตรวจสอบข้อผิดพลาด) แต่ใช้งานได้เต็มรูปแบบสำหรับการสร้างลายเซ็นการยืนยันตัวตน API สำหรับ API endpoint ของ TradeBalance มีดังนี้:
Python
# Import required Python libraries
import time
import base64
import hashlib
import hmac
# Decode API private key from base64 format displayed in account management
api_secret = base64.b64decode(
"FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ=="
)
# Variables (API endpoint, nonce and HTTP POST data)
api_path = "/0/private/TradeBalance"
api_nonce = str(int(time.time() * 1000))
api_post = "nonce=" + api_nonce + "&asset=xbt"
# Cryptographic hash algorithms
api_sha256 = hashlib.sha256(api_nonce.encode('utf-8') + api_post.encode('utf-8'))
api_hmac = hmac.new(
api_secret,
api_path.encode('utf-8') + api_sha256.digest(),
hashlib.sha512
)
# Encode signature into base64 format used in API-Sign value
api_signature = base64.b64encode(api_hmac.digest())
# API authentication signature for use in API-Sign HTTP header
print(api_signature.decode())NodeJS
Bash
// Import required NodeJS libraries
const crypto = require('crypto');
// Decode API private key from base64 format displayed in account management
const apiSecret = Buffer.from(
'FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==',
'base64'
);
// Variables (API endpoint, nonce and HTTP POST data)
const apiPath = '/0/private/TradeBalance';
const apiNonce = Date.now().toString();
const apiPost = `nonce=${apiNonce}&asset=xbt`;
// Cryptographic hash algorithms
const apiSha256 = crypto.createHash('sha256').update(`${apiNonce}${apiPost}`).digest();
const apiSha512 = crypto.createHmac('sha512', apiSecret).update(apiPath).update(apiSha256).digest();
// Encode signature into base64 format used in API-Sign value
const apiSignature = apiSha512.toString('base64');
// API authentication signature for use in API-Sign HTTP header
console.log(apiSignature);PHP
Bash
// Decode API private key from base64 format displayed in account management
$apiSecret = base64_decode('FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==');
// Variables (API endpoint, nonce and HTTP POST data)
$apiPath = '/0/private/TradeBalance';
$apiNonce = explode(' ', microtime());
$apiNonce = $apiNonce[1] . substr($apiNonce[0], 2, 3);
$apiPost = "nonce={$apiNonce}&asset=xbt";
// Cryptographic hash algorithms
$apiSha256 = hash('sha256', $apiNonce . $apiPost, true);
$apiSha512 = hash_hmac('sha512', $apiPath . $apiSha256, $apiSecret, true);
// Encode signature into base64 format used in API-Sign value
$apiSignature = base64_encode($apiSha512);
// API authentication signature for use in API-Sign HTTP header
print $apiSignature;