Um dos certificados da prefeitura de João Pessoa está expirado e por conta disso nossa integração parou de funcionar. Em contato com eles, foi informado que estão resolvendo mas não tinham previsão ainda para renovação do certificado.
Hoje, fazem 33 dias desse problema
Recentemente, resolvemos fazer alguns testes na tentativa de arrumar uma solução de fazer funcionar a integração sem precisar esperar pela boa vontade deles.
Conseguimos fazer funcionar, após alteração dessas variáveis, CURLOPT_SSL_VERIFYHOST e CURLOPT_SSL_VERIFYPEER. Atualmente está assim.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2000);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 4000);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSLVERSION, 0);
curl_setopt($ch, CURLOPT_CAINFO, APPLICATION_PATH . '/ca.pem');
curl_setopt($ch, CURLOPT_SSLCERT, APPLICATION_PATH . '/../data/wsdls/nfse/certificate.pem');
curl_setopt($ch, CURLOPT_SSLKEY, APPLICATION_PATH . '/private.pem');
curl_setopt($ch, CURLOPT_KEYPASSWD, 'xxxxxxxxx');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'xxxxxxxxx');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_CERTINFO, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_HTTPHEADER, $parameters);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
Conseguimos fazer funcionar em nosso ambiente local, porém em produção está retornando o erro “SSL connect error”.
Não entendo muito dessa parte, mas ao meu ver, é como se em produção nosso servidor fosse mais rigoroso e não deixa passar havendo qualquer erro com o certificado.
Alguém pode me explicar o que pode ser e se tem alguma sugestão? Agradeço a ajuda!