2010-10-22 4 views
2

J'essaie de communiquer avec le serveur eWay et tout fonctionnait jusqu'à ce que nous ayons besoin de passer à une API différente. Le problème est que SoapClient crée un espace de noms différent pour l'en-tête (qui inclut l'authentification) puis du corps, ce qui, évidemment, ne me donne aucun résultat. Au lieu de cela, je reçois les serveurs d'eWay disant qu'il doit avoir les informations d'authentification.Pourquoi le SoapClient de PHP crée-t-il un espace de noms différent pour l'en-tête que pour le corps?

Voici mon code:

$client = new SoapClient($url.'?WSDL', array('trace'=>TRUE)); 

    // Set our SOAP Headers for authentication 
    $header_body = array(
     'eWAYCustomerID' => $gateway['customer_id'], 
     'Username'   => $gateway['username'], 
     'Password'   => $gateway['password'] 
    ); 

    $header_var = new SoapVar($header_body, SOAP_ENC_OBJECT);  
    $header = new SOAPHeader('http://www.eway.com.au/gateway/managedpayment', 'eWAYHeader', $header_body); 
    //$client->__setSoapHeaders($header); 

    try { 
     $response = $client->__soapCall($action, $xml, null, $header); 
    } catch (SoapFault $e) 
    { 
     echo 'SOAP Fault: '. $e->getMessage()."<br>\n"; 
    } 

Comme vous pouvez le voir, je l'ai essayé avec et sans l'aide d'un SoapVar l'en-tête, le tout avec pas de chance.

Voici la requête XML qui est en cours de création:

<soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://www.eway.com.au/gateway/managedpayment" xmlns:ns2="http://www.eway.com.au/gateway/managedpayment"> 
<soap-env:header> 
    <ns2:ewayheader> 
     <ewaycustomerid>87654321</ewaycustomerid> 
     <username>[email protected]</username> 
     <password>test123</password> 
    </ns2:ewayheader> 
</soap-env:header> 
<soap-env:body> 
    <ns1:createcustomer>...</ns1:createcustomer> 
+0

Avez-vous trouvé une solution? –

Répondre

0

Cela peut être une question évidente, mais avez-vous essayé en spécifiant le nom de type et espace de nommage dans le SoapVar() appeler?

Questions connexes