Сообщений: 104
	Тем: 17
	Зарегистрирован: Oct 2013
	
Репутация: 
52  
	
		
		
		09-23-2015, 05:36 PM 
(Сообщение последний раз редактировалось: 09-23-2015, 07:01 PM   desolator .) 
  
		
	 
	
		Всем привет. 
Есть у одного хостинга свое api - прикрутил и вроде бы всё ок но(!)
 Когда сервер отправляет отчет об ошибке (например из-за того что адрес с таким именем уже существует я получаю вот такое сообщение "{"status":"error","message":"\u041f\u043e\u0447\u0442\..."
 
\u041f\u043e\u0447\u0442\...  - это urlencoded-текст в кодировке UTF-8.
Специально воспроизвожу ошибку
В доках у провайдера на это API написано: 
			API DOC 
			
Ответ на POST запрос всегда возвращается в кодировке UTF-8. Может быть возвращен в формате JSON или XML. В рамках документации рассматриваются только примеры в формате JSON.
		 
То есть, насколько я понимаю, нужно сначала 
http://php.ru/manual/function.json-decode.html , потом уже взять конкретный элемент массива с ответом и применить к нему 
http://php.net/manual/en/function.urldecode.php 
Мой запрос 
PHP код:
<?php = 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  =  "" ;  $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 ); "Ответ на Ваш запрос: " . $response ; ?> Проблема заключается в том, что я очень хреново знаю php и js. urldecode на пару с json-decode для меня слишком сложно.
Помогите дописать 
 
	
Файлы вложений one.jpg  (Размер: 9.85 KB / Загрузок: 107)
dva.jpg  (Размер: 7.52 KB / Загрузок: 104)
 
	
	
	
 
 
	
	
	
		
	Сообщений: 104
	Тем: 17
	Зарегистрирован: Oct 2013
	
Репутация: 
52  
	
		
		
		09-24-2015, 10:05 AM 
(Сообщение последний раз редактировалось: 09-24-2015, 10:35 AM   desolator .) 
  
		
	 
	
		Вот так работает.
PHP код:
<?php  =  'https://HOSTING/api.php' ; $jsondata  =  file_get_contents ( $json_string ); $response  =  json_decode ( $response , true ); "<pre>" ; print_r ( $response );   В моем случае это просто целый JSON. После json_decode никакого urldecode делать уже не нужно.
	
 
	
	
	
	
 
	
	
	
		
	Сообщений: 134
	Тем: 18
	Зарегистрирован: Aug 2015
	
Репутация: 
156  
	
	
		Если вы про ответ, то не надо никаких urldecode делать.
Цитата: \u041f\u043e\u0447\u0442\... - это urlencoded-текст в кодировке UTF-8.
с чего вы взяли? 
 
 
	
	
	
		
	Сообщений: 104
	Тем: 17
	Зарегистрирован: Oct 2013
	
Репутация: 
52  
	
	
		Hett Написал: Если вы про ответ, то не надо никаких urldecode делать.
Та что-то мне так санчала показалось. Потом понял что это просто json
	
 
	
	
	
	
 
 
	
	
	
		
	Сообщений: 134
	Тем: 18
	Зарегистрирован: Aug 2015
	
Репутация: 
156  
	
	
		Кстати делать 
