Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   PHP (https://forum.zone-game.info/forumdisplay.php?f=125)
-   -   urlencode (https://forum.zone-game.info/showthread.php?t=39233)

desolator 23.09.2015 17:36

urlencode
 
Вложений: 2
Всем привет.
Есть у одного хостинга свое api - прикрутил и вроде бы всё ок но(!)
Когда сервер отправляет отчет об ошибке (например из-за того что адрес с таким именем уже существует я получаю вот такое сообщение "{"status":"error","message":"\u041f\u043e\u0447\u 0442\..."
\u041f\u043e\u0447\u0442\... - это urlencoded-текст в кодировке UTF-8.
Специально воспроизвожу ошибку


В доках у провайдера на это 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($chCURLOPT_URL"https://HOSTING/api.php");
curl_setopt($chCURLOPT_RETURNTRANSFER1);
curl_setopt($chCURLOPT_POSTcount($fields));
curl_setopt($chCURLOPT_POSTFIELDS$fields_string);
$response curl_exec($ch);
curl_close($ch);
echo 
"Ответ на Ваш запрос: ".$response;
?>

Проблема заключается в том, что я очень хреново знаю php и js. urldecode на пару с json-decode для меня слишком сложно.
Помогите дописать :(

desolator 24.09.2015 10:05

Re: urlencode
 
Вот так работает.
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 делать уже не нужно.

Hett 24.09.2015 10:17

Re: urlencode
 
Если вы про ответ, то не надо никаких urldecode делать.

Цитата:

\u041f\u043e\u0447\u0442\... - это urlencoded-текст в кодировке UTF-8.
с чего вы взяли? :)

desolator 24.09.2015 10:35

Re: urlencode
 
Цитата:

Сообщение от Hett (Сообщение 400607)
Если вы про ответ, то не надо никаких urldecode делать.


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

Та что-то мне так санчала показалось. Потом понял что это просто json

Hett 24.09.2015 10:44

Re: urlencode
 
Кстати делать
Код:

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

нет необходимости, можно просто передать массив key=>value как есть (энкодить ничего не нужно).
С пхп 5.3 по крайней мере точно :)

desolator 24.09.2015 16:42

Re: urlencode
 
Появился еще один вопрос.
После ввода данных в форму и нажатия сабмит вроде бы всё ок. Ответы от сервера API приходят нормально (либо error либо success).
pehepe:
Свернуть ↑Развернуть ↓

Т.е. меня перенаправляет с http://192.168.0.117/new/ на http://192.168.0.117/new/mail.php

Теперь хочу седлать так, что бы при нажатии "submit" проверялось значение
PHP код:

print_r($response); 

сейчас оно выводится на экран в браузере(см. IMG), а мне надо проверить его средствами php и при условии success перенаправлять например на /new/skype.html, а при error очищать поля в форме и выводить popup на странице формы с ошибкой от
PHP код:

print_r($response); 

.
Пытался сделать так:
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(); 

Думал парсить страницу... но по-моему это п*ц плохо(
Не знаю как выйти из ситуации. Может кто-то что-то подскажет:)

epmak 24.09.2015 18:53

Re: urlencode
 
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();


если я верно понял

desolator 25.09.2015 09:33

Re: urlencode
 
Попытался вот так:
variant1:
Свернуть ↑Развернуть ↓

Получаю просто белый экран

Попытался ещё вот так:
variant 2:
Свернуть ↑Развернуть ↓

Получаю экран с ошибкой.
Что в первом, что во втором вариантах никакого редиректа не происходит(

epmak 25.09.2015 09:37

Re: urlencode
 
проще все
убрать
PHP код:


echo "<pre>";
print_r($response); 

а дальше написать
PHP код:

if ($response['status'] == 'error') {
//вместо  redirect_url  какое-то действие
$redirect_url "/new/skype.html";
} else {
//вместо  redirect_url  какое-то действие
$redirect_url "/new";


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

еще бы по-хорошему, при дебаге не плохо в начале скрипта ставить
PHP код:

error_reporting(E_ALL); 

и обращаю внимание: в данном случае лучше все же ставить не ===, а ==

desolator 25.09.2015 10:00

Re: urlencode
 
Включл вывод ошибок
забахал вот так:
PHP код:

if ($response['status'] == 'error') {
//вместо  redirect_url  какое-то действие
echo "error";
} else {
//вместо  redirect_url  какое-то действие
echo "success";


Отображается правильно error когда действительно ответ приходит error.
success -тоже верно выводится. Но когда пишу вместо echo - redirect_url при таких же условиях, вижу просто белый экран(

epmak 25.09.2015 10:56

Re: urlencode
 
потому что redirect_url - переменная. в ней хранится текст. Если нужен редирект, то
PHP код:

header('Location: адрес_назначения');
die(); 

то есть

PHP код:

if ($response['status'] == 'error') {
$redirect_url "/new/skype.html";
} else {
$redirect_url "/new";
}  

header('Location: http://'.$_SERVER['HTTP_HOST'].$redirect_url);
die(); 

где-то так, примерно

Hett 25.09.2015 11:04

Re: urlencode
 
Код:

ini_set('display_errors', 'on');

desolator 25.09.2015 11:05

Re: urlencode
 
Дошло. Спасибо)
Вот так работает
PHP код:

if ($response['status'] == 'error') {$redirect_url "/new/";}
else {
$redirect_url "/new/skype.html";}
 
header('HTTP/1.1 200 OK');
header('Location: http://'.$_SERVER['HTTP_HOST'].$redirect_url);
exit(); 



Текущее время: 09:43. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot