Как сделать POST-вызов API Stripe из iOS / Objective-C
Я пытаюсь создать POST-вызов для Stripe и не могу понять, как правильно сделать вызов. Вот спецификации API:
POST https://api.stripe.com/v1/recipients
curl https://api.stripe.com/v1/recipients \
-u sk_test_4TyIk8adGJTfvHq9YDt4raCx: \
-d "name=John Doe" \
-d type=individual \
-d tax_id=000000000 \
-d "[email protected]" \
-d "description=Recipient for John Doe"
Ссылка на API здесь: https://stripe.com/docs/api/curl
Вот мой код до сих пор:
-(void)createRecipientREST:(STPToken *)token
{
NSString *name = @"John Doe";
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://api.stripe.com/v1/recipients"]];
NSString *params = [NSString stringWithFormat:@"%@:&name=%@&type=individual&card=%@",kStripeSecretKey,name,token.tokenId];
request.HTTPMethod = @"POST";
request.HTTPBody = [params dataUsingEncoding:NSUTF8StringEncoding];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if (error)
{
NSLog(@"ERROR: %@",error);
}
else
{
NSLog(@"%@", response);
}
}];
}
Вот ответ:
<NSHTTPURLResponse: 0x10cfcb880> { URL: https://api.stripe.com/v1/recipients } { status code: 400, headers {
"Access-Control-Allow-Credentials" = true;
"Access-Control-Allow-Methods" = "GET, POST, HEAD, OPTIONS, DELETE";
"Access-Control-Max-Age" = 300;
"Cache-Control" = "no-cache, no-store";
"Content-Length" = 187;
"Content-Type" = "application/json;charset=utf-8";
Date = "Fri, 15 Aug 2014 16:23:23 GMT";
Server = nginx;
"Strict-Transport-Security" = "max-age=31556926; includeSubDomains";
"Stripe-Version" = "2014-08-04";
} }
Но я ищу ответ как это:
{
"id": "rp_14Rb9D4UNKEkOFM8A3mxaavE",
"object": "recipient",
"created": 1408072379,
"livemode": true,
"type": "individual",
"description": "Recipient for John Doe",
"email": "[email protected]",
"name": "John Doe",
"verified": false,
"metadata": {},
"active_account": null,
"cards": {
"object": "list",
"total_count": 0,
"has_more": false,
"url": "/v1/recipients/rp_14Rb9D4UNKEkOFM8A3mxaavE/cards",
"data": []
},
"default_card": null
}
Как мне изменить мой код, чтобы получить желаемый ответ? Спасибо заранее!:)
1 ответ
Решение
NSHTTPURLResponse
это не полученные данные, это информация об ответе. Использовать data
переменная в блоке завершения.
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSLog(@"data: %@", data);
NSLog(@"data: %@", [[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding]);
Вы должны увидеть JSON.
Если вы действительно хотите знать, что происходит, прослушайте сетевое соединение с Charles Proxy.