2012-10-17 3 views
1

Я попытался использовать пример, упомянутый в нижеприведенном URL-адресе. но запутались, как они строят $ wrapper здесь. Может ли кто-нибудь сказать мне, как создать оболочку и что она должна содержать. http://www.sis.utoronto.ca/web_services/code_samples.html.Могу ли я получить образцы кода, работающие с php и wsse

Может кто-нибудь помочь мне здесь, так как я использую wsse в первый раз, поэтому не знаю, как его использовать. Я делаю вызов мыла от PHP до .net wsse.

Пожалуйста, дайте мне знать, как передать заголовки в этом примере.

<?php 
    class WSSESoapClient extends SoapClient {                       
protected $wsseUser; 
protected $wssePassword; 

public function setWSSECredentials($user, $password) { 
    $this->wsseUser = $user; 
    $this->wssePassword = $password; 
} 

public function __doRequest($request, $location, $action, $version, $one_way = 0) { 
    if (!$this->wsseUser or !$this->wssePassword) { 

     return parent::__doRequest($request, $location, $action, $version, $one_way = 0); 
    } 

    // get SOAP message into DOM 
    $dom = new DOMDocument(); 
    $dom->loadXML($request); 
    $xp = new DOMXPath($dom); 
    $xp->registerNamespace('SOAP-ENV', 'http://schemas.xmlsoap.org/soap/envelope/'); 

    // search for SOAP header, create one if not found 
    $header = $xp->query('/SOAP-ENV:Envelope/SOAP-ENV:Header')->item(0); 
    if (!$header) { 
     $header = $dom->createElementNS('http://schemas.xmlsoap.org/soap/envelope/', 'SOAP-ENV:Header'); 
     $envelope = $xp->query('/SOAP-ENV:Envelope')->item(0); 
     $envelope->insertBefore($header, $xp->query('/SOAP-ENV:Envelope/SOAP-ENV:Body')->item(0)); 
    } 

    // add WSSE header 
    $usernameToken = $dom->createElementNS('http://schemas.xmlsoap.org/ws/2002/07/secext', 'wsse:UsernameToken'); 
    $username = $dom->createElementNS('http://schemas.xmlsoap.org/ws/2002/07/secext', 'wsse:Username', $this->wsseUser); 
    $password = $dom->createElementNS('http://schemas.xmlsoap.org/ws/2002/07/secext', 'wsse:Password', $this->wssePassword); 
    $usernameToken->appendChild($username); 
    $usernameToken->appendChild($password); 
    $header->appendChild($usernameToken); 

    // perform SOAP call 
    $request = $dom->saveXML(); 

    return parent::__doRequest($request, $location, $action, $version, $one_way = 0); 
} 

    } // class WSSESoapClient 

    $wsdl = 'Mywsdlurl'; 
    $sClient = new WSSESoapClient ($wsdl,array("trace" => 1)); 


    $sClient->setWSSECredentials('username', 'password'); 

    $wrapper->AccountName = new SoapVar("NEw User", XSD_STRING); 
    $wrapper->AccountInfo->propertyID = new SoapVar(2, XSD_STRING); 


    try { 
$result = $sClient->CreateAccount($wrapper);  
print_r($result); 
} catch (SoapFault $fault) { 
print("Fault string: " . $fault->faultstring . "\n"); 
print("Fault code: " . $fault->detail->WebServiceException->code . "\n"); 
} 

echo $sClient->__getLastRequest(); 
// "<br>" . 
// $sClient->__getLastResponse(); 

>

Когда я проверить __getLastRequest это не прикрепление заголовки, определенные в _doRequest;

Пожалуйста, дайте мне знать, что я здесь делаю неправильно.

+0

Не могли бы вы показать код, который у вас есть, и указать, что именно не так? –

ответ

0

Я внедрил UserNameToken, используя PasswordDigest в модуле Moodle, который интегрируется с веб-службами Skillsofts OLSA.

Взгляните: http://code.google.com/p/moodle2-skillsoft-activity/source/browse/trunk/skillsoft/olsalib.php#40

Это где я создать оболочку вокруг PHP SoapClient поддерживать отправку UserNameToken с паролем переваривается, вы можете настроить это сделать простой пароль и т.д. и т.п.

It имеет некоторый код Moodle для получения таких вещей, как прокси-сервер, и т. д., и где «кэшировать» WSDL на файловой системе (ускоряет настройку клиента), а не каждый раз, когда вы настраиваете его на перенос WSDL и т. д.)

Затем посмотрите на: http://code.google.com/p/moodle2-skillsoft-activity/source/browse/trunk/skillsoft/olsalib.php#483

Где я называю одну из веб-сервисов, и вы можете увидеть, как клиент настроен и как передается имя пользователя и пароль.