2013-01-15 38 views
1

例外,我正在尝试张贴图片从我的Facebook应用程序的用户。 目前,此功能仍在开发中,当我试图使用它在WAMP serverlocalhost,在Facebook API SDKcURL功能之一,以测试,抛出一个异常错误:卷曲抛出Facebook的API SDK

{"error_code":60,"error":{"message":"SSL certificate problem, verify that the CA cert is OK. Details:\nerror:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed","type":"CurlException"}}null0.90752005577087 145684992172054|e259ec293812a5276a61d3181c395077

我已经检查,我有在php.ini无论是在ApachePHP目录正确的设置。

我想这对双方具有Easy PHPPHP 5.4WAMPPHP 5.3运行。 (启用cURL扩展)。

我已经安装在两个本地服务器的open SSL

我知道你可以通过更改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())); 
     } 

    } 
?> 

回答

1

SSL验证设置为false失败SSL的目的。 正确的解决方案是为CURL设置CA证书。

解决方案1(修改了php.ini):从http://curl.haxx.se/docs/caextract.html

  • 放置在您的本地系统上

    1. 下载CA束(cacert.pem)(用于例如:C:\ XAMPP \ CACERT。 PEM)
    2. 打开你的php.ini
    3. 设置curl.ca_info选项指向cacert.pem的位置

      Example: curl.ca_info="C:\xampp\cacert.pem" 
      
    4. 重启Apache

    解决方案2(每个CURL调用之前设置选项)

    1. 下载CA从http://curl.haxx.se/docs/caextract.html
    2. 放置在您的本地系统上(如用于束(cacert.pem) :C:\ xampp \ cacert。PEM)
    3. 写下面的代码:

      curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
      curl_setopt ($ch, CURLOPT_CAINFO, "pathto\cacert.pem"); 
      

    来源:http://tumblr.wehavefaces.net/post/52114563111/environment-windows-xampp-curl-library