1

Facebook の API を使用してインスタント記事を作成する WordPress プラグインを開発しています。(ここから SDK バージョン 5.3.1 を使用しています: https://github.com/facebook/php-graph-sdk/tree/5.4 ) 多くのカスタム フィールドを含める必要があるため、新しいプラグインを使用する代わりに既存のもの。Vagrant/VirtualBox Linux サーバーを使用してローカル マシンで開発し、そこから正常に認証してインスタント記事を作成することができました。これは、Facebook の [公開ツール] > [インスタント記事] > [開発記事] 内のリストに表示されました。

この同じコードをライブ Web サーバーにデプロイして、テストを続けました。認証は引き続き成功しますが、そのサーバーから記事を公開しようとすると、インスタント記事が作成されず、Facebook のリストに表示されません。

不可解なのは、両方の試行の応答がほぼ同じに見えることです。1 つの違いは、私がマークしたaccessToken{access_token}です。としてマークした回答間のその他の違い{different}

PHPまたはAPI応答で明らかなエラーなしに、一方が成功し、もう一方が失敗する理由を理解できる人はいますか?

ローカル マシンを使用した応答 (成功):

object(Facebook\FacebookResponse)#144 (6) {
  ["httpStatusCode":protected]=>
  int(200)
  ["headers":protected]=>
  array(13) {
    ["Access-Control-Allow-Origin"]=>
    string(1) "*"
    ["Pragma"]=>
    string(8) "no-cache"
    ["Cache-Control"]=>
    string(44) "private, no-cache, no-store, must-revalidate"
    ["facebook-api-version"]=>
    string(4) "v2.7"
    ["Expires"]=>
    string(29) "Sat, 01 Jan 2000 00:00:00 GMT"
    ["Content-Type"]=>
    string(31) "application/json; charset=UTF-8"
    ["x-fb-trace-id"]=>
    string(11) "{different}"
    ["x-fb-rev"]=>
    string(7) "{different}"
    ["Vary"]=>
    string(15) "Accept-Encoding"
    ["X-FB-Debug"]=>
    string(88) "{different}"
    ["Date"]=>
    string(29) "Wed, 19 Oct 2016 16:24:51 GMT"
    ["Connection"]=>
    string(10) "keep-alive"
    ["Content-Length"]=>
    string(2) "25"
  }
  ["body":protected]=>
  string(25) "{"id":"{different}"}"
  ["decodedBody":protected]=>
  array(1) {
    ["id"]=>
    string(16) "{different}"
  }
  ["request":protected]=>
  object(Facebook\FacebookRequest)#145 (9) {
    ["app":protected]=>
    object(Facebook\FacebookApp)#183 (2) {
      ["id":protected]=>
      string(16) "{app_id}"
      ["secret":protected]=>
      string(32) "{app_secret}"
    }
    ["accessToken":protected]=>
    string(168) "{access_token}"
    ["method":protected]=>
    string(4) "POST"
    ["endpoint":protected]=>
    string(29) "/{some_endpoint_id}/instant_articles"
    ["headers":protected]=>
    array(1) {
      ["Content-Type"]=>
      string(33) "application/x-www-form-urlencoded"
    }
    ["params":protected]=>
    array(3) {
      ["development_mode"]=>
      string(1) "1"
      ["published"]=>
      bool(false)
      ["html_source"]=>
      string(1600) "<html> ... </html>"
    }
    ["files":protected]=>
    array(0) {
    }
    ["eTag":protected]=>
    NULL
    ["graphVersion":protected]=>
    string(4) "v2.7"
  }
  ["thrownException":protected]=>
  NULL
}

Live Server を使用した応答 (失敗):

object(Facebook\FacebookResponse)#107 (6) {
  ["httpStatusCode":protected]=>
  int(200)
  ["headers":protected]=>
  array(13) {
    ["Access-Control-Allow-Origin"]=>
    string(1) "*"
    ["Pragma"]=>
    string(8) "no-cache"
    ["Cache-Control"]=>
    string(44) "private, no-cache, no-store, must-revalidate"
    ["facebook-api-version"]=>
    string(4) "v2.7"
    ["Expires"]=>
    string(29) "Sat, 01 Jan 2000 00:00:00 GMT"
    ["Content-Type"]=>
    string(31) "application/json; charset=UTF-8"
    ["x-fb-trace-id"]=>
    string(11) "{different}"
    ["x-fb-rev"]=>
    string(7) "{different}"
    ["Vary"]=>
    string(15) "Accept-Encoding"
    ["X-FB-Debug"]=>
    string(88) "{different}"
    ["Date"]=>
    string(29) "Wed, 19 Oct 2016 16:02:08 GMT"
    ["Connection"]=>
    string(10) "keep-alive"
    ["Content-Length"]=>
    string(2) "24"
  }
  ["body":protected]=>
  string(24) "{"id":"{different}"}"
  ["decodedBody":protected]=>
  array(1) {
    ["id"]=>
    string(15) "{different}"
  }
  ["request":protected]=>
  object(Facebook\FacebookRequest)#106 (9) {
    ["app":protected]=>
    object(Facebook\FacebookApp)#126 (2) {
      ["id":protected]=>
      string(16) "{app_id}"
      ["secret":protected]=>
      string(32) "{app_secret}"
    }
    ["accessToken":protected]=>
    string(164) "{access_token}"
    ["method":protected]=>
    string(4) "POST"
    ["endpoint":protected]=>
    string(29) "/{some_endpoint_id}/instant_articles"
    ["headers":protected]=>
    array(1) {
      ["Content-Type"]=>
      string(33) "application/x-www-form-urlencoded"
    }
    ["params":protected]=>
    array(3) {
      ["development_mode"]=>
      string(1) "1"
      ["published"]=>
      bool(false)
      ["html_source"]=>
      string(1639) "<html> ... </html>"
    }
    ["files":protected]=>
    array(0) {
    }
    ["eTag":protected]=>
    NULL
    ["graphVersion":protected]=>
    string(4) "v2.7"
  }
  ["thrownException":protected]=>
  NULL
}
4

1 に答える 1

1

CBroeのコメントでの提案のおかげで、問題の原因を突き止めることができました。記事のインポート ステータスを取得するリクエストを行った後、レスポンスに次のエラー メッセージが表示されました。

["body":protected]=>
  string(439) "{"errors":[{"level":"ERROR","message":"Unclaimed URL: The URL http:\/\/www.example.com\/my-article-url\/ has not been claimed for Instant Articles. Please check to make sure you have a URL registered for your page. For more information refer to URLs in the Publishing Articles section of the Instant Articles documentation."}],"status":"FAILED","id":"{some_id}"}"

str_replaceその後、Instant Article マークアップを作成する関数で、ローカルのテスト ドメイン名が正しい「要求された」ドメイン名に置き換えられるように、マークアップを実行していたことに気付きました。コードを新しいドメインにデプロイしたため、この置換は行われず、Facebook はマークアップで誤った「要求されていない」ドメインを認識しました。

置換する名前の配列に新しいドメイン名を追加することで、「要求された」ドメインでマークアップを Instant Articles に送信できました。記事が正常に作成されました。

どうもありがとうCBroe、私は頭がおかしくなっていました。

于 2016-10-19T22:26:33.403 に答える