Доступ к данным POST в приложении Facebook canvas

#php #facebook #forms #post #facebook-canvas

#php #Facebook #формы #Публикация #facebook-canvas

Вопрос:

У меня есть простая форма в моем приложении canvas / iframe для Facebook, и я пытаюсь передать значения как POST. Теперь, прочитав все об этом в последних документах S.O. и FB, насколько я понимаю, все данные, отправляемые через форму POST, могут быть доступны на принимающей стороне из объекта $ _REQUEST .

Я также прочитал в другой теме на S.O., что для того, чтобы формы POST работали, вам нужно передать ввод с именем «signed_request» со значением в качестве текущего signed_request (в противном случае подписанный запрос работает нормально…все логины и аутентификации работают нормально). Это нигде не упоминается в официальных документах FB.

Итак, моя проблема в том, что все, что возвращается в объект $ _REQUEST, — это подписанный запрос и куча других сеансовых вещей. Мои входные данные формы нигде не найдены.

Единственный способ, которым я могу их прочитать, — это установить для метода формы значение «ЗАПРОС», которое даже не является реальным методом формы. Но затем он принимает все мои входные данные и отправляет их в виде аргументов GET в URL. Ужасно. Вот пример страницы из моего приложения canvas, содержащей только форму, которую я использую для отладки (исключая все элементы аутентификации):

 <form enctype="application/x-www-form-urlencoded" method="POST" target="_top" id="my_form" action="https://apps.facebook.com/myfakeapp/form_test.php">
<input type="text" name="test1" value="58" />
<input type="text" name="test2" value="123" />
<input type="text" name="test3" value="434" />
<input type="text" name="test4" value="645" />
<input type="text" name="signed_request" value="<? echo $_REQUEST['signed_request']; ?>">
<input value="Submit Answers" type="submit">
</form>
  

Документы FB сбивают с толку, поскольку некоторые из них относятся к этому режиму бета-миграции, который у них был для старых приложений, обрабатывающих запросы POST для приложений canvas.

Комментарии:

1. Глупый вопрос: вы даже не пытались использовать $_POST или пропустили его из-за того, что прочитали? Edit_: если вы находитесь в iFrame, вы можете просто использовать form_test.php в качестве вашего действия здесь не должен требоваться целевой и полный URL-адрес приложения (по крайней мере, это работает в моих приложениях, работающих на страницах поклонников внутри вкладки).

2. Да, поверьте мне, я пробовал это миллион раз! Похоже, в документации FB действительно есть большая черная дыра о том, как обрабатывать формы в приложениях canvas.

Ответ №1:

Вы комбинируете два отдельных метода…цель отправки формы с target=_top и action=apps.facebook.com/xxx заключается в том, чтобы заставить Facebook автоматически отправлять параметр signed_request. Если вы отправляете его самостоятельно, вы должны использовать «внешний» адрес вашей страницы в качестве действия и оставить целевой атрибут выключенным. Используя target=_top, вы перезагружаете всю платформу и отправляете данные своей формы на Facebook, что, конечно же, игнорирует их.

Комментарии:

1. Пожалуйста, обратите внимание, что это не так просто! вам нужно на самом деле обработать signed_request и проверить, не истек ли срок его действия, и текущий пользователь на самом деле является пользователем, который отправил форму (а не другим пользователем, который вышел из текущей формы с другой вкладки)! Я не уверен, что Facebook обновит все вкладки, когда это произойдет. Но это стоит проверить.

2. Он заявил, что он пропустил код аутентификации только для целей тестирования / отладки и что у него уже была разработана обработка signed_request заранее. Поскольку он передает исходный signed_request, эта часть не должна меняться.