質問編集履歴

4

修正

2018/03/07 05:16

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,215 +1,3 @@
1
1
  Objective-Cで仮想通貨取引所のAPI認証をしたく何度も挑戦しているのですが上手くいかないので詳しい方がいましたら教えていただけると嬉しいです。
2
2
 
3
3
  まず口座残高を確認するコードを書きましたが署名が間違っている or expiresの時間が合わないと返ってきます。
4
-
5
-
6
-
7
-
8
-
9
- ### 発生している問題・エラーメッセージ
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
- ```
18
-
19
- message = "Signature not valid.";
20
-
21
- name = HTTPError;
22
-
23
- or
24
-
25
- message = "This request has expired - `expires` is in the past. Current time: 1520181644";
26
-
27
- name = HTTPError;
28
-
29
- ```
30
-
31
- ### 該当のソースコード
32
-
33
-
34
-
35
- ```Objective-C
36
-
37
- - (void)bitmex {
38
-
39
-
40
-
41
- NSTimeInterval timeStamp = [[NSDate date] timeIntervalSince1970];
42
-
43
-
44
-
45
- NSString *time;
46
-
47
- time = @(timeStamp).stringValue;
48
-
49
- //time = @( timeStamp + 5 ).stringValue;
50
-
51
- NSLog(@"%@",time);
52
-
53
-
54
-
55
- NSURLComponents *components = [NSURLComponents componentsWithString:@"https://www.bitmex.com"];
56
-
57
- components.path = @"/api/v1/user/wallet";
58
-
59
-
60
-
61
-
62
-
63
- NSURL *url = [components URL];
64
-
65
- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
66
-
67
- cachePolicy:NSURLRequestUseProtocolCachePolicy
68
-
69
- timeoutInterval:10.0];
70
-
71
-
72
-
73
-
74
-
75
- [request setHTTPMethod:@"GET"];
76
-
77
- [request setValue:time forHTTPHeaderField:@"api-expires"];
78
-
79
- [request setValue:apikey forHTTPHeaderField:@"api-key"];
80
-
81
-
82
-
83
-
84
-
85
- NSString *text = [@"GET/api/v1/user/wallet" stringByAppendingString:time];
86
-
87
- [request setValue:[self HMACStringForKey:secret dataString:text] forHTTPHeaderField:@"api-signature"];
88
-
89
-
90
-
91
-
92
-
93
- [[[NSURLSession sharedSession] dataTaskWithRequest:request
94
-
95
- completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
96
-
97
-
98
-
99
- if (response && ! error) {
100
-
101
- NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]);
102
-
103
- } else {
104
-
105
- NSLog(@"%@", error);
106
-
107
- }
108
-
109
-
110
-
111
- }] resume];
112
-
113
-
114
-
115
- }
116
-
117
-
118
-
119
- ```
120
-
121
- ### 試したこと
122
-
123
-
124
-
125
- 署名の仕方が間違っていないかを[こちらのリンク](https://www.bitmex.com/app/apiKeysUsage#計算例)のサンプル計算例で試したところ上手く出力できました。
126
-
127
- あとは署名の時間が合わないというエラーが返ってくることがあるのですがこちらは何故起こるのかわかりません。
128
-
129
-
130
-
131
-
132
-
133
-
134
-
135
- ```Objective-C
136
-
137
- NSString *str = @"POST/api/v1/order1518064238{\"symbol\":\"XBTM15\",\"price\":219.0,\"clOrdID\":\"mm_bitmex_1a/oemUeQ4CAJZgP3fjHsA\",\"orderQty\":98}";
138
-
139
- NSLog(@"%@",[self HMACStringForKey:@"chNOOS4KvNXR_Xq4k4c9qsfoKWvnDecLATCRlcBwyKDYnWgO" dataString:str]);
140
-
141
-
142
-
143
-
144
-
145
-
146
-
147
-
148
-
149
- - (NSData *)HMACDataForKey:(NSString *)key dataString:(NSString *)dataString {
150
-
151
-
152
-
153
- const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
154
-
155
- const char *cData = [dataString cStringUsingEncoding:NSUTF8StringEncoding];
156
-
157
-
158
-
159
- unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
160
-
161
-
162
-
163
- CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
164
-
165
-
166
-
167
- return [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
168
-
169
- }
170
-
171
-
172
-
173
- - (NSString *)HMACStringForKey:(NSString *)key dataString:(NSString *)dataString {
174
-
175
-
176
-
177
- NSData *HMACData = [self HMACDataForKey:key dataString:dataString];
178
-
179
-
180
-
181
- const unsigned char *buffer = (const unsigned char *)[HMACData bytes];
182
-
183
-
184
-
185
- NSString *HMACString = [NSMutableString stringWithCapacity:HMACData.length * 2];
186
-
187
-
188
-
189
- for (int i = 0; i < HMACData.length; ++i)
190
-
191
- {
192
-
193
- HMACString = [HMACString stringByAppendingFormat:@"%02lx", (unsigned long)buffer[i]];
194
-
195
- }
196
-
197
-
198
-
199
- return HMACString;
200
-
201
- }
202
-
203
-
204
-
205
-
206
-
207
-
208
-
209
-
210
-
211
-
212
-
213
-
214
-
215
- ```

3

修正

2018/03/07 05:15

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
  NSString *text = [@"GET/api/v1/user/wallet" stringByAppendingString:time];
86
86
 
87
- [request setValue:[self HMACStringForKey:signature dataString:text] forHTTPHeaderField:@"api-signature"];
87
+ [request setValue:[self HMACStringForKey:secret dataString:text] forHTTPHeaderField:@"api-signature"];
88
88
 
89
89
 
90
90
 

2

本文修正

2018/03/07 03:56

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -125,3 +125,91 @@
125
125
  署名の仕方が間違っていないかを[こちらのリンク](https://www.bitmex.com/app/apiKeysUsage#計算例)のサンプル計算例で試したところ上手く出力できました。
126
126
 
127
127
  あとは署名の時間が合わないというエラーが返ってくることがあるのですがこちらは何故起こるのかわかりません。
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+ ```Objective-C
136
+
137
+ NSString *str = @"POST/api/v1/order1518064238{\"symbol\":\"XBTM15\",\"price\":219.0,\"clOrdID\":\"mm_bitmex_1a/oemUeQ4CAJZgP3fjHsA\",\"orderQty\":98}";
138
+
139
+ NSLog(@"%@",[self HMACStringForKey:@"chNOOS4KvNXR_Xq4k4c9qsfoKWvnDecLATCRlcBwyKDYnWgO" dataString:str]);
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+ - (NSData *)HMACDataForKey:(NSString *)key dataString:(NSString *)dataString {
150
+
151
+
152
+
153
+ const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
154
+
155
+ const char *cData = [dataString cStringUsingEncoding:NSUTF8StringEncoding];
156
+
157
+
158
+
159
+ unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
160
+
161
+
162
+
163
+ CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
164
+
165
+
166
+
167
+ return [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
168
+
169
+ }
170
+
171
+
172
+
173
+ - (NSString *)HMACStringForKey:(NSString *)key dataString:(NSString *)dataString {
174
+
175
+
176
+
177
+ NSData *HMACData = [self HMACDataForKey:key dataString:dataString];
178
+
179
+
180
+
181
+ const unsigned char *buffer = (const unsigned char *)[HMACData bytes];
182
+
183
+
184
+
185
+ NSString *HMACString = [NSMutableString stringWithCapacity:HMACData.length * 2];
186
+
187
+
188
+
189
+ for (int i = 0; i < HMACData.length; ++i)
190
+
191
+ {
192
+
193
+ HMACString = [HMACString stringByAppendingFormat:@"%02lx", (unsigned long)buffer[i]];
194
+
195
+ }
196
+
197
+
198
+
199
+ return HMACString;
200
+
201
+ }
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+ ```

1

本文修正

2018/03/07 03:12

投稿

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