Cuando en nuestro sistema web necesitamos enviar un certificado digital para demostrar que somos un emisor válido, tenemos normalmente un archivo .cer, el cual no es compatible con el servidor Apache, por lo que debemos convertirlo a un formato compatible, el cual sería .pem.
Para realizar la conversión se necesitará openssl, el cual ya viene instalado en la mayoría de las distribuciones de Linux. El comando es el siguiente.
openssl x509 -inform der -in certificado.cer -out certificado.pem
Si hay que realizar el envío o la conexión desde PHP, podemos utilizar CURL para realizarlo.
$process = curl_init(); curl_setopt($process, CURLOPT_URL, $url); curl_setopt($process, CURLOPT_PORT , 443); curl_setopt($process, CURLOPT_VERBOSE, 1); curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: text/xml', 'charset=utf-8')); curl_setopt($process, CURLOPT_POSTFIELDS, $xml); curl_setopt($process, CURLOPT_SSL_VERIFYPEER, 1); curl_setopt($process, CURLOPT_SSL_VERIFYHOST, 2 ); curl_setopt($process, CURLOPT_SSLCERT, realpath($certificado)); curl_setopt($process, CURLOPT_SSLCERTPASSWD, $clave); curl_setopt($process, CURLOPT_RETURNTRANSFER, true); curl_setopt($process, CURLOPT_TIMEOUT, 15 ); curl_setopt($process, CURLOPT_POST, true); $return = curl_exec($process);
Donde
- $url: Es la variable que contiene la dirección del webservice a donde se conectará y enviará un XML
- $xml: Es la variable donde previamente se ha cargado o almacenado el XML que se requiere enviar al webservice
- $certificado: Es la ruta del certificado en formato .pem
- $clave: Es la contraseña del certificado
Si queremos ver en bruto la respuesta del webservice se puede hacer de la siguiente manera
header("Content-Type: text/plain"); var_dump($return);
Con lo cual podremos visualizar en pantalla toda la respuesta del webservice, para poder saber como recuperar la información, o si hubo algún error. Cada webservice es diferente, por lo que necesitaremos tener la documentación del mismo para saber el manejo de errores y respuestas.
0 Comentarios