Alamofire JSON не может быть сериализован

Я пытаюсь сделать запрос PHP Post с Alamofire в моем быстром приложении, которое должно отправлять SMS с OVH API, но у меня возникла проблема:

FAILURE: Error Domain=com.alamofire.error Code=-6006 "JSON could not be serialized. Input data was nil or zero length." UserInfo={NSLocalizedFailureReason=JSON could not be serialized. Input data was nil or zero length.}

Я не нахожу, как увидеть эхо из сценария PHP, чтобы решить его. Я думаю, что это не проблема Alamofire, потому что я делаю другой запрос на отправку электронных писем, и это работает хорошо. Вот мой запрос, где есть ошибка:

func sendSmsAutoRequest(completionHandler: (responseObject: NSDictionary?, error: NSError?) -> ()) {
let prefs = NSUserDefaults.standardUserDefaults()
let username = prefs.stringForKey(StorageManager.USER_NAME)!
let messageText = prefs.stringForKey(StorageManager.MESSAGE_TEXT)!

let parameters = ["contactsSms": contactsSms, "username": username, "messageText": messageText]
request(.POST, "http://XXX/dontworry/sendAutoSms.php", parameters: (parameters as! [String : AnyObject])).responseJSON { response in
print(response)
}

}

и вот мой сценарий:

<?php

require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

$applicationKey = "XXX";
$applicationSecret = "XXX";
$consumer_key = "XXX";

$endpoint = "ovh-eu";

$contactsSms = $_POST['contactsSms'];
$userName = $_POST['username'];
$messageText = $_POST['messageText'];

$conn = new Api($applicationKey,
$applicationSecret,
$endpoint,
$consumer_key);

$smsServices = $conn->get('/sms/');

$content = (object) array(
"charset"=> "UTF-8",
"class"=> "phoneDisplay",
"coding"=> "7bit",
"message"=> $messageText,
"noStopClause"=> true,
"priority"=> "high",
"receivers"=> $contactsSms,
"senderForResponse"=> true,
"validityPeriod"=> 2880
);

$resultPostJob = $conn->post('/sms/'. $smsServices[0] . '/jobs/', $content);

$smsJobs = $conn->get('/sms/'. $smsServices[0] . '/jobs/');

echo '{"contacts": $contactsSms,"username": $username, "messageText": $messageText, "result": $resultPostJob, "sms": $smsJobs}'; ?>

РЕДАКТИРОВАТЬ: Кажется, работает, у меня больше нет ошибки! Но смс не отправляется …

2

Решение

С первого прочтения ваш PHP-скрипт, скорее всего, печатает неверный JSON. Следующий оператор выведет JSON, содержащий строки без кавычек (при условии, что один или несколько параметров, таких как $_POST['messsageText'] содержат строковые значения):

echo '{"contacts": $contactsSms,"username": $username, "messageText": $messageText, "result": $resultPostJob, "sms": $smsJobs}';

Пример вывода (довольно напечатан для удобства чтения):

{
"contacts": foobar,  # <-- This is invalid! It's a string and needs to be quoted!
"username": johndoe,
"messageText": Hello World,  # <-- This is even more invalid!
...
}

Я бы посоветовал положиться на PHP json_encode функция для генерации правильного вывода JSON:

echo json_encode([
"contacts" => $contactsSms,
"username" => $username,
"messageText" => $messageText,
// etc.
]);
3

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

Это была ошибка в alamoFire, которая была исправлена ​​в выпуске 3.1.1, см. тяга № 889, фиксированная версия работает, только если ваш REST-подобный сервис возвращает ответ 204 (NO_RESPONSE), что теоретически является правильным способом сделать это.

1

Сериализация — это процесс преобразования объекта в строку JSON. Так что проблема не в обработке вашего ответа, а в вашем запросе.

Записать содержимое вашего parameters словарь, и проверьте для нулевых значений.

0
По вопросам рекламы [email protected]