-1

JSSDKとPhpSDKを介してFacebookグラフAPIを使用しています。すべてが開発環境、本番環境、共有ホスティングで機能していますが、部分的に機能しており、これは非常に厄介です。

まず、Facebookアプリは、devでのテストとprodでのテストでまったく同じです。ドメインを変更したところです。次に、アウトバウンドポート80と443がホスティングプロバイダーで開かれています。

開発:Windows、php 5.3.8、curl 7.21.7製品 :Linux、php 5.3.17、curl 7.24.0

私は私のテストの結果の下でここに提示しています。

開発者

  • ユーザーにメッセージを公開する:OK
  • ページにメッセージを公開する:OK
  • ユーザーに写真を公開する:OK
  • ページに写真を公開する:OK
  • ユーザーのメッセージを削除します:OK
  • ページ内のメッセージを削除します:OK
  • ユーザーの写真を削除する:OK
  • ページ内の写真を削除:OK

製品

  • ユーザーにメッセージを公開する:OK
  • ページにメッセージを公開する:OK
  • ユーザーに写真を公開する:OK
  • ページに写真を公開する:OAuthException:予期しないエラーが発生しました。後でリクエストを再試行してください。
  • ユーザーのメッセージを削除します:テストされていません
  • ページ内のメッセージを削除します:OAuthException:(#100)無効なパラメーター
  • ユーザーの写真を削除します:OAuthException:(#221)写真が表示されません
  • ページ内の写真を削除する:テストできません

誰かがこれについての手がかりを持っていますか?何が起こっているのかをデバッグするにはどうすればよいですか(共有ホスティングプロバイダーを使用しています)?

編集

これは、本番のKOであるページに写真を公開するためのコードです。

  // I´m using Yii framework with a wrapper around Facebook php sdk
  // retreiving the page acces token
  $page_at = Yii::app()->facebook->api('/'.$fb_page->page_id.'?fields=access_token');

  Yii::app()->facebook->setFileUploadSupport(true);

  // model contains the post data from the user. For the message it is a text area
  // Yii::app()->params->uploadPath is a global param with path where the image resides.
  // Directory separator where created with php´s DIRECTORY_SEPARATOR
  $data = array(
          "message" => $model->attributes['descricao'],
          "source" => "@".Yii::app()->params->uploadPath.$model->image,
          "access_token" => $page_at['access_token']);         

  $result = Yii::app()->facebook->api('/'.$fb_page->page_id.'/photos', "POST", $data);

これは、prodでOKなユーザーに公開するコードです。

  Yii::app()->facebook->setFileUploadSupport(true);
  $data = array(
         "message" => $model->attributes['descricao'],
          "source" => "@".Yii::app()->params->uploadPath.$model->image,
  );
  $result = Yii::app()->facebook->api('/'.$fb_page->page_id.'/photos', "POST", $data);

2つの違いは、ユーザーにaccess_tokenが必要ないことだけです。

編集

削除の問題は、ページアクセストークンを投稿に配置するのではなく、URLに配置することで解決されたようです。削除を機能させるために、開発者の投稿にそれを配置することを余儀なくされたことを覚えているので、奇妙です...

今、私はジリオンの異なる組み合わせの後で同じ振る舞いをしている画像投稿に焦点を合わせています。API呼び出しは、エラーにもかかわらず何かを実行しています。アプリアルバムが存在しない場合は作成されますが、画像はアップロードされません。

このバグに関連している可能性があります:https ://developers.facebook.com/bugs/376442565760536?browse = search_5099ba94055685677909148

編集

cpikoのアドバイスに従って、私はCRLFの潜在的な問題に取り組みました。CURLOPT_CRLFをtrueに設定しました。ここで、次のようになります。OAuthException:このリソースを要求するには、ユーザーアクセストークンが必要です。

編集

フィドラーと少し戦った後、devとprodの間で送信されたfacebookapicurlリクエストを比較できました。まあ....絶対に同じです。私はアイデアがなくなり始めています...

4

1 に答える 1

0

多くのテストを行った後、ブロックされていたのは、Facebookアプリの詳細設定での国の制限設定です。

問題は、私のホスティングプロバイダーが米国にあり、Facebookアプリを私の国(米国ではない)に制限したことです。奇妙なことに、この設定は私の場合は写真のアップロードにのみ適用され、残りの部分(フィードの投稿など)には適用されません。また、クライアント(ブラウザ)の発信元に基づいて制限することはありませんが、この場合、カールを発信するサーバーから制限します。

アップデート

ユーザー写真を削除したときのエラー(写真が表示されない)は異なります。私がFacebookアプリを介して写真の発行者であったとしても、削除できるようにuser_photos権限を追加する必要がありました。

于 2012-11-08T20:53:39.217 に答える