Ответ SOAP не отображается в формате XML - PullRequest
0 голосов
/ 01 июня 2018

Я новичок в SOAP.Я пытаюсь создать SOAP API, который преобразует длинный URL-адрес в короткую ссылку.

Вот мой код

В shortlen_url.php (Страница клиента)

require_once "nusoap/lib/nusoap.php";
if(isset($_REQUEST['url']))
{
    $longUrl= $_REQUEST['url'];
    $currentPath = $_SERVER['PHP_SELF']; 
    $pathInfo = pathinfo($currentPath);
    $hostName = $_SERVER['HTTP_HOST'];
    $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https://'?'https://':'http://';
    $client = new nusoap_client($protocol.$hostName.$pathInfo['dirname']."/functionalities.php?wsdl");
    $client->soap_defencoding = 'UTF-8';
    $client->decode_utf8 = false;
    $error = $client->getError();
    $doc = new DomDocument('1.0');
    $doc->preserveWhiteSpace = false;
    $doc->formatOutput = true;

    $root = $doc->createElement('root');
    $root = $doc->appendChild($root);


    $result = $client->call("getProd", array("longUrl" => $longUrl));
    $resultScheme = parse_url($result);
    if(isset($resultScheme['scheme']))
    {
        if($resultScheme['scheme'] == "http" || $resultScheme['scheme'] == "https")
        {
            $occ = $doc->createElement('message');
            $occ = $root->appendChild($occ);
            $child = $doc->createElement('shortURL');
            $child = $occ->appendChild($child);
            $value = $doc->createTextNode($result);
            $value = $child->appendChild($value);

            $child = $doc->createElement('Success');
            $child = $occ->appendChild($child);
            $value = $doc->createTextNode('A URL will be received by C4C which will be embedded in the SMS and sent to the customer');
            $value = $child->appendChild($value);
        }       
    }   
    else
    {
        $occ = $doc->createElement('error');
        $occ = $root->appendChild($occ);
        $child = $doc->createElement('errorMessage');
        $child = $occ->appendChild($child);
        $value = $doc->createTextNode($result);
        $value = $child->appendChild($value);

        $child = $doc->createElement('Failure');
        $child = $occ->appendChild($child);
        $value = $doc->createTextNode('A task will be created and assigned to the System Admin.');
        $value = $child->appendChild($value);
    }
    if ($client->fault)
    {
        $occ = $doc->createElement('error');
        $occ = $root->appendChild($occ);

        $child = $doc->createElement('errorMessage');
        $child = $occ->appendChild($child);
        $value = $doc->createTextNode($result);
        $value = $child->appendChild($value);

        $child = $doc->createElement('Failure');
        $child = $occ->appendChild($child);
        $value = $doc->createTextNode('A task will be created and assigned to the System Admin.');
        $value = $child->appendChild($value);
    }

    // get completed xml document
    $xml_string = $doc->saveXML() ;
    echo $xml_string;
}
?>

В functionsities.php (Страница сервера)

<?php
require_once "nusoap/lib/nusoap.php";

function getProd($longUrl) {
    function get_bitly_short_url($longUrl,$login,$appkey,$format='txt') {
        $connectURL = 'http://api.bit.ly/v3/shorten?login='.$login.'&apiKey='.$appkey.'&uri='.$longUrl.'&format='.$format;
        return curl_get_result($connectURL);
    }

    function curl_get_result($url) {
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }

    $short_url = get_bitly_short_url($longUrl,'x_xxxxxxxxxx','x_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx','txt');
    return $short_url;
}

$server = new soap_server();
$server->configureWSDL("ShortLink", "urn:ShortLink");
$server->register("getProd",
    array("shortLink" => "xsd:string"),    
    array("return" => "xsd:string"),
    "urn:shortLink",
    "urn:shortLink#getProd",
    "rpc",
    "encoded",
    "Converting Long Url to Short Link");


$server->service(file_get_contents("php://input"));

?>

Когда я нажимаю на этот API

http://localhost/myproject/shorten_url.php?url=https://www.w3schools.com/php/showphp.asp?filename=demo_func_string_strpos

Он отображает правильный результат, но в строковом формате, а не в формате XML

enter image description here

когда я нажимаю Ctrl + U, он показывает код вида, подобный этому

enter image description here

Как получить ответ в xmlформат (не в строке), когда я нажимаю ссылку.Теперь это приводит к строковому формату.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 01 июня 2018

Формат XML - это строка.Вроде как квадрат - это прямоугольник, но не все прямоугольники - это квадраты.JSON - это еще один строковый формат.

Если вы пытаетесь заставить браузер распознавать его как XML (как, например, сказать «эй, я знаю, что вы ожидаете прямоугольник, и я отправляю вам»один, но, в частности, это также квадрат! "), вы можете добавить заголовок через PHP, поместив эту строку , прежде чем что-либо печатать на экране :

header("Content-type: text/xml");
...