#php #xml
#php #xml
Вопрос:
У меня небольшая проблема, из-за которой API, который я использую для части моего сервиса, использует статистику rsp для обработки сообщений об успехе / ошибках в XML.
Итак, мы используем форму для публикации данных, и она возвращает данные, подобные следующему примеру:
<rsp stat="ok"> <сообщение об успешном завершении="принято" transactionid="505eeb9c43969d4919c0a6b3f7a4dfbb" messageid="a92eff8d65cf48e9c6e96702a7b07400"/> </rsp>
Ниже приведена большая часть используемого скрипта :
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); // Задача: Замените заполнители в скобках вашими данными. // Например - curl_setopt($ch, CURLOPT_UsERPWD, 'SMSUser:PassW0rD#'); curl_setopt($ch, CURLOPT_USERPWD, "); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 100); $xml = curl_exec($ch); if (curl_error($ch)) { выведите "ОШИБКА ". curl_error($ch) ."n
"; } curl_close($ch); print_r($xml);
Единственная проблема заключается в том, что когда он анализируется и отображается с помощью команды print_r , по какой-то странной причине он отображается только через исходный код, и мы понятия не имеем, как отобразить его через страницу
В принципе, мы хотели бы систему, в которой, если rsp stat = «ok», то «Отправлено», иначе «не отправлено».
Ответ №1:
Ну, простой способ мог бы быть:
if (strpos($xml, 'stat="ok"') !== false) {
echo "sent";
} else {
echo "unsent";
}
Это заменило бы print($xml);
.
Комментарии:
1. if((@DOMDocument::loadHTML($xml))->getElementsByTagName(«rsp»)->item(0)->getAttribute(«stat»)===’ok’){ echo ‘отправлено’;}else{echo ‘неотправлено’; выдает new RuntimException(‘неожиданный ответ статистики: ‘.(@DOMDocument::loadHTML($xml))->getElementsByTagName(«rsp»)->item(0)-> getAttribute(«статистика»));}
Ответ №2:
Поместите этот код в функцию, и пусть функция вернет ваш $ xml.
Предполагая, что у вас есть функция с именем getRspStat(), вы могли бы просто сделать что-то вроде:
echo getRspStat();
Ответ №3:
Если вы сделаете что-то подобное:
(смотрите также на CodePad.org )
function xmlRequestWasSuccessful($xml) {
$result = simplexml_load_string($xml);
$result = (string)$result['stat'];
if ($result == 'ok') {
return true;
} else {
return false;
}
}
$xml = '<rsp stat="ok">
<success msg="accepted" transactionid="505eeb9c43969d4919c0a6b3f7a4dfbb" messageid="a92eff8d65cf48e9c6e96702a7b07400"/>
</rsp>';
$stat = xmlRequestWasSuccessful($xml);
в результате вы получите логическое значение ‘true’ ( $stat
переменная). Адаптируйте его для поддержки случая, когда возникает ошибка. Поскольку нет подробностей о том, как это выглядит при возникновении ошибки, вот как вы можете сделать это сейчас:
if ($stat) {
// do something on success ('sent' something)
} else {
// do something on success (display 'unsent' message for example)
}