Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
urlencode
#1
Всем привет.
Есть у одного хостинга свое api - прикрутил и вроде бы всё ок но(!)
Когда сервер отправляет отчет об ошибке (например из-за того что адрес с таким именем уже существует я получаю вот такое сообщение "{"status":"error","message":"\u041f\u043e\u0447\u0442\..."
\u041f\u043e\u0447\u0442\... - это urlencoded-текст в кодировке UTF-8.
Специально воспроизвожу ошибку
raz
raz
В доках у провайдера на это API написано:
API DOC
То есть, насколько я понимаю, нужно сначала http://php.ru/manual/function.json-decode.html, потом уже взять конкретный элемент массива с ответом и применить к нему http://php.net/manual/en/function.urldecode.php
Мой запрос
PHP код:
<?php
$fields
= array(
'auth_login' => "moi_login",
'auth_token' => "moi_token",

'class' => "hosting_mailbox",
'method' => "create",

'account' => "moi_acc",
'mailbox' => $_POST['mailbox'],
'password' => $_POST['password'],
);

$fields_string = "";
foreach(
$fields as $key => $value) {
$fields_string .= $key.'='.urlencode($value).'&';
}

rtrim($fields_string, '&');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://HOSTING/api.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
$response = curl_exec($ch);
curl_close($ch);
echo
"Ответ на Ваш запрос: ".$response;
?>
Проблема заключается в том, что я очень хреново знаю php и js. urldecode на пару с json-decode для меня слишком сложно.
Помогите дописать Sad


Файлы вложений
.jpg   one.jpg (Размер: 9.85 KB / Загрузок: 107)
.jpg   dva.jpg (Размер: 7.52 KB / Загрузок: 104)
Ответ
#2
Вот так работает.
PHP код:
<?php 
$json_string
= 'https://HOSTING/api.php';
$jsondata = file_get_contents($json_string);
$response = json_decode($response,true);
echo
"<pre>";
print_r($response);
В моем случае это просто целый JSON. После json_decode никакого urldecode делать уже не нужно.
Ответ
#3
Если вы про ответ, то не надо никаких urldecode делать.

Цитата:\u041f\u043e\u0447\u0442\... - это urlencoded-текст в кодировке UTF-8.
с чего вы взяли? Smile
Ответ
#4
Hett Написал:Если вы про ответ, то не надо никаких urldecode делать.


с чего вы взяли? Smile

Та что-то мне так санчала показалось. Потом понял что это просто json
Ответ
#5
Кстати делать
Код:
foreach($fields as $key => $value) {
     $fields_string .= $key.'='.urlencode($value).'&';
}

нет необходимости, можно просто передать массив key=>value как есть (энкодить ничего не нужно).
С пхп 5.3 по крайней мере точно Smile
Ответ
#6
Появился еще один вопрос.
После ввода данных в форму и нажатия сабмит вроде бы всё ок. Ответы от сервера API приходят нормально (либо error либо success).
pehepe
Т.е. меня перенаправляет с http://192.168.0.117/new/ на http://192.168.0.117/new/mail.php
img
Теперь хочу седлать так, что бы при нажатии "submit" проверялось значение
PHP код:
<?php 
print_r
($response);
сейчас оно выводится на экран в браузере(см. IMG), а мне надо проверить его средствами php и при условии success перенаправлять например на /new/skype.html, а при error очищать поля в форме и выводить popup на странице формы с ошибкой от
PHP код:
<?php 
print_r
($response);
.
Пытался сделать так:
PHP код:
<?php 
if ($response == "хз как опредялять success в $response") {$redirect_url = "/new/skype.html";}
else {
$redirect_url = "/new";}


header('HTTP/1.1 200 OK');
header('Location: http://'.$_SERVER['HTTP_HOST'].$redirect_url);
exit();
Думал парсить страницу... но по-моему это п*ц плохо(
Не знаю как выйти из ситуации. Может кто-то что-то подскажетSmile
Ответ
#7
PHP код:
<?php 
if($response["status"] == "error")
{
header('Location: http://'.$_SERVER['HTTP_HOST'].'/errorpage.php';
die();
}
else if(
$response["status"] == "success")
{
header('Location: http://'.$_SERVER['HTTP_HOST'].'/successpage.php';
die();
}

если я верно понял
Ответ
#8
Попытался вот так:
variant1
Получаю просто белый экран
ekran
Попытался ещё вот так:
variant 2
Получаю экран с ошибкой.
Что в первом, что во втором вариантах никакого редиректа не происходит(
Ответ
#9
проще все
убрать
PHP код:
<?php 
echo "<pre>";
print_r($response);
а дальше написать
PHP код:
<?php 
if ($response['status'] == 'error') {
//вместо redirect_url какое-то действие
$redirect_url = "/new/skype.html";
} else {
//вместо redirect_url какое-то действие
$redirect_url = "/new";
}

так как последний вариант и не факт что будет работать.

еще бы по-хорошему, при дебаге не плохо в начале скрипта ставить
PHP код:
<?php 
error_reporting
(E_ALL);

и обращаю внимание: в данном случае лучше все же ставить не ===, а ==
Ответ
#10
Включл вывод ошибок
забахал вот так:
PHP код:
<?php 
if ($response['status'] == 'error') {
//вместо redirect_url какое-то действие
echo "error";
} else {
//вместо redirect_url какое-то действие
echo "success";
}
Отображается правильно error когда действительно ответ приходит error.
success -тоже верно выводится. Но когда пишу вместо echo - redirect_url при таких же условиях, вижу просто белый экран(
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)