Das Übergeben von .pem- und .key-Dateien in cURL funktioniert nicht in WordPress

Ich baue ein Payment-Gateway-Plugin für woocommerce, das das Senden einer XML-Anfrage über cURL , verschlüsselt mit privatem Schlüssel, erfordert.

Ich verwende den folgenden Code:

 $xml_request =''; $test_URL = 'https://my-gateway.com'; // Here is where I change the file paths $certfile = '/clientcert.pem'; $keyfile = '/clientkey.key'; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $test_URL ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt( $ch, CURLOPT_SSLCERT, getcwd() . $certfile ); curl_setopt( $ch, CURLOPT_SSLKEY, getcwd() . $keyfile ); curl_setopt( $ch, CURLOPT_POST, 1 ); curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'Content-Type: text/xml' ) ); curl_setopt( $ch, CURLOPT_POSTFIELDS, $xml_request ); $ch_result = curl_exec( $ch ); // Check for errors if ( curl_errno($ch) ) { $ch_result = 'cURL ERROR -> ' . curl_errno($ch) . ': ' . curl_error($ch); } else { $returnCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); switch($returnCode){ case 200: break; default: $ch_result = 'HTTP ERROR -> ' . $returnCode; break; } } curl_close( $ch ); echo $ch_result; 

Das Problem ist, dass curl das Zertifikat oder die Schlüsseldateien nicht finden kann, egal welchen Pfad ich verwende – ich habe absolute und relative Pfade ausprobiert.
Ich habe die .pem .key Datei und der .key Datei geändert (ausprobiertes Themenverzeichnis, Plugin-Verzeichnis und root).
Ich habe die Berechtigungen vollständig geändert.

Aber trotzdem bekomme ich den Fehler
58: unable to use client certificate (no key found or wrong pass phrase?)

Das bedeutet, dass die Datei nicht gefunden oder beschädigt ist, obwohl ich mir sicher bin, dass es nicht funktioniert , denn wenn ich diesen Code in eine PHP-Datei außerhalb von WordPress kopiere und sie ausführe, funktioniert sie .

Ich kann dieses Problem überwinden, indem ich den Benutzer auf eine Seite außerhalb von WordPress umlenke, aber ich würde es vorziehen, alles von einem Ort aus zu starten.
Wie kann das gemacht werden?

Solutions Collecting From Web of "Das Übergeben von .pem- und .key-Dateien in cURL funktioniert nicht in WordPress"

Basierend auf @Mamaduka Kommentar; Die folgenden Änderungen lösen es:

Verwenden Sie plugin_dir_path() , um den Dateisystemverzeichnispfad plugin_dir_path() :

 $certfile = plugin_dir_path(__FILE__) . '/clientcert.pem'; $keyfile = plugin_dir_path(__FILE__) . '/clientkey.key'; 

Entfernen getcwd() dann getcwd() .

Wenn Sie es in Ihrem Thema verwenden möchten, verwenden Sie TEMPLATEPATH

Ich möchte auch erwähnen, dass die Verwendung der folgenden Pfade zuvor nicht funktionierte:

 WP_PLUGIN_URL . "/" . plugin_basename( dirname(__FILE__) ) . '/clientkey.key' 

Noch:

 get_bloginfo('template_directory') . '/lib/cert/clientcert.pem' 

Noch:

 'http://my-web-site.com/clientcert.pem'