2016-05-04 24 views
2

こんにちは、私の悪い英語のために申し訳ありません。パスワード付きのSSL証明書付きの石鹸サービス(PHP)

パスワードで保護された証明書を使用してSOAPサービスにアクセスする必要があります。私はphpで新しく(codeigniter 2のPHP 5.4で)、私のためにはうまくいかないオプションをいくつか試しました。

オプションA:私は、このオプションを試してみました

const WSDL = 'https://sedeapl.dgt.gob.es:8080/WS_IEST_COMP/descargaArchivoMicrodatosService?wsdl'; 

const XMLNS = 'https://sedeapl.dgt.gob.es:8080/WS_IEST_COMP/descargaArchivoMicrodatosService'; 

const LOCAL_CERT_PASSWD = 'HERE I HAVE THE PASS OF THE CERT'; 
const LOCAL_CERT = './certificados/Certificados.p12'; 

private $client; 

私はアクセスに定数を持って

$this->client = new SoapClient(self::WSDL, array(
       "trace"   => 1, 
       "exceptions" => true, 
       "local_cert" => self::LOCAL_CERT, 
       "uri"   => "urn:xmethods-delayed-quotes", 
       "style"   => SOAP_RPC, 
       "use"   => SOAP_ENCODED, 
       "soap_version" => SOAP_1_2 , 
       "location"  => self::XMLNS 
      ) 
     ); 

オプションB:私が持っている

$this->$client = new SoapClient(self::WSDL, array('local_cert' => self::LOCAL_CERT)); 

passwをどのように追加するか考えないord。これらのソリューションは私がここでstackoverflowで見つけたものです。どちらも、私は同じエラーがあります:

SoapClient :: SoapClient():ラッパー "https"を見つけることができませんでした。

const LOCAL_CERT = 'certificados/Certificados.p12'; 
const LOCAL_CERT = 'Certificados.p12'; 
const LOCAL_CERT = './certificados/Certificados.p12'; 

誰もが私が何ができるかについての考えを持っている:

私は、証明書のそれらのルートを試してみましたphp.iniの

で "拡張子= php_openssl.dllを" uncomentedています。どうもありがとうございました!

+0

あなたはどのようなOSを使うのですか? がこのパス正しいサービスにアクセスするためのコードで のproyect ソースファイル アプリケーション certificados Certificados.pem コントローラ コントローラー: –

答えて

1

あなたは次のことをしようとし、次のコマンドで
openssl pkcs12 -in Certificados.p12 -out Certificados.pem -clcerts

を行うことができますLinuxでの
を.PEMした.p12を変換するために必要なすべての最初:

$options = array(); 

$options['trace'] = true; 
$options['exceptions'] = true; 
$options['local_cert'] = 'path to your .pem file'; 
$options['passphrase'] = self::LOCAL_CERT_PASSWD; 

try { 
    $soapClient = new SoapClient(self::WSDL, $options); 

    echo '<pre>';   
    // wsdl methods 
    print_r($soapClient->__getFunctions());   
    echo '</pre>'; 
} 
catch (Exception $e) 
{ 
    echo $e->getMessage(), '<br />', $e->getTraceAsString(); 
} 
+0

今私は中Certificados.pemがありますか? $ options ['local_cert'] = './certificados/Certificados.pem'; エラーが発生しました: メッセージ:SoapClient :: SoapClient(): "https"というラッパーを見つけることができませんでした。 メッセージ:SoapClient :: SoapClient():I/O警告:外部エンティティ "https://sedeapl.dgt.gob.es:8080/WS_IEST_COMP/descargaArchivoMicrodatosService?wsdl"の読み込みに失敗しました – Noark

+0

このコメントは、フォーマット。 – Noark

+0

@Noark php_opensslを有効にした後でWebサーバーを再起動しましたか?また、file_get_contents(self :: WSDL)を試みてください。 –

関連する問題