Код:
foreach($fields as $key => $value) {
нет необходимости, можно просто передать массив key=>value как есть (энкодить ничего не нужно). 
С пхп 5.3 по крайней мере точно 
 
 
	
	
	
		
	Сообщений: 104
	Тем: 17
	Зарегистрирован: Oct 2013
	
Репутация: 
52  
	
	
		Появился еще один вопрос.
После ввода данных в форму и нажатия сабмит вроде бы всё ок. Ответы от сервера API приходят нормально (
либо error либо success ).
			pehepe 
			
PHP код:
<?php = array( 'auth_login'  =>  "q" , 'auth_token'  =>  "c" , 'class'  =>  "hosting_mailbox" , 'method'  =>  "create" , 'account'  =>  "c" ,  'mailbox'  =>  $_POST [ 'mailbox' ], 'password'  =>  $_POST [ 'password' ], $fields_string  =  "" ;  $fields  as  $key  =>  $value ) { $fields_string  .=  $key . '=' . urlencode ( $value ). '&' ; rtrim ( $fields_string ,  '&' ); $ch  =  curl_init (); curl_setopt ( $ch ,  CURLOPT_URL ,  "https://asd/api.php" ); curl_setopt ( $ch ,  CURLOPT_RETURNTRANSFER ,  true ); curl_setopt ( $ch ,  CURLOPT_POST ,  count ( $fields )); curl_setopt ( $ch ,  CURLOPT_POSTFIELDS ,  $fields_string ); curl_setopt ( $ch ); $response  =  curl_exec ( $ch ); curl_close ( $ch );  $json_string  =  'https://asd/api.php' ; $jsondata  =  file_get_contents ( $json_string ); $response  =  json_decode ( $response , true ); "<pre>" ; print_r ( $response ); ?>   
		
Т.е. меня перенаправляет с 
http://192.168.0.117/new/  на 
http://192.168.0.117/new/mail.php 
Теперь хочу седлать так, что бы при нажатии "submit" проверялось значение 
PHP код:
<?php  ( $response );    сейчас оно выводится на экран в браузере(см. IMG), а мне надо проверить его средствами php и при условии 
success  перенаправлять например на /new/skype.html, а при 
error  очищать поля в форме и выводить popup на странице формы с ошибкой от  
PHP код:
<?php  ( $response );   .PHP код:
<?php  if ( $response  ==  "хз как опредялять success в  $response " ) { $redirect_url  =  "/new/skype.html" ;} $redirect_url  =  "/new" ;} header ( 'HTTP/1.1 200 OK' ); header ( 'Location: http://' . $_SERVER [ 'HTTP_HOST' ]. $redirect_url ); 
	
	
	
		
	Сообщений: 604
	Тем: 16
	Зарегистрирован: Feb 2013
	
Репутация: 
4,248  
	
	
		PHP код:
<?php  if( $response [ "status" ] ==  "error" ) header ( 'Location: http://' . $_SERVER [ 'HTTP_HOST' ]. '/errorpage.php' ; $response [ "status" ] ==  "success" ) header ( 'Location: http://' . $_SERVER [ 'HTTP_HOST' ]. '/successpage.php' ;  
если я верно понял
	
 
	
	
	
	
 
	
	
	
		
	Сообщений: 104
	Тем: 17
	Зарегистрирован: Oct 2013
	
Репутация: 
52  
	
	
		Попытался вот так:
			variant1 
			
PHP код:
<?php = array( 'auth_login'  =>  "clic.display@yandex.ru" , 'auth_token'  =>  "bbntf2ege3vz2p6b2e6a3ue435x07lu4fax4zv52c7ba4cj5as46q3g388x5x3p2" , 'class'  =>  "hosting_mailbox" , 'method'  =>  "create" , 'account'  =>  "clicinde" ,  'mailbox'  =>  $_POST [ 'mailbox' ], 'password'  =>  $_POST [ 'password' ], $fields_string  =  "" ;  $fields  as  $key  =>  $value ) { $fields_string  .=  $key . '=' . urlencode ( $value ). '&' ; rtrim ( $fields_string ,  '&' ); $ch  =  curl_init (); curl_setopt ( $ch ,  CURLOPT_URL ,  "https://adm.tools/api.php" ); curl_setopt ( $ch ,  CURLOPT_RETURNTRANSFER ,  true ); curl_setopt ( $ch ,  CURLOPT_POST ,  count ( $fields )); curl_setopt ( $ch ,  CURLOPT_POSTFIELDS ,  $fields_string ); curl_setopt ( $ch ); $response  =  curl_exec ( $ch ); curl_close ( $ch );  $json_string  =  'https://adm.tools/api.php' ; $jsondata  =  file_get_contents ( $json_string ); $response  =  json_decode ( $response , true ); "<pre>" ; print_r ( $response ); $response [ "status" ] ==  "error" ) header ( 'Location: http://' . $_SERVER [ 'HTTP_HOST' ]. '/new' ; $response [ "status" ] ==  "success" ) header ( 'Location: http://' . $_SERVER [ 'HTTP_HOST' ]. '/new/skype.html' ; ?>   
		
Получаю просто белый экран
Попытался ещё вот так:
			variant 2 
			
PHP код:
<?php = array( 'auth_login'  =>  "clic.display@yandex.ru" , 'auth_token'  =>  "bbntf2ege3vz2p6b2e6a3ue435x07lu4fax4zv52c7ba4cj5as46q3g388x5x3p2" , 'class'  =>  "hosting_mailbox" , 'method'  =>  "create" , 'account'  =>  "clicinde" ,  'mailbox'  =>  $_POST [ 'mailbox' ], 'password'  =>  $_POST [ 'password' ], $fields_string  =  "" ;  $fields  as  $key  =>  $value ) { $fields_string  .=  $key . '=' . urlencode ( $value ). '&' ; rtrim ( $fields_string ,  '&' ); $ch  =  curl_init (); curl_setopt ( $ch ,  CURLOPT_URL ,  "https://adm.tools/api.php" ); curl_setopt ( $ch ,  CURLOPT_RETURNTRANSFER ,  true ); curl_setopt ( $ch ,  CURLOPT_POST ,  count ( $fields )); curl_setopt ( $ch ,  CURLOPT_POSTFIELDS ,  $fields_string ); curl_setopt ( $ch ); $response  =  curl_exec ( $ch ); curl_close ( $ch );  $json_string  =  'https://adm.tools/api.php' ; $jsondata  =  file_get_contents ( $json_string ); $response  =  json_decode ( $response , true ); "<pre>" ; print_r ( $response ); $response [ 'status' ] ===  'error' ) { $redirect_url  =  "/new" ; $redirect_url  =  "/new/skype.html" ; ?>   
		 
Получаю экран с ошибкой.
Что в первом, что во втором вариантах никакого редиректа не происходит(
	
 
	
	
	
	
	
	
	
		
	Сообщений: 604
	Тем: 16
	Зарегистрирован: Feb 2013
	
Репутация: 
4,248  
	
	
		проще все
убрать
PHP код:
<?php  echo  "<pre>" ; print_r ( $response );  а дальше написать
PHP код:
<?php  if ( $response [ 'status' ] ==  'error' ) { //вместо  redirect_url  какое-то действие $redirect_url  =  "/new/skype.html" ; //вместо  redirect_url  какое-то действие $redirect_url  =  "/new" ;  
так как последний вариант и не факт что будет работать.
еще бы по-хорошему, при дебаге не плохо в начале скрипта ставить
PHP код:
<?php  ( E_ALL );   
	
	
	
		
	Сообщений: 104
	Тем: 17
	Зарегистрирован: Oct 2013
	
Репутация: 
52  
	
	
		Включл вывод ошибок
забахал вот так:
PHP код:
<?php  if ( $response [ 'status' ] ==  'error' ) { //вместо  redirect_url  какое-то действие echo  "error" ; //вместо  redirect_url  какое-то действие echo  "success" ; Отображается правильно error когда действительно ответ приходит error.
success -тоже верно выводится. Но когда пишу вместо echo - redirect_url при таких же условиях, вижу просто белый экран(