Я работаю с Facebook Checkbox Plugin, все работает отлично, за исключением того, что facebook не отправляет запрос на мой URL-адрес webhook при подтверждении выбора. в facebook docs упоминается, что
После события выбора, мы разместим событие webhook на вашем сервере, если было проверено состояние флажка. Этот обратный вызов имеет тот же формат, что и обратный вызов выбора, но вместо поля отправителя он имеет объект optin с полем user_ref.
Но он не отправляет никаких данных. вот мой код веб-хостинга
if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] == 'subscribe' && $_REQUEST['hub_verify_token'] == 'verificationtoken') { echo $_REQUEST['hub_challenge']; } $data = file_get_contents("php://input"); $fp = file_put_contents( PROTECH_FBB_DIR.'/data.log', $data);
Я также попробовал ударить свой webhook вручную и посмотреть, реагирует ли он. и он работает нормально, поэтому это означает, что facebook не публикует данные или, может быть, я что-то делаю неправильно?
Любая помощь будет высоко оценен. благодаря
Я не разработчик php, но реализовал ту же логику в javascript, node.js. Я хотел бы поделиться этими шагами в деталях, а также с кодом javascript, и надеюсь, что вы сможете понять, что вы можете сделать с ним, чтобы сделать вашу жизнь лучше: P Как вы сказали, вы получаете user_ref из вызова api. Правильно. Прочтите документацию еще раз, что они упомянули, что user_ref будет получен, когда пользователь проверит флажок. Этот user_ref задается вами и каждый раз, когда страница загружает этот user_ref, должна быть уникальной, а только плагин-флажок будет рендерить, если он не уникален, плагин не будет рендерить. И вот полная логика. Вы генерируете user_ref, когда пользователь устанавливает флажок, вы получаете этот unqiue user_ref, используя этот user_ref, который вы отправляете пользователю (вы можете отправлять сообщение пользователю с использованием user_ref столько раз, сколько хотите, но я предлагаю вам использовать senderId) , Когда вы отправляете сообщение пользователю с помощью user_ref, webhook api даст вам ответ, содержащий senderId пользователя, который на самом деле является psid, который мы обычно используем в нашем приложении. Это то, что вам нужно сэкономить в вашем дБ. Теперь я поставлю свой код здесь, как я это сделал. Получение user_ref и отправка сообщения пользователю: Моя полезная нагрузка:
function sendTextMessageRef(user_ref, messageText,md) { var messageData = { recipient: { user_ref: user_ref }, message: { text: messageText, metadata: md } }; callSendAPI(messageData); } function callSendAPI(messageData) { request({ uri: 'https://graph.facebook.com/v2.6/me/messages', qs: { access_token: PAGE_ACCESS_TOKEN }, method: 'POST', json: messageData }, function (error, response, body) { if (!error && response.statusCode == 200) { var recipientId = body.recipient_id; var messageId = body.message_id; if (messageId) { console.log("Successfully sent message with id %s to recipient %s", messageId, recipientId); } else { console.log("Successfully called Send API for recipient %s", recipientId); } } else { console.error("Failed calling Send API", response.statusCode, response.statusMessage, body.error); } }); }
Теперь, после отправки сообщения, я получаю ответ в этом json формате, который будет включать идентификатор отправителя пользователя:
{"sender":{"id":"xxxxxxx"},"recipient":{"id":"xxxxxWhat you are looking for is this*******"},"timestamp":1504698781373,"message":{"is_echo":true,"app_id":xxxxxxxxxxxxxxx,"metadata":"INVITATION__REPLY__qwe__2017-09-05T02xo20__xxxxxxxx__063__yes","mid":"mid.$cAAGcxxxxxxxxVxuAtJ","seq":120162,"text":":)"}}
В приведенных выше json-данных адрес recipient.id – это то, что вы ищете. Здесь Чтобы вы поняли, что я сделал в бот-чате, первый пользователь выбирает плагин-флажок, я получаю вызов на моем сервере, если он проверяет, содержит ли он user_ref, если да, то я отправляю текстовое сообщение пользователю с использованием пользовательских метаданных, используя user_ref. Когда пользователь получает сообщение, webhook отправляет мне данные json в указанном выше формате. Чтобы определить, для какого user_ref я получил этот ответ, я устанавливаю настраиваемые метаданные, которые являются комбинацией некоторой строки + user_ref. Используя это, я идентифицирую sender.id пользователя, для которого я ранее отправлял сообщение с помощью user_ref. Sender.id – это мой pageid и recipient.id идентификатор пользователя, который вы пытаетесь получить и используете, который мы обычно отправляем пользователю пользователю и также знаем как psid.
Надеюсь, что это поможет, если у вас все еще есть проблема с использованием вышеупомянутого решения, тогда обновите об этом 🙂