Ich verwende WAMP in einer lokalen Entwicklungsumgebung und versuche, eine Kreditkarte zu belasten, erhalte aber die Fehlermeldung:
cURL-Fehler 60: SSL-Zertifikatsproblem: Lokales Ausstellerzertifikat kann nicht abgerufen werden
Ich habe viel bei Google gesucht und viele Leute schlagen vor, dass ich diese Datei herunterladen soll: cacert.pem herunterzuladen, sie irgendwo abzulegen und in meiner php.ini zu referenzieren. Dies ist der Teil in meiner php.ini:
curl.cainfo = "C:\Windows\cacert.pem"
Doch selbst nach mehreren Neustarts meines Servers und der Änderung des Pfads erhalte ich die gleiche Fehlermeldung.
Ich verwende WAMP über die Apache-Module und habe das ssl_modul aktiviert. Und bei den PGP-Erweiterungen habe ich php_curl aktiviert.
Immer noch die gleiche Fehlermeldung. Warum ist das so?
Jetzt folge ich dieser Lösung: Wie behebe ich PHP CURL Error 60 SSL
Das schlägt vor, dass ich diese Zeilen zu meinen cURL-Optionen hinzufüge:
curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, true);
Wo füge ich Optionen zu meinem cURL hinzu? Offensichtlich nicht über die Kommandozeile, da mein CLI den Befehl "curl_setopt" nicht findet;
EDIT
Dies ist der Code, den ich verwende:
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, das von cartalyst/stripe verwendet wird, geht wie folgt vor, um ein geeignetes Zertifikatsarchiv zu finden, mit dem ein Serverzertifikat überprüft werden kann:
openssl.cafile
in Ihrer php.ini-Datei gesetzt ist.curl.cainfo
in Ihrer php.ini Datei gesetzt ist./etc/pki/tls/certs/ca-bundle.crt
vorhanden ist (Red Hat, CentOS, Fedora; bereitgestellt durch das ca-certificates Paket)/etc/ssl/certs/ca-certificates.crt
vorhanden ist (Ubuntu, Debian; bereitgestellt durch das ca-certificates-Paket)/usr/local/share/certs/ca-root-nss.crt
vorhanden ist (FreeBSD; bereitgestellt durch das Paket ca_root_nss)/usr/local/etc/openssl/cert.pem
existiert (OS X; bereitgestellt von homebrew)C:\windows\system32\curl-ca-bundle.crt
existiert (Windows)C:\windows\curl-ca-bundle.crt
vorhanden ist (Windows)Um sicherzustellen, dass die Werte für die ersten beiden Einstellungen richtig definiert sind, sollten Sie einen einfachen Test durchführen:
echo "openssl.cafile: ", ini_get('openssl.cafile'), "\n";
echo "curl.cainfo: ", ini_get('curl.cainfo'), "\n";
Alternativ dazu können Sie versuchen, die Datei an den mit #7 oder #8 angegebenen Stellen zu speichern.
Haben Sie versucht...
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
Wenn Sie eine vertrauenswürdige Quelle verwenden, müssen Sie das SSL-Zertifikat wohl nicht verifizieren.
Da Sie Windows verwenden, denke ich, dass Ihr Pfadseparator '\' ist (und '/' unter Linux).
Versuchen Sie, die Konstante DIRECTORY_SEPARATOR
zu verwenden. Ihr Code wird dann portabler sein.
Versuchen Sie es:
curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cacert.pem');
EDIT: und geben Sie den vollständigen Pfad an. Ich hatte einige Probleme mit relativen Pfaden (vielleicht wird curl von einem anderen Basisverzeichnis aus ausgeführt?)