Я разрабатывал плагин для WordPress, который использует API Facebook для создания мгновенных статей. (Я использую SDK версии 5.3.1 отсюда: https://github.com/facebook/php-graph-sdk/tree/5.4) Требуется включение множества пользовательских полей, следовательно, новый плагин вместо использования существующего. Я разработал его на своей локальной машине, используя сервер Linux Vagrant / VirtualBox, и оттуда мне удалось успешно аутентифицировать и создать Мгновенную статью, которая затем появилась в списке на Facebook в разделе «Инструменты публикации»> «Мгновенные статьи»> «Статьи по разработке».
Я развернул этот же код на живом веб-сервере, чтобы продолжить его тестирование. Аутентификация все еще успешна, но когда я пытаюсь опубликовать статью с этого сервера, Мгновенная статья никогда не создается и не отображается в списке на Facebook.
Загадочная вещь в том, что ответы от обеих попыток выглядят почти одинаково. Одним из различий является маркер доступа значение, которое я отметил как {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
}
Благодаря 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}"}"
Затем я понял, что в моей функции, которая создает разметку Instant Article, я делал str_replace
на разметке, чтобы мое локальное тестируемое доменное имя было заменено на правильное «заявленное» доменное имя. Поскольку мы развернули код в новом домене, такой замены не произошло, и Facebook увидел неверный «невостребованный» домен в разметке.
Добавив новое доменное имя в массив имен для замены, я смог отправить разметку в «Мгновенные статьи» с «заявленным» доменом. Моя статья была успешно создана!
Большое спасибо CBroe, я схожу с ума.
Других решений пока нет …