J'utilise WAMP sur un environnement de développement local et j'essaie de débiter une carte de crédit mais j'obtiens le message d'erreur :
erreur cURL 60 : problème de certificat SSL : impossible d'obtenir le certificat de l'émetteur local
J'ai fait de nombreuses recherches sur Google et beaucoup de personnes me suggèrent de télécharger ce fichier : [cacert.pem][1], de le placer quelque part et de le référencer dans mon php.ini. Voici la partie de mon php.ini :
curl.cainfo = "C:\Windows\cacert.pem"
Pourtant, même après avoir redémarré mon serveur plusieurs fois et changé le chemin, j'obtiens le même message d'erreur.
J'utilise WAMP à partir des modules Apache et le module ssl_ est activé. Et dans les extensions PGP, j'ai activé php_curl.
Toujours le même message d'erreur. Pourquoi cela se produit-il ?
Je suis maintenant cette solution : [Comment corriger l'erreur PHP CURL Error 60 SSL][2]
Ce qui suggère que j'ajoute ces lignes à mes options cURL :
curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, true);
Où puis-je ajouter des options à mon cURL ? Apparemment pas par la ligne de commande, puisque mon CLI ne trouve pas la commande "curl_setopt" ;
[1] : http://curl.haxx.se/ca/cacert.pem [2] : http://flwebsites.biz/posts/how-fix-curl-error-60-ssl-issue
EDIT
Voici le code que j'exécute :
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, qui est utilisé par [cartalyst/stripe][1], effectue les opérations suivantes pour trouver une archive de certificat appropriée afin de vérifier le certificat d'un serveur :
openssl.cafile
est défini dans votre fichier php.ini.curl.cainfo
est défini dans votre fichier php.ini./etc/pki/tls/certs/ca-bundle.crt
existe (Red Hat, CentOS, Fedora ; fourni par le paquet ca-certificates)/etc/ssl/certs/ca-certificates.crt
existe (Ubuntu, Debian ; fourni par le paquet ca-certificates)/usr/local/share/certs/ca-root-nss.crt
existe (FreeBSD ; fourni par le paquet ca_root_nss)/usr/local/etc/openssl/cert.pem
existe (OS X ; fourni par homebrew)C:\windows\system32\curl-ca-bundle.crt
existe (Windows)C:\windows\curl-ca-bundle.crt
existe (Windows)Vous voudrez vous assurer que les valeurs des deux premiers paramètres sont correctement définies en effectuant un test simple :
echo "openssl.cafile: ", ini_get('openssl.cafile'), "\n";
echo "curl.cainfo: ", ini_get('curl.cainfo'), "\n";
Vous pouvez aussi essayer d'écrire le fichier dans les emplacements indiqués par #7 ou #8.
Comme vous utilisez Windows, je pense que votre séparateur de chemin est '\' ; (et '/' ; sous Linux).
Essayez d'utiliser la constante DIRECTORY_SEPARATOR
. Votre code sera plus portable.
Essayez :
curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cacert.pem');
EDIT : et écrivez le chemin complet. J'ai eu quelques problèmes avec les chemins relatifs (peut-être que curl est exécuté à partir d'un autre répertoire de base ?)