1

Я разрабатываю плагин WordPress, который использует API Facebook для создания мгновенных статей. (Я использую SDK версии 5.3.1 отсюда: https://github.com/facebook/php-graph-sdk/tree/5.4) Он требует включения многих настраиваемых полей, следовательно, новый плагин вместо существующего. Я разработал его на своей локальной машине с помощью Linux-сервера Vagrant/VirtualBox, и оттуда я смог успешно аутентифицировать и создать мгновенную статью, которая затем появилась в списке на Facebook в разделе «Инструменты публикации»> «Мгновенные статьи»> «Статьи развития».Facebook Мгновенные статьи: Создание статей с помощью Graph API

Я развернул этот же код на веб-сервере, чтобы продолжить его тестирование. Аутентификация по-прежнему успешна, но когда я пытаюсь опубликовать статью с этого сервера, Instant Article никогда не создается и не отображается в списке на Facebook.

Удивительно, что ответы от обеих попыток кажутся почти идентичными. Одно отличие: accessToken значение, которое я обозначил как {access_token}. Другие различия между ответами, отмеченными мной как {different}.

Может ли кто-нибудь помочь мне понять, почему одно удается, а другое не удается без каких-либо очевидных ошибок в PHP или в ответах API?

Response с использованием локальной машины (успешно):

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 
} 

Response с использованием on-сервера (сбой):

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 
} 
+1

Что происходит, когда вы запрашиваете данные об идентификаторе, который вы получили через API? – CBroe

ответ

1

Благодаря предложению CBroe «s в своем комментарии я был в состоянии чтобы обнаружить причину проблемы. После создания запроса на get the article import status, я нашел это сообщение об ошибке в ответ:

["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 на разметке, так что мой местный тестирование доменного имени будет заменено правильным «заявленным» доменным именем. Поскольку мы развернули код в новый домен, эта замена не выполнялась, и Facebook увидел неправильный «невостребованный» домен в разметке.

Добавив новое доменное имя в массив имен для замены, я смог отправить разметку в Instant Articles с «заявленным» доменом. Моя статья была успешно создана!

Большое спасибо, я потерял рассудок.