Client SOAP via HTTPS avec des certificats SSL sur les deux côtés
Je dois développer un Client de SAVON, et le fournisseur de m'envoyer ce spécifications:
- Seront transmisent à l'aide de HTTPS via la propriété intellectuelle, et sera distribué sous forme de documents XML qui s'adaptent à différentes defnitions de schéma XML.
- La Communication est synchrone, le tiers doit attendre la réponse.
- Chaque demande et la réponse sera signé.
Je suis en utilisant la classe soapClient de PHP, et tout fonctionne bien, sauf quand j'essaie d'utiliser ma clé privée pour établir la communication avec le serveur:
Code: WSDL | Message: SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://remoteserver/CustomerManagementService?wsdl' : failed to load external entity "https://remoteserver/CustomerManagementService?wsdl
Puis j'ai essayé de créer un .fichier pem, il contient la clé privée concaténé avec mon certificat, comme je l'ai lu dans: comment envoyer une requête SOAP avec certificat SSL dans le PHP?
Mais il renvoie toujours une erreur:
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://remoteserver:80/CustomerManager/proxy/CustomerManagementService?WSDL%2FGWTCommonResources%2Fwsdl%2FGWTCommonMessages' : failed to load external entity "http://remoteserver:80/CustomerManager/proxy/CustomerManagementService?WSDL%2FGWTCommonResources%2Fwsdl%2FGWTCommonMessages
Je me demande si il existe un moyen d'obtenir exactement les données brutes qui est envoyé par la classe soapClient de PHP. Et où je dois définir le certificat du fournisseur.
J'ai déjà essayé avec "$client->__getLastRequest()", mais je suis un NUL. C'est mon code:
$client = new anotherSoapClient($service, array(
'local_cert' => $pem,
'style' => SOAP_RPC,
'use' => SOAP_ENCODED,
'soap_version' => SOAP_1_2,
'authentication'=> SOAP_AUTHENTICATION_DIGEST,
'ssl' => array(
'ciphers'=> "SHA1",
'verify_peer' => false,
'allow_self_signed' => true
),
'https' => array(
'curl_verify_ssl_peer' => false,
'curl_verify_ssl_host' => false
),
'cache_wsdl' => WSDL_CACHE_NONE,
'cache_ttl' => 86400,
'trace' => true,
'exceptions' => true,
));
//Test connection
echo BR.'Functions: <pre>';var_dump($client->__getFunctions());echo '</pre>';
$XMLrequest = $client->prepareRequest($email);
$response = $client->__anotherRequest('getCustomerInfo', $XMLrequest);
echo "REQUEST:\n" . $client->__getLastRequest() . "\n";
En passant, je suis en utilisant PHP 5.4.9 sur mon ordinateur local et le serveur PHP 5.3.10 et anotherSoapClient est une classe qui a l'extension de PHP classe soapClient: PHP soapClient envoyer XML personnalisé
Vous devez vous connecter pour publier un commentaire.
Pour le débogage des propositions de votre requête SOAP vous devez étendre la classe SoapClient.
Et ensuite l'utiliser dans votre demande:
Espère qu'il vous aidera à déboguer votre code!
Vous avez probablement besoin de spécifier la suite SoalClient options: