cURL在FacebookAPI SDK中引发异常
我正试图从我的Facebook应用程序中以用户身份发布一张图片。 目前,此功能仍在开发中,当我尝试使用cURL在FacebookAPI SDK中引发异常,facebook,apache,curl,wamp,Facebook,Apache,Curl,Wamp,我正试图从我的Facebook应用程序中以用户身份发布一张图片。 目前,此功能仍在开发中,当我尝试使用localhost上的WAMP server对其进行测试时,Facebook API SDK类中的cURL函数之一抛出异常错误: {“错误代码”:60,“错误”:{“消息”:“SSL证书问题,请验证 CA证书是否正常。详细信息:\n错误:14090086:SSL 例程:SSL3\u获取\u服务器\u证书:证书验证 失败,“类型”:“CurlException”}null0.90752005577
localhost
上的WAMP server
对其进行测试时,Facebook API SDK
类中的cURL
函数之一抛出异常错误:
{“错误代码”:60,“错误”:{“消息”:“SSL证书问题,请验证
CA证书是否正常。详细信息:\n错误:14090086:SSL
例程:SSL3\u获取\u服务器\u证书:证书验证
失败,“类型”:“CurlException”}null0.90752005577087
145684992172054 | e259ec293812a5276a61d3181c395077
我已经检查了,php.ini
中的Apache
和php
目录都有正确的设置
我尝试在Easy PHP
和PHP5.4
上以及WAMP
和PHP5.3
上运行此功能。(已启用卷曲扩展)
我在两台本地服务器上都安装了openssl
我知道您可以通过更改CURL_opt
的配置来解决这个问题,但修改Facebook基类并破坏我的应用程序的安全性(中间人攻击)对我来说是最后的选择
提前谢谢你的帮助
我的代码:
test.php:
<?php
session_start();
require 'FB_auth.php';
require 'includes.php';
require 'functions_fb.php';
$start = (float) array_sum(explode(' ',microtime()));
//echo json_encode(photoToFacebook(299, 402, 134));
// echo json_encode(photoToFacebook(724, 402, 165));
// postToFacebook($db, 402, 134);
$end = (float) array_sum(explode(' ',microtime()));
$duration = ($end-$start);
echo $duration;
echo "<br/>" . $facebook->getAccessToken();
?>
functions_fb.php
<?php
function photoToFacebook($hr_id, $user_id, $job_id){
global $db, $FEED_PATH, $JOB_IMAGES_FOLDER , $facebook;
$path = $_SERVER['DOCUMENT_ROOT'] . "/";
$JOB_IMAGES_FOLDER = "images/job_images/";
$company = $db->getCompany($hr_id);
// perapre the job photo.
$photo = $db->getJobPhoto($job_id);
if (empty($photo)){
$photo = $db->getLogo($hr_id);
}
else{
$photo = $JOB_IMAGES_FOLDER . $photo;
}
try{
// At the time of writing it is necessary to enable upload support in the Facebook SDK, you do this with the line:
$facebook->setFileUploadSupport(true);
// Get album id if exists.
$album_uid = $db->getAlbumId($user_id);
$fb_user_id = $db->getFBUserId($user_id);
if (empty($album_uid)){
// Create an album
$album_details = array(
'message'=> 'Check out my company\'s job opportunities',
'name'=> "Job opportunities at {$company}"
);
$create_album = $facebook->api("/{$fb_user_id}/albums", 'post', $album_details);
echo json_encode($create_album);
$album_uid = $create_album["id"];
$db->saveAlbumId($user_id, $create_album["id"]);
}
$job_title = $db->getJobTitle($job_id);
$link = Bitly::make_bitly_url($FEED_PATH . "show_job.php?jid={$job_id}&th_uid={$user_id}&tp=1&pc=1", BITLY_APP_USERNAME,BITLY_APP_KEY,'json');
$photo_details = array(
'message'=> $job_title . "!\n" . $company . " is looking for you.\nOpen the link for details and apply.\n" . $link
);
$path .= $photo;
$photo_details['image'] = '@' . $path; //realpath($file);
// echo $album_uid;
$upload_photo = $facebook->api("{$fb_user_id}/photos", 'post', $photo_details);
// $db->updateAutoPostActivity($user_id, $job_id,1, json_encode($upload_photo));
// $db->updateAutoPostJob($job_id, $user_id);
return $upload_photo;
}
catch (FacebookApiException $e) {
echo "error:" . json_encode($e->getResult());
// $db->updateAutoPostActivity($user_id, $job_id,1, json_encode($e->getResult()));
// AtavMail::SendRichedMail(null , "", "Error on auto process - posting photo to FB", "Where - Job Id: {$job_id} , User Id: {$user_id}", json_encode($e->getResult()));
}
}
?>
test.php:
函数\u fb.php
我通过在base_facebook.php文件中添加以下行解决了这个问题:
public static $CURL_OPTS = array(
//
//
//
CURLOPT_SSL_VERIFYPEER => false,
);
请注意,这只是一个开发环境解决方案,在实际应用程序中使用它可能会导致安全风险
请花时间查看此链接上的fullp正确解决方案:
将SSL验证设置为false会破坏SSL的用途。 正确的解决方案是为CURL设置CA证书 解决方案1(对PHP.ini的更改):
Example: curl.ca_info="C:\xampp\cacert.pem"
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt ($ch, CURLOPT_CAINFO, "pathto\cacert.pem");