Utilizo WAMP en un entorno de desarrollo local y estoy intentando cargar una tarjeta de crédito pero me sale el mensaje de error:
cURL error 60: Problema con el certificado SSL: no se puede obtener el certificado del emisor local
He buscado mucho en Google y mucha gente me sugiere que descargue este archivo: cacert.pem, lo ponga en algún sitio y lo referencie en mi php.ini. Esta es la parte en mi php.ini:
curl.cainfo = "C:\Windows\cacert.pem"
Sin embargo, incluso después de reiniciar mi servidor varias veces y cambiar la ruta, tengo el mismo mensaje de error.
Uso WAMP desde los Módulos de Apache y tengo el ssl_module habilitado. Y desde las extensiones PGP tengo habilitado php_curl.
Sigue el mismo mensaje de error. ¿Por qué ocurre esto?
Ahora estoy siguiendo este arreglo: Cómo arreglar PHP CURL Error 60 SSL
Que sugiere que añada estas líneas a mis opciones de cURL:
curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, true);
¿Dónde puedo añadir opciones a mi cURL? Aparentemente no a través de la línea de comandos, ya que mi CLI no encuentra el comando "curl_setopt"
EDIT
Este es el código que estoy ejecutando:
public function chargeStripe()
{
$stripe = new Stripe;
$stripe = Stripe::make(env('STRIPE_PUBLIC_KEY'));
$charge = $stripe->charges()->create([
'amount' => 2900,
'customer' => Input::get('stripeEmail'),
'currency' => 'EUR',
]);
dd($charge);
// echo $charge[Input::get('stripeToken')];
return Redirect::route('step1');
}
Guzzle, que es utilizado por cartalyst/stripe, hará lo siguiente para encontrar un archivo de certificados adecuado para comprobar un certificado de servidor:
openssl.cafile
está establecido en su archivo php.ini.curl.cainfo
está establecido en su archivo php.ini./etc/pki/tls/certs/ca-bundle.crt
existe (Red Hat, CentOS, Fedora; proporcionado por el paquete ca-certificates)/etc/ssl/certs/ca-certificates.crt
(Ubuntu, Debian; proporcionado por el paquete ca-certificates)/usr/local/share/certs/ca-root-nss.crt
existe (FreeBSD; proporcionado por el paquete ca_root_nss)/usr/local/etc/openssl/cert.pem
(OS X; proporcionado por homebrew)C:\windows\system32\curl-ca-bundle.crt
(Windows)C:\windows\curl-ca-bundle.crt
existe (Windows)Querrá asegurarse de que los valores de las dos primeras configuraciones están correctamente definidos haciendo una simple prueba:
echo "openssl.cafile: ", ini_get('openssl.cafile'), "\n";
echo "curl.cainfo: ", ini_get('curl.cainfo'), "\n";
Alternativamente, intente escribir el archivo en las ubicaciones indicadas por #7 o #8.
Como estás usando Windows, creo que tu separador de ruta es '#39; (y '/' en Linux).
Prueba a utilizar la constante DIRECTORY_SEPARATOR
. Tu código será más portable.
Pruebe:
curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cacert.pem');
EDIT: y escribe la ruta completa. Tuve algunos problemas con las rutas relativas (¿tal vez curl se ejecuta desde otro directorio base?)