teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

修正

2018/03/07 05:16

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,108 +1,2 @@
1
1
  Objective-Cで仮想通貨取引所のAPI認証をしたく何度も挑戦しているのですが上手くいかないので詳しい方がいましたら教えていただけると嬉しいです。
2
- まず口座残高を確認するコードを書きましたが署名が間違っている or expiresの時間が合わないと返ってきます。
2
+ まず口座残高を確認するコードを書きましたが署名が間違っている or expiresの時間が合わないと返ってきます。
3
-
4
-
5
- ### 発生している問題・エラーメッセージ
6
-
7
-
8
-
9
- ```
10
- message = "Signature not valid.";
11
- name = HTTPError;
12
- or
13
- message = "This request has expired - `expires` is in the past. Current time: 1520181644";
14
- name = HTTPError;
15
- ```
16
- ### 該当のソースコード
17
-
18
- ```Objective-C
19
- - (void)bitmex {
20
-
21
- NSTimeInterval timeStamp = [[NSDate date] timeIntervalSince1970];
22
-
23
- NSString *time;
24
- time = @(timeStamp).stringValue;
25
- //time = @( timeStamp + 5 ).stringValue;
26
- NSLog(@"%@",time);
27
-
28
- NSURLComponents *components = [NSURLComponents componentsWithString:@"https://www.bitmex.com"];
29
- components.path = @"/api/v1/user/wallet";
30
-
31
-
32
- NSURL *url = [components URL];
33
- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
34
- cachePolicy:NSURLRequestUseProtocolCachePolicy
35
- timeoutInterval:10.0];
36
-
37
-
38
- [request setHTTPMethod:@"GET"];
39
- [request setValue:time forHTTPHeaderField:@"api-expires"];
40
- [request setValue:apikey forHTTPHeaderField:@"api-key"];
41
-
42
-
43
- NSString *text = [@"GET/api/v1/user/wallet" stringByAppendingString:time];
44
- [request setValue:[self HMACStringForKey:secret dataString:text] forHTTPHeaderField:@"api-signature"];
45
-
46
-
47
- [[[NSURLSession sharedSession] dataTaskWithRequest:request
48
- completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
49
-
50
- if (response && ! error) {
51
- NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]);
52
- } else {
53
- NSLog(@"%@", error);
54
- }
55
-
56
- }] resume];
57
-
58
- }
59
-
60
- ```
61
- ### 試したこと
62
-
63
- 署名の仕方が間違っていないかを[こちらのリンク](https://www.bitmex.com/app/apiKeysUsage#計算例)のサンプル計算例で試したところ上手く出力できました。
64
- あとは署名の時間が合わないというエラーが返ってくることがあるのですがこちらは何故起こるのかわかりません。
65
-
66
-
67
-
68
- ```Objective-C
69
- NSString *str = @"POST/api/v1/order1518064238{\"symbol\":\"XBTM15\",\"price\":219.0,\"clOrdID\":\"mm_bitmex_1a/oemUeQ4CAJZgP3fjHsA\",\"orderQty\":98}";
70
- NSLog(@"%@",[self HMACStringForKey:@"chNOOS4KvNXR_Xq4k4c9qsfoKWvnDecLATCRlcBwyKDYnWgO" dataString:str]);
71
-
72
-
73
-
74
-
75
- - (NSData *)HMACDataForKey:(NSString *)key dataString:(NSString *)dataString {
76
-
77
- const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
78
- const char *cData = [dataString cStringUsingEncoding:NSUTF8StringEncoding];
79
-
80
- unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
81
-
82
- CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
83
-
84
- return [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
85
- }
86
-
87
- - (NSString *)HMACStringForKey:(NSString *)key dataString:(NSString *)dataString {
88
-
89
- NSData *HMACData = [self HMACDataForKey:key dataString:dataString];
90
-
91
- const unsigned char *buffer = (const unsigned char *)[HMACData bytes];
92
-
93
- NSString *HMACString = [NSMutableString stringWithCapacity:HMACData.length * 2];
94
-
95
- for (int i = 0; i < HMACData.length; ++i)
96
- {
97
- HMACString = [HMACString stringByAppendingFormat:@"%02lx", (unsigned long)buffer[i]];
98
- }
99
-
100
- return HMACString;
101
- }
102
-
103
-
104
-
105
-
106
-
107
-
108
- ```

3

修正

2018/03/07 05:15

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -41,7 +41,7 @@
41
41
 
42
42
 
43
43
  NSString *text = [@"GET/api/v1/user/wallet" stringByAppendingString:time];
44
- [request setValue:[self HMACStringForKey:signature dataString:text] forHTTPHeaderField:@"api-signature"];
44
+ [request setValue:[self HMACStringForKey:secret dataString:text] forHTTPHeaderField:@"api-signature"];
45
45
 
46
46
 
47
47
  [[[NSURLSession sharedSession] dataTaskWithRequest:request

2

本文修正

2018/03/07 03:56

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -61,4 +61,48 @@
61
61
  ### 試したこと
62
62
 
63
63
  署名の仕方が間違っていないかを[こちらのリンク](https://www.bitmex.com/app/apiKeysUsage#計算例)のサンプル計算例で試したところ上手く出力できました。
64
- あとは署名の時間が合わないというエラーが返ってくることがあるのですがこちらは何故起こるのかわかりません。
64
+ あとは署名の時間が合わないというエラーが返ってくることがあるのですがこちらは何故起こるのかわかりません。
65
+
66
+
67
+
68
+ ```Objective-C
69
+ NSString *str = @"POST/api/v1/order1518064238{\"symbol\":\"XBTM15\",\"price\":219.0,\"clOrdID\":\"mm_bitmex_1a/oemUeQ4CAJZgP3fjHsA\",\"orderQty\":98}";
70
+ NSLog(@"%@",[self HMACStringForKey:@"chNOOS4KvNXR_Xq4k4c9qsfoKWvnDecLATCRlcBwyKDYnWgO" dataString:str]);
71
+
72
+
73
+
74
+
75
+ - (NSData *)HMACDataForKey:(NSString *)key dataString:(NSString *)dataString {
76
+
77
+ const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
78
+ const char *cData = [dataString cStringUsingEncoding:NSUTF8StringEncoding];
79
+
80
+ unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
81
+
82
+ CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
83
+
84
+ return [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
85
+ }
86
+
87
+ - (NSString *)HMACStringForKey:(NSString *)key dataString:(NSString *)dataString {
88
+
89
+ NSData *HMACData = [self HMACDataForKey:key dataString:dataString];
90
+
91
+ const unsigned char *buffer = (const unsigned char *)[HMACData bytes];
92
+
93
+ NSString *HMACString = [NSMutableString stringWithCapacity:HMACData.length * 2];
94
+
95
+ for (int i = 0; i < HMACData.length; ++i)
96
+ {
97
+ HMACString = [HMACString stringByAppendingFormat:@"%02lx", (unsigned long)buffer[i]];
98
+ }
99
+
100
+ return HMACString;
101
+ }
102
+
103
+
104
+
105
+
106
+
107
+
108
+ ```

1

本文修正

2018/03/07 03:12

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -60,5 +60,5 @@
60
60
  ```
61
61
  ### 試したこと
62
62
 
63
- 署名の仕方が間違っていないかを[こちらのリンク](https://www.bitmex.com/app/apiKeysUsage)の下部にあるサンプル計算例で試したところ上手く出力できました。
63
+ 署名の仕方が間違っていないかを[こちらのリンク](https://www.bitmex.com/app/apiKeysUsage#計算例)のサンプル計算例で試したところ上手く出力できました。
64
64
  あとは署名の時間が合わないというエラーが返ってくることがあるのですがこちらは何故起こるのかわかりません。