Cita:
Empezado por canfora
Buenos días,
Me acabo de poner con la programación en php para el envío de XML a TBAI a Gipuzkoa.
Estoy utilizando el código que sugerís a continuación y recibo en todo momento el siguiente error:
"
No se puede conectar con la TBAI GIP.
Error: unable to use client certificate (no key found or wrong pass phrase?)
Respuesta de la TBAI GIP: 312
"
Tengo un certificado pfx, el cual indico en la línea de declaración del CURLOPT_SSLCERT y añado la siguiente linea:
curl_setopt($soap_do, CURLOPT_SSLCERTPASSWD, $pass);
Si utilizo una conexión más sencilla, como la que indico a continuación, recibo el siguiente error:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $server);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestXML);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
ERROR:
"
01
Rechazado
Baztertua
001
Error: No se ha utilizado certificado de cliente.
Errorea: Ez da erabili bezeroaren ziurtagiririk.
"
Muchísimas gracias por vuestra ayuda.
|
Hola Canfora, a ver si esto te puede ayudar, ya que llegué a ese punto, y finalmente la conexión me la validó (aunque ahora estoy con otro problema):
como te indica Bilbur, debes usar un certificado de tipo PEM, pero según he hecho yo, generando 3 ficheros PEM por separado (usando el comando openssl): el del cliente, el de la clave privada, y el de la autoridad certificadora:
Cita:
openssl pkcs12 -in abcd.pfx -out ca.pem -cacerts -nokeys
openssl pkcs12 -in abcd.pfx -out client.pem -clcerts -nokeys
openssl pkcs12 -in abcd.pfx -out key.pem -nocerts
|
No he podido poner el enlace de la fuente por ser un usuario nuevo
Y lo que tampoco tengo aún claro, es cómo hacer esta conversión de forma automática, sin necesidad de user input.
Al final, el código de la petición cURL es este:
Código PHP:
$xmlStr = file_get_contents($rutaFacturaXML);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSLCERT, PATH_TEMP . '/client.pem');
curl_setopt($ch, CURLOPT_SSLKEY, PATH_TEMP . '/key.pem');
curl_setopt($ch, CURLOPT_CAINFO, PATH_TEMP . '/ca.pem');
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $clave);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlStr);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml; charset=utf-8'));
$resp = curl_exec($ch);