SoapFault exception: [HTTP] Bad Request

darkprototype
Invité n'ayant pas de compte PHPfrance

01 déc. 2015, 13:16

Bonjour,
J'ai un problème lors d'un appel d'un wsdl https via un certificat, des que j'appel une fonction avec c'est paramètre j'ai une erreur SoapFault exception: [HTTP] Bad Request je ne sais pas d'ou cela provient.
J'ai effectué un test sous SoapUi cela fonctionne correctement.
Pouvez-vous m'aider s'il vous plait?

exemple du code :
$wsdl                 = "https://xxxx/xxxx.svc?wsdl";
	$certificat           =  'xxxx.pem';
$soapClient = new SoapClient($wsdl  , array( 'trace'=> true, 'soap_version'=> SOAP_1_2, 'exceptions' => 1,'local_cert' => $certificat));

try {	


	/*var_dump($soapClient->__getFunctions());
	var_dump($soapClient->__getTypes());*/
	$param = array("request"=>array("id" => "personne"));
								
		
   $result = $soapClient->__soapCall('reponse',array($params) );
	
  
} 



catch( Exception $Ex )
{
   	echo "Exception SOAP:<br>";

	var_dump( $Ex );
print $Ex;

}

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

01 déc. 2015, 14:55

Bonjour,
[HTTP] Bad Request
Cela veut dire que le serveur distant te renvoie une erreur 400 car il ne comprend pas ta demande.

Impossible pour nous sans connaitre le serveur distant ni sa doc de te dire pourquoi il te répond cela...
Vérifie que les paramètres passés soient corrects, si c'est le cas, contacte l'administrateur du serveur distant pour connaitre l'origine du problème
Quand tout le reste a échoué, lisez le mode d'emploi...

darkprototype
Invité n'ayant pas de compte PHPfrance

01 déc. 2015, 17:15

Merci de ta réponse, j'ai pu un peu avancer le problème vient de la configuration que j'ai effectué sous soapUi que je n'arrives pas a faire sous soapclient.
Voici le bloc qui doit être configurer sous soapclient
con:outgoing>

<con:name>Comparator</con:name>

<con:username>xxxxxxx</con:username>


-<con:entry type="Signature" password="xxxxx" username="xxxxxxxx">


-<con:configuration>

<crypto>resul.pfx</crypto>

<keyIdentifierType>1</keyIdentifierType>

<signatureAlgorithm>http://www.w3.org/2000/09/xmldsig#rsa-sha1</signatureAlgorithm>

<signatureCanonicalization>http://www.w3.org/2001/10/xml-exc-c14n#</signatureCanonicalization>

<useSingleCert>true</useSingleCert>

<digestAlgorithm>http://www.w3.org/2000/09/xmldsig#sha1</digestAlgorithm>

<customTokenValueType/>

<customTokenId/>


-<signaturePart>

<![CDATA[<xml-fragment xmlns:con="http://eviware.com/soapui/config"> <con:entry key="id" value=""/> <con:entry key="name" value="To"/> <con:entry key="enc" value="Element"/> <con:entry key="namespace" value="http://www.w3.org/2005/08/addressing"/> </xml-fragment>]]>

</signaturePart>

</con:configuration>

</con:entry>


-<con:entry type="Timestamp">


-<con:configuration>

<timeToLive>600</timeToLive>

<strictTimestamp>true</strictTimestamp>

</con:configuration>

</con:entry>

</con:outgoing>
Pour simplifié, le certificat doit être appele au moment ou on appel une fonction du wsdl hors avec la configuration actuelle via local_cert cela ne fonctionne pas.Sous soapUi cela fonctionne car on configure le outgoing wss qui appelle bien le certificat au moment de l'appel de la fonction avec ces valeur