Мыльный сервер php из файла WSDL - PullRequest
0 голосов
/ 26 октября 2018

Привет. Я пытаюсь воссоздать SOAP-сервер для старого клиента, поскольку исходный сервис давно отсутствует.

. Клиент - MSN Messanger 7.5

. Остается только файл службы wsdl.: http://web.archive.org/web/20050311202052id_/http://appdirectory.messenger.msn.com:80/AppDirectory/AppDirectory.asmx?WSDL который клиент даже не запрашивает

, поэтому я начал писать это в соответствии с WSDL-файлом, используя собственный класс SoapServer в php в режиме не-wsdl (потому что клиент его не использует)

AppDirectory.php

<?php
require_once ('classes2/App.php');

$options= array('uri'=>'http://appdirectory.messenger.msn.com/AppDirectory/AppDirectory.php', 'location' => 'http://appdirectory.messenger.msn.com/AppDirectory/AppDirectory.php');


$server = new SoapServer(NULL, $options);
$server->setClass('AppDirectory');
$server->setObject(new AppDirectory());
$server->handle();
?>

App.php

<?php 
class AppDirectory
{

    /**
     * Gets Filtered data obout P3, P4 Apps.
     *
     * @param string $locale
     * @param int $Page
     * @param int $Kids
     * @param int $AppType
     * @access public
     * @return schema $my_xml
     */
    public function GetFilteredDataSet2($locale, $Page, $Kids, $AppType) 
    {
        $my_xml = 
        "
<Entry>
  <EntryID>1</EntryID>
  <Error>Error</Error>
  <Locale>en-us</Locale>
  <Kids>1</Kids>
  <Page>1</Page>
  <Category>50</Category>
  <Sequence>10</Sequence>
  <Name>File Sharing</Name>
  <Description>Share Files Between Two Users!</Description>
  <URL>http://dxing.si/msn/AppDirectory/P4Apps/FileSharing/en/fileSharingCtrl.htm</URL>
  <IconURL>http://example.org/example.png</IconURL>
  <PassportSiteID>0</PassportSiteID>
  <Type>Dir</Type>
  <Height>500</Height>
  <Width>500</Width>
  <Location>side</Location>
  <MinUsers>2</MinUsers>
  <MaxUsers>2</MaxUsers>
  <PassportSiteID>0</PassportSiteID>
  <EnableIP>False</EnableIP>
  <ActiveX>True</ActiveX>
  <SendFile>True</SendFile>
  <SendIM>False</SendIM>
  <ReceiveIM>False</ReceiveIM>
  <ReplaceIM>False</ReplaceIM>
  <Windows>False</Windows>
  <MaxPacketRate>120</MaxPacketRate>
  <UserProperties>False</UserProperties>  
  <ClientVersion>7.5</ClientVersion>
  <AppType>0</AppType>  
  <Hidden>false</Hidden>
</Entry>
        ";  
        return new SoapVar('<ns1:GetFilteredDataSet2Result>'.$my_xml.'</ns1:GetFilteredDataSet2Result>' ,XSD_ANYXML);
    }

}
?>

- это запрос клиента и ответ сервера на: http://appdirectory.messenger.msn.com/AppDirectory/AppDirectory.php

===== REQUEST HERE =====
POST http://appdirectory.messenger.msn.com/AppDirectory/AppDirectory.php HTTP/1.1
Accept: */*
SOAPAction: "http://www.msn.com/webservices/Messenger/Client/GetFilteredDataSet2"
Content-Type: text/xml; charset=utf-8
Content-Length: 417
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media     Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 1.1.4322; MSN Messenger 7.5.0324)
Host: appdirectory.messenger.msn.com
Connection: Keep-Alive
Pragma: no-cache
Cookie: PreferencesMsn=eyJFeHBpcnlUaW1lIjo2MzcwNzE3NDkzMjQ4Njc4NjQsIlZlcnNpb24iOjF90; marketPref=en-xl; _EDGE_V=1; _SS=SID=00;     MUID=172ABDC4085E6ADF377BB6C10C5E6926

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GetFilteredDataSet2 xmlns="http://www.msn.com/webservices/Messenger/Client"><locale>en-US</    locale><Page>1</Page><Kids>-1</Kids><AppType>0</AppType></GetFilteredDataSet2></soap:Body></soap:Envelope>
===== REQUEST HERE =====

===== RESPONSE HERE =====
HTTP/1.1 200 OK
Date: Fri, 26 Oct 2018 16:11:43 GMT
Server: Apache/2.4.23 (Win64) PHP/5.6.25
X-Powered-By: PHP/5.6.25
Content-Length: 1568
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/xml; charset=utf-8

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://appdirectory.messenger.msn.com/AppDirectory/AppDirectory.php"     xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/    encoding/"><SOAP-ENV:Body><ns1:GetFilteredDataSet2Response><ns1:GetFilteredDataSet2Result>
<Entry>
  <EntryID>1</EntryID>
  <Error>Error</Error>
  <Locale>en-us</Locale>
  <Kids>1</Kids>
  <Page>1</Page>
  <Category>50</Category>
  <Sequence>10</Sequence>
  <Name>File Sharing</Name>
  <Description>Share Files Between Two Users!</Description>
  <URL>http://dxing.si/msn/AppDirectory/P4Apps/FileSharing/en/fileSharingCtrl.htm</URL>
  <IconURL>http://example.org/example.png</IconURL>
  <PassportSiteID>0</PassportSiteID>
  <Type>Dir</Type>
  <Height>500</Height>
  <Width>500</Width>
  <Location>side</Location>
  <MinUsers>2</MinUsers>
  <MaxUsers>2</MaxUsers>
  <PassportSiteID>0</PassportSiteID>
  <EnableIP>False</EnableIP>
  <ActiveX>True</ActiveX>
  <SendFile>True</SendFile>
  <SendIM>False</SendIM>
  <ReceiveIM>False</ReceiveIM>
  <ReplaceIM>False</ReplaceIM>
  <Windows>False</Windows>
  <MaxPacketRate>120</MaxPacketRate>
  <UserProperties>False</UserProperties>  
  <ClientVersion>7.5</ClientVersion>
  <AppType>0</AppType>  
  <Hidden>false</Hidden>
</Entry>
        </ns1:GetFilteredDataSet2Result></ns1:GetFilteredDataSet2Response></SOAP-ENV:Body></SOAP-ENV:Envelope>
===== RESPONSE HERE =====

Я знаю, что MSN вызывает GetFilteredDataSet2 и его нет в файле wsdl, но я думаю, что он должен возвращать то же самое, что и GetFilteredDataSet

Я также нашел реализацию этого клиента на c ++сервис здесь: https://github.com/veso266/AppDirectory/blob/master/cpp/soap/msnappdirectoryservice.cpp (метод MsnAppDirectoryService :: parseSoapResult) и его заголовочный файл: https://github.com/veso266/AppDirectory/blob/master/cpp/soap/msnappdirectoryservice.h

и после прочтения его метода parseSoapResult я думаю, что я делаю то же самое (вывод xml как SoapClient вMSN WANts), но это не работает, единственное, что я получаю, это: SoapError

, который в основном говорит, что Действия / Игры недоступны, и я должен снова открыть MSN

, такесли бы кто-нибудь мог мне немного помочь, потому что я не знаю, где вообще отлаживать

, также я, вероятно, что-то не так делаю, потому что в wsdl будет <s:complexType name="Entry">, если я просто возвращаю XML

Спасибо за ответ и наилучшие пожелания

...