iOS (цель c) отправить запрос с json на бэкэнд php

Мой код в iOS:

NSString * some_str = @"{\"one\":\"two\",\"three\":\"four\"}";
NSData *objectData = [some_str dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData
options:NSJSONReadingMutableContainers
error:&error];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[manager POST:@"https://exmaple.com/post.php" parameters:json progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Error: %@", error);
}];

Мой код в бэкэнде (PHP):

<?php
if(strcasecmp($_SERVER['REQUEST_METHOD'], 'POST') != 0){
throw new Exception('Request method must be POST!');
}
$contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : '';
if(strcasecmp($contentType, 'application/json') != 0){
throw new Exception('Content type must be: application/json');
}

//Receive the RAW post data.
$content = trim(file_get_contents("php://input"));
$decoded = json_decode($content, true);
echo $content;// $responses = array();
header("Content-type: application/json, charset=utf-8");
// echo json_encode($responses);

$conn->close();

?>

Если я отображаю $ content, ответ, полученный iOS, будет шестнадцатеричным числом. то есть 3c21444f 43545950 (шестнадцатеричное число для строки json начинается от хвоста до головы, соединенной знаком «&знак, то есть три = четыре&один = два). Если я повторяю $ decoded, он возвращает пустой json.

И если я попытаюсь расшифровать json, полученный почтовым запросом, это не удалось. Я полагал, что полученный объект был возможным вводом для функции json_decode.

Должен ли я переписать свой код iOS или код PHP или оба?

0

Решение

Попробуйте это … может помочь

Создайте метод и передайте параметры этому методу

+ (void)apiRequestForPOSTWithServiceName:(NSString *)serviceName andParameters:(NSDictionary *)parameter withCompletion:(void(^)(id response, BOOL isSuccess))completion
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
NSString *url = [NSString stringWithFormat:@"%@%@", BASE_URL, serviceName];
[manager POST:url parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) {
//NSLog(@"JSON: %@", responseObject);

completion(responseObject,YES);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);

completion(error,NO);
}];
}

Спасибо…

0

Другие решения

Других решений пока нет …