я работаю с Facebook Checkbox Плагин все работает нормально, за исключением того, что Facebook не отправляет запрос на мой URL-адрес при подтверждении подписки.
в Facebook документы упоминается, что
После события согласия мы опубликуем событие webhook на вашем сервере, если флажок был установлен. Этот обратный вызов имеет тот же формат, что и обратный вызов opt-in, но вместо поля отправителя он имеет объект optin с полем user_ref.
Но это не отправка каких-либо данных. вот мой код webhook
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, должен быть уникальным, тогда будет отображаться только плагин checkbox, если он не уникален, то плагин не будет отображаться. И в этом вся логика. Вы генерируете user_ref, когда пользователь устанавливает флажок, вы получаете это unqiue user_ref, используя этот user_ref, вы отправляете сообщение пользователю (вы можете отправлять сообщение пользователю, используя user_ref столько раз, сколько хотите, но я рекомендую вам использовать senderId) , Когда вы отправляете сообщение пользователю, используя user_ref, api webhook выдаст вам ответ, содержащий 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, получатель — это то, что вы ищете.
Здесь, чтобы вы поняли, что я сделал в своем чат-боте, первый пользователь установил плагин checkbox. Я получаю вызов на моем сервере, если проверяю, содержит ли он user_ref, если да, то я отправляю текстовое сообщение пользователю с пользовательскими метаданными, используя user_ref. Когда пользователь получает сообщение, веб-крючок отправляет мне данные json в указанном выше формате. Чтобы определить, для какого user_ref я получил этот ответ, я установил пользовательские метаданные, которые являются комбинацией некоторой строки + user_ref. Используя это, я идентифицирую sender.id пользователя, которому я ранее отправил сообщение, используя user_ref. Sender.id — это мой pageid, а receient.id — идентификатор пользователя, который вы пытаетесь получить и с помощью которого мы обычно отправляем сообщение пользователю, а также известен как psid.
Надеюсь, это поможет, если у вас все еще есть проблема с использованием вышеупомянутого решения, тогда сделайте обновление об этом 🙂
Других решений пока нет …