在cURL中传递.pem和.key文件在WordPress中不起作用

时间:2013-04-14 作者:vegu

我正在为woocommerce构建一个支付网关插件,它需要通过cURL, 使用私钥加密。

我正在使用以下代码:

$xml_request    =\'<?xml version="1.0" encoding="utf-8"?>\';

$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;
问题是curl 无论我使用什么路径,都找不到证书或密钥文件-我尝试了绝对路径和相对路径
我更改了.pem.key 文件位置(已尝试的主题目录、插件目录和根目录)
我已将权限更改为“完全”。

但我还是得到了错误58: unable to use client certificate (no key found or wrong pass phrase?)

这意味着该文件未被找到或损坏,而我确信它没有,因为when I copy this code to a php file outside WordPress and run it, it works.

我可以通过将用户重定向到WordPress之外的页面来克服这个问题,但我更愿意从一个地方运行它
如何做到这一点?

1 个回复
最合适的回答,由SO网友:vegu 整理而成

基于@Mamaduka评论;以下更改可解决此问题:

使用plugin_dir_path() 要获取文件系统目录路径,请执行以下操作:

$certfile = plugin_dir_path(__FILE__) . \'/clientcert.pem\';
$keyfile = plugin_dir_path(__FILE__) . \'/clientkey.key\';
然后删除getcwd().

如果您想在主题中使用它,请使用TEMPLATEPATH

我还想提到的是,之前使用以下路径did not 工作:

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

get_bloginfo(\'template_directory\') . \'/lib/cert/clientcert.pem\'
否:

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

结束

相关推荐

当我尝试使用社交插件时,为什么会收到“对未定义函数curl_init()的调用”?

我有一个wordpress博客http://www.1000irritatingthings.com我让sociable插件工作了一段时间,但现在当我尝试配置它时,当我选择sociable classic时,在管理面板中出现以下错误:Fatal error: 调用中未定义的函数curl\\u init()D:\\(WEBSITES)\\1000irritatingthings.com\\www\\wp-content\\plugins\\sociable\\includes\\sociable_outpu