Я пытаюсь отправить push-уведомление, используя мой собственный API, используя приведенный ниже код. Я уверен, что curl был включен на моем сервере. Я получаю ниже как ответ.
$url = "http://efpushtest.meteor.com/api/push";
# Our new data
$data = json_encode(array(
'message' => "this is venkat test push message",
'device' => "12345"));
$ch = curl_init($url);
# Setting our options
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
# Get the response
$result = curl_exec($ch);
curl_close($ch);
Отклик:
{«success»: false, «message»: «Неожиданный токен u»}
Я не понимаю, где я иду не так с этим кодом.
Так как я получаю тот же ответ, делая это в консоли браузера:
$.post( "/api/push/", { "message" : "this is venkat test push message","device" : "12345" } );
Я бы сказал, что проблема в вашем коде API
Этот ответ здесь, кажется, говорит то же самое:
Так как вы говорите в комментарии, что он ожидает параметры записи, ваш запрос не должен быть закодирован в json, как в вашем коде. Правильный способ справиться с этим — разместить поля следующим образом:
$url = "http://efpushtest.meteor.com/api/push";
# Our new data
$data = array(
'message' => "this is venkat test push message",
'device' => "12345");
$ch = curl_init($url);
// build the post string here
foreach($data as $key=>$value) {
$fields_string .= $key.'='.$value.'&';
}
rtrim($fields_string, '&');
# Setting our options
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
# Get the response
$result = curl_exec($ch);
curl_close($ch);
где вы фактически публикуете параметры как POST
параметры, передающие их в виде строки, как вы могли бы видеть в GET
, Ваш пример будет публиковать:
сообщение = это тестовое сообщение венка&Устройство = 12345
На вашем месте я бы также обновил объявление массива, чтобы оно прошло url_encoded
значения к посту как в:
$data = array(
'message' => urlencode("this is venkat test push message"),
'device' => urlencode("12345")
);
чтобы любые специальные символы в строке не нарушали ваши запросы
СТАРЫЙ ОТВЕТ ЗА JSON
Попробуйте установить заголовки запроса curl, чтобы указать, что вы публикуете json в api
# Настройка наших опций
curl_setopt ($ ch, CURLOPT_HTTPHEADER, массив (‘Content-Type: application / json’));
curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ data);
curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, true);