2010-01-21 11 views
0

J'essaie d'utiliser du savon pour appeler un service Web mais je reçois toujours l'erreur suivante "Attention: SoapClient :: SoapClient(): Impossible de définir le fichier de clé privée ".PHP SoapClient Avertissement: SoapClient :: SoapClient(): Impossible de définir le fichier de clé privée

Je suppose que l'erreur vient du fait que le fichier .cer que j'utilise n'inclut que la clé publique et pas de clé privée. Mais je ne suis pas sûr d'une autre façon d'utiliser le fichier .cer. Si je n'utilise pas le fichier .cer je peux me connecter très bien et je suis en mesure d'appeler et de recevoir des résultats lorsque j'utilise la méthode __getFunctions(). Cependant, quand j'essaye d'employer d'autres méthodes j'ai besoin d'être autorisé et cela mène au problème. Voici le code simple que j'essaie d'utiliser. S'il vous plaît laissez-moi savoir si plus d'informations sont nécessaires.

ini_set('display_errors',1); 
error_reporting(E_ALL); 

ini_set('soap.wsdl_cache_enabled', 0); 
$username = 'user'; 
$password = 'pass'; 

$ns = 'GatewayEDI.WebServices'; 
$auth = array(); 
$auth['User'] = new SOAPVar($username, XSD_STRING, null, null, null, $ns); 
$auth['Password'] = new SOAPVar($password, XSD_STRING, null, null, null, $ns); 
$headerBody = new SOAPVar($auth, SOAP_ENC_OBJECT); 
$header = new SOAPHeader($ns, 'AuthSOAPHeader', $headerBody); 

$client=new SoapClient('https://url/Service.asmx?WSDL', 
        array(
        'local_cert' => 'file.cer' 
        )); 

$client->__setSOAPHeaders(array($header)); 

$param = array(
    'X12Input'=>"testing", 
    "GediPayerID"=>"52", 
    "ResponseDataType"=>"Xml" 
); 

//this leads to private key error 
echo $result = $client->DoInquiryByX12Data($param,$header); 

Répondre

2

Je crois que votre .pem/fichier .cer doit avoir votre clé privée en elle:

-----BEGIN RSA PRIVATE KEY----- 
# base64 encoded key 
-----END RSA PRIVATE KEY----- 
-----BEGIN CERTIFICATE----- 
# base64 encoded cert 
-----END CERTIFICATE----- 

Si votre première ligne de clé privée a une directive similaire à « Proc-Type: 4, CRYPTEES "vous devrez inclure l'option" phrase secrète "lors de la construction de votre SoapClient(). Vous pouvez aussi supprimer l'exigence de mot de passe avec OpenSSL, ma syntaxe est un peu rouillé et vous pouvez vérifier si vous l'essayez:

openssl rsa -in /path/to/private.key -out /path/to/private.key 

« private.key » devrait être juste la clé privée dans ce contexte (vous pouvez l'ajouter dans le fichier .cer/.pem après la suppression de la phrase secrète

+0

Je n'ai pas de clé privée pour ce certificat Puis-je créer ma propre clé privée et l'ajouter au certificat? – IHateSoap

+0

Nope – Owen

+0

, ils prétendent qu'il n'y a pas de clé privée, mais je ne vois pas comment cela fonctionnerait sans une clé privée. Si j'essaie de retirer le certificat Je ne l'utilise pas du tout, j'ai une erreur d'authentification. Êtes-vous en train de dire que vous ne savez pas comment cela pourrait fonctionner sans clé privée? – IHateSoap