1

Codeigniter をフレームワークとして使用し、パゴダ ボックスをホスティング サービスとして使用して、Facebook キャンバス ページ アプリに取り組んでいます。これまでのところ、私はアプリを正常に稼働させており、現在、開いているグラフを使用して人々のタイムラインにインタラクションを投稿しようとしています. 私が抱えている問題は、使用している URL をデバッガー (http://developers.facebook.com/tools/debug) に接続すると、エラーが発生することです。

「 の外側にタグがあります。これは、タグの形式が正しくなくて解析ツリーの下位に落ちたか、誤って Open Graph タグを間違った場所に置いたことが原因です。いずれにしても、タグが使用可能になる前に修正する必要があります。 " (逐語的に)

コードを確認しましたが、これが当てはまるケースは見つかりませんでした。そのため、デバッグを続けたところ、コントローラーの signed_request に対する Facebook への $_REQUEST 呼び出しにエラーが集中していることがわかりました。だから私は $_REQUEST をハックとして機能する html タグで囲みましたが、もっと良いことができるかどうか疑問に思っています。また、グラフ API が以下を返します。

'"message": "予期しないエラーが発生しました。後でリクエストを再試行してください。", "type": "OAuthException", "code": 2"'

ここに私のコードコントローラーのスニペットがあります:

echo '<html>';
echo '<head>';

if(isset($_REQUEST['signed_request'])) {

    $encoded_sig = null;
    $payload = null;
    list($encoded_sig, $payload) = explode('.', $_REQUEST['signed_request'], 2);
    $sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
    $data = json_decode(base64_decode(strtr($payload, '-_', '+/'), TRUE), TRUE);

} else {
    echo 'error';
}
echo '</head>';
echo '</html>';

意見:

<!doctype html> 

<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"
  xmlns:fb="https://www.facebook.com/2008/fbml"> 
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# app-name: 
              http://ogp.me/ns/fb/app-name#">

    <title>Facebook Title | Corp Name</title>
    <meta charset="utf-8" />
    <meta property="fb:admins" content="[Number]" /> 
    <meta property="fb:app_id" content="[App-id]" /> 
    <meta property="og:type"   content="app-name:action" /> 
    <meta property="og:url"    content="<?php echo base_url(); ?>" /> 
    <meta property="og:title"  content="The beginning" /> 
    <meta property="og:image"  content="[image-url]" />

    <script type="text/javascript">
    function postObject()
    {
        FB.api(
            '/me/app-name:object',
            'post',
            { invitation: '<?php echo base_url(); ?>' },
            function(response) {
            if (!response || response.error) {
                alert('Error occured');
            } else {
                alert('Accept was successful! Action ID: ' + response.id);
            }
            });
    }
    </script> 

</head>
<body>
....
</body>

ありがとう!

4

0 に答える 0