1

Facebook アプリケーションからユーザーとして画像を投稿しようとしています。現在、この機能はまだ開発中であり、クラスの関数の1 つであるWAMP serveronを使用してテストしようとすると、例外エラーがスローされます。localhostcURLFacebook API SDK

{"error_code":60,"error":{"message":"SSL 証明書の問題です。CA 証明書に問題がないことを確認してください。詳細:\nエラー:14090086:SSL ルーチン:SSL3_GET_SERVER_CERTIFICATE:証明書の確認に失敗しました","type": "CurlException"}}null0.90752005577087 145684992172054|e259ec293812a5276a61d3181c395077

確認したところ、とディレクトリphp.iniの両方で正しい設定になっています。ApachePHP

Easy PHPこれを onとPHP 5.4on の両方で実行しようとしましWAMPPHP 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()));
        }

    }
?>
4

2 に答える 2

1

base_facebook.php ファイルに次の行を追加して、これを解決しました。

  public static $CURL_OPTS = array(
     //
     //
     //
    CURLOPT_SSL_VERIFYPEER => false,
  );

これは開発環境ソリューションのみであり、実際のアプリケーションでこれを使用するとセキュリティ リスクが発生する可能性があることに注意してください。

このリンクで完全な適切な解決策を確認してください: http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

于 2013-01-16T08:48:47.607 に答える
1

SSL 検証を false に設定すると、SSL の目的が無効になります。適切な解決策は、CURL の CA 証明書を設定することです。

解決策 1 (PHP.ini への変更):

  1. http://curl.haxx.se/docs/caextract.htmlから CA バンドル (cacert.pem) をダウンロードします。
  2. ローカル システムに配置します (例: C:\xampp\cacert.pem)。
  3. php.ini を開きます
  4. cacert.pem の場所を指すように curl.ca_info オプションを設定します。

    Example: curl.ca_info="C:\xampp\cacert.pem"
    
  5. アパッチを再起動する

解決策 2 (各 CURL 呼び出しの前にオプションを設定する)

  1. http://curl.haxx.se/docs/caextract.htmlから CA バンドル (cacert.pem) をダウンロードします。
  2. ローカル システムに配置します (例: 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

于 2013-06-04T04:04:25.593 に答える