API-интерфейс AFNetworking Square

Я действительно озадачен этим. Мне нужно преобразовать эту команду cURL в target-c. Я использую для этого библиотеку AFNetworking, но каждый раз она возвращает неверный запрос (ошибка 400). Буду признателен за помощь.

команда cURL:

curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer XXXXXXXXXXXXX" -d '{"quantity_delta": -5,"adjustment_type": "SALE"}' https://connect.squareup.com/v1/me/inventory/00CC0141-C50C-4A7A-9FAA-368EC79DA652

Код AFNetworking Objective-C:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setValue:@"Bearer XXXXXXXXXXXXX" forHTTPHeaderField:@"Authorization"];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

NSDictionary *parameters = @{@"quantity_delta": [NSNumber numberWithInt:-1], @"adjustment_type": @"SALE"};
NSLog(@"Parameters are %@", parameters);

[manager POST:@"https://connect.squareup.com/v1/me/inventory/00CC0141-C50C-4A7A-9FAA-368EC79DA652" parameters:@{@"quantity_delta": [NSNumber numberWithInt:-1], @"adjustment_type": @"SALE"} success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

person user2579706    schedule 19.04.2015    source источник
comment
Путь к конечной точке в образце AFNetworking отображается неправильно — он включает /items/ вместо /inventory/. Если вы внесете это изменение, будет ли запрос успешным?   -  person Stephen Barlow    schedule 21.04.2015
comment
Да, я тоже это только что понял. Это все еще не работает.   -  person user2579706    schedule 21.04.2015


Ответы (1)


Справедливое предупреждение, что я новичок в библиотеке AFNetworking, но мне удалось выполнить успешный запрос, добавив строку, выделенную жирным шрифтом, между первыми двумя строками приведенного выше примера:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setRequestSerializer:[AFJSONRequestSerializer serializer]];
[manager.requestSerializer setValue:@"Bearer XXXXXXXXXXXXX" forHTTPHeaderField:@"Authorization"];

Похоже, что по умолчанию AFHTTPRequestOperationManager использует AFHTTPRequestSerializer, который не корректно форматирует тела JSON по умолчанию. Вместо этого использование подкласса AFJSONRequestSerializer решает эту проблему.

person Stephen Barlow    schedule 21.04.2015
comment
Благодаря тонну. Вы только что избавили меня от огромной головной боли! - person user2579706; 22.04.2015
comment
Для всех желающих я сделал репозиторий на гитхабе. github.com/greggmojica/SquareConnect - person user2579706; 22.04.2015