Вот пример того, как сформировать NSURLRequest
для poloniex.com
.
Представьте, что ваш:
API Key
= @"апикей"
Secret
= @"секрет"
nonce
= @"1"
Начнем с самых простых вещей:
NSMutableURLRequest *theURLRequest = [NSMutableURLRequest new];
theURLRequest.URL = [NSURL URLWithString:@"https://poloniex.com/tradingApi"];
theURLRequest.HTTPMethod = @"POST";
NSString *theBodyString = @"command=returnBalances&nonce=1";
theURLRequest.HTTPBody = [theBodyString dataUsingEncoding:NSUTF8StringEncoding];
[theURLRequest setValue:@"apikey" forHTTPHeaderField:@"Key"];
А теперь самое сложное...
Что касается меня, то в документации Poloniex не очень понятно, что они хотят под значением поля заголовка "Sign"
, но в основном они хотят, чтобы вы передавали строку, которая должна быть результатом алгоритма шифрования HMAC SHA512
, примененного к theBodyString
и< /strong> Secret
(в нашем примере это просто @"secret").
Вот функция, которая вернет вам HMAC SHA512
NSData
:
#import <CommonCrypto/CommonHMAC.h>
NSData * getHMACSHA512FromSecretKeyStringAndBodyString(NSString *theSecretKeyString, NSString *theBodyString)
{
const char *cSecret = [theSecretKeyString cStringUsingEncoding:NSUTF8StringEncoding];
const char *cBody = [theBodyString cStringUsingEncoding:NSUTF8StringEncoding];
unsigned char cHMAC[CC_SHA512_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA512, cSecret, strlen(cSecret), cBody, strlen(cBody), cHMAC);
return [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
}
Итак, бег:
NSData *theData = getHMACSHA512FromSecretKeyStringAndBodyString(@"secret", @"command=returnBalances&nonce=1");
NSString *theString = [NSString stringWithFormat:@"%@", theData];
Дал бы нам почти то, что мы хотели.
Наш результат равен:
<c288f881 a6808d0e 78827ec6 ca9d6b9c 34ec1667 07716303 0d6d7abb 2b225456 31176f52 8347ab0f d6671ec5 3aec1f7d 3b6de8b8 e3ccc23d e62fd594 52d70db5>
Хотя то, что мы на самом деле хотим (согласно http://www.freeformatter.com/hmac-generator.html):
c288f881a6808d0e78827ec6ca9d6b9c34ec1667077163030d6d7abb2b22545631176f528347ab0fd6671ec53aec1f7d3b6de8b8e3ccc23de62fd59452d70db5
So, basically, just remove the <
, >
and
symbols from your string;
theString = [theString stringByReplacingOccurrencesOfString:@"<" withString:@""];
theString = [theString stringByReplacingOccurrencesOfString:@">" withString:@""];
theString = [theString stringByReplacingOccurrencesOfString:@" " withString:@""];
[theURLRequest setValue:theString forHTTPHeaderField:@"Sign"];
Your theURLRequest
is now ready and should succeed getting the tradingApi
of poloniex.com
.
person
OlDor
schedule
17.04.2017
print(dataBack)
- person pedrouan   schedule 05.09.2016Optional(<NSHTTPURLResponse: 0x600000031020> { URL: https://www.poloniex.com/tradingApi } { status code: 200, headers { "Cache-Control" = private; "Content-Encoding" = gzip; "Content-Type" = "application/json"; Date = "Mon, 05 Sep 2016 05:11:34 GMT"; Server = "cloudflare-nginx"; "cf-ray" = "2dd72e64b2dc30e4-SIN"; } }) SUCCESS: { error = "Invalid command."; } SUCCESS
- person VladyslavPG   schedule 05.09.2016