2014-02-24 62 views
0

我嘗試使用SOAP庫從PHP創建一個新的對象與下面的代碼:上創建SOAP客戶端PHP的一個對象

<?php 
    try{ 
$wsdl="https://THE.IP.HERE:PORT/B1WS/WebReferences/LoginService.wsdl"; 
$client=new SoapClient($wsdl, array('location' => 'https://THE.IP.HERE:PORT/B1WS/Service.asmx', 'trace' => true)); 

var_dump($client); 

echo "Types: -> "; 
print_r($client->__getTypes()); 

echo "Functions: -> "; 
var_dump($client->__getFunctions()); 

$res=$client->Login(array(
'DatabaseServer' => 'THE.IP.HERE', 
'DatabaseName'  => 'DATABASE_NAME', 
'DatabaseType'  => 'dst_MSSQL2012', 
'DatabaseUsername' => 'USERNAME', 
'DatabasePassword' => 'DATABASE', 
'CompanyUsername' => 'USERNAME', 
'CompanyPassword' => '****', 
'Language'   => 'ln_English', 
'LicenseServer' => 'THE.IP.HERE:30000')); 
print_r($res); 


echo htmlentities($client->__getLastRequest()); 

} 
catch(SoapFault $e) 
{ 

echo htmlentities($client->__getLastRequest()); 

print_r($e); 
} 
?> 

,我也得到了以下錯誤:

Fatal error: Call to a member function __getLastRequest() on a non-object in C:\wamp\www\mysite.local\teste.php on line 40

這是行echo htmlentities($ client - > __ getLastRequest());關於崇高的文本。

我有我的PHP上激活的肥皂擴展。即時通訊使用PHP 5.4.12

任何人都可以幫助這個嗎?

三江源

+0

如果將這兩行放在try/catch塊外面,會發生什麼錯誤? '$ wsdl =「https://THE.IP.HERE:PORT/B1WS/WebReferences/LoginService.wsdl」; $ client = new SoapClient($ wsdl,array('location'=>'https://THE.IP.HERE:PORT/B1WS/Service.asmx','trace'=> true));' – infomaniac

+0

Thanks Danny期待你的答覆。 ($客戶端) 再次,線print_r($客戶端 - > __ getTypes())上的同樣的錯誤;在這一行中,它給了我一個注意:未定義的變量:客戶端在...線上:var_dump 而另一個 - 致命錯誤:調用成員函數__getTypes()在與最後一個通知相同的行上的非對象(...)中。 – user3306164

+0

我懷疑當你實例化SoapClient對象時某些東西正在破壞。嘗試設置你的錯誤級別儘可能高('error_reporting(E_ALL)'),看看是否有其他事情出現。 – infomaniac

回答

0

所以,我搬到這個頁面的在線服務器,並且我已經可以得到一些信息,在陣列..但我認爲這不是我suppost得到。

object(SoapClient)#1 (4) { 
    ["location"]=> 
    string(42) "https://MY.IP:PORT/B1WS/Service.asmx" 
    ["trace"]=> 
    int(1) 
    ["_soap_version"]=> 
    int(1) 
    ["sdl"]=> 
    resource(2) of type (Unknown) 
} 


Types: -> 
Array 
(
    [0] => struct LoginResponse { 
string SessionID; 
} 
    [1] => struct LogoutResponse { 
} 
    [2] => struct MsgHeader { 
string SessionID; 
} 
    [3] => struct Login { 
string DatabaseServer; 
string DatabaseName; 
DatabaseType DatabaseType; 
string CompanyUsername; 
string CompanyPassword; 
Language Language; 
string LicenseServer; 
} 
    [4] => string DatabaseType 
    [5] => string Language 
    [6] => struct Logout { 
} 
) 


Functions: -> array(4) { [0]=> string(38) "LoginResponse Login(Login $parameters)" [1]=> string(41) "LogoutResponse Logout(Logout $parameters)" [2]=> string(38) "LoginResponse Login(Login $parameters)" [3]=> string(41) "LogoutResponse Logout(Logout $parameters)" } 

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="LoginService"><SOAP-ENV:Body><ns1:Login><ns1:DatabaseServer>MY.IP:PORT</ns1:DatabaseServer><ns1:DatabaseName>MYDATABASE</ns1:DatabaseName><ns1:DatabaseType>dst_MSSQL2012</ns1:DatabaseType><ns1:CompanyUsername>user</ns1:CompanyUsername><ns1:CompanyPassword>pass</ns1:CompanyPassword><ns1:Language>ln_English</ns1:Language><ns1:LicenseServer>MY.IP:30000</ns1:LicenseServer></ns1:Login></SOAP-ENV:Body></SOAP-ENV:Envelope> 

SoapFault Object 
(
    [message:protected] => Invalid XML 
    [string:Exception:private] => 
    [code:protected] => 0 
    [file:protected] => /var/www/vhosts/domain.pt/httpdocs/teste.php 
    [line:protected] => 45 
    [trace:Exception:private] => Array 
     (
      [0] => Array 
       (
        [file] => /var/www/vhosts/domain.pt/httpdocs/teste.php 
        [line] => 45 
        [function] => __call 
        [class] => SoapClient 
        [type] => -> 
        [args] => Array 
         (
          [0] => Login 
          [1] => Array 
           (
            [0] => Array 
             (
              [DatabaseServer] => MY.IP:PORT 
              [DatabaseName] => MYDATABASE 
              [DatabaseType] => dst_MSSQL2012 
              [DatabaseUsername] => user 
              [DatabasePassword] => pass 
              [CompanyUsername] => companyuser 
              [CompanyPassword] => companypass 
              [Language] => ln_English 
              [LicenseServer] => MY.IP:30000 
             ) 

           ) 

         ) 

       ) 

      [1] => Array 
       (
        [file] => /var/www/vhosts/domain.pt/httpdocs/teste.php 
        [line] => 45 
        [function] => Login 
        [class] => SoapClient 
        [type] => -> 
        [args] => Array 
         (
          [0] => Array 
           (
            [DatabaseServer] => MY.IP:PORT 
            [DatabaseName] => MYDATABASE 
            [DatabaseType] => dst_MSSQL2012 
            [DatabaseUsername] => user 
            [DatabasePassword] => pass 
            [CompanyUsername] => companyuser 
            [CompanyPassword] => companypass 
            [Language] => companypass 
            [LicenseServer] => MY.IP:30000 
           ) 

         ) 

       ) 

     ) 

    [previous:Exception:private] => 
    [faultstring] => Invalid XML 
    [faultcode] => env:Sender 
    [detail] => stdClass Object 
     (
      [ErrorList] => stdClass Object 
       (
        [Error] => System Id = 37574776, Line Number = 2, Column Number = 1, Description = Invalid document structure 
       ) 

     ) 

) 
+0

第45行說:'LicenseServer'=>'MY.IP:30000')); – user3306164

+0

好的,它解決了。問題是我發送的參數比函數期望的要多。我的服務器正在以UTF-8工作,XML正在驗證UTF-16。謝謝 – user3306164