web-dev-qa-db-ja.com

Facebook MessengerAPI「URLは検証できませんでした」

FacebookメッセンジャーAPIをセットアップしようとしていますが、WebHookを追加しようとすると次のエラーが発生します。

URLを検証できませんでした。コールバック検証は次のエラーで失敗しました:curl_errno = 60; curl_error = SSL証明書の問題:ローカル発行者証明書を取得できません。 HTTPステータスコード= 200; HTTPメッセージ=接続が確立されました

チュートリアルで提供されているコードを使用してNodeJSサーバーをセットアップしました。 URLは次のとおりです: https://stackoverload.me/chatter/webhook

ここに解決策があります(誰かがコードを見たかった):

var express = require('express');

var fs = require('fs');
var https = require('https');

var app = express();
app.use(express.static('public'));

// SSL
https.createServer(
    {
        ca: fs.readFileSync(__dirname + '/server.ca'),
        key: fs.readFileSync(__dirname + '/server.key'),
        cert: fs.readFileSync(__dirname + '/server.cert')
    }
, app).listen(443, function() {
    console.log('Server is now running.');
});

// HTTP redirect to SSL
express()
    .get('*', function(req,res){
        res.redirect('https://example.com' + req.url)
    })
    .listen(80);
13
Jake Cross

これに答えるのを忘れましたが、httpsサーバーにcaファイルとパラメーターを追加し、Facebookがそれを受け入れたことがわかりました。

4
Jake Cross

強力な検証トークンを使用して FBメッセンジャーwebhookをセットアップ しようとしていました。ややこのように:o\/ERviEE\/vt0|<E|\|

o/ERviEE/vt0|<E|\| verify token set

同じことがコードで確認されています:

req.query['hub.verify_token'] === 'o\/ERviEE\/vt0|<E|\|'

ただし、FBから受け取った値は次のとおりです。o\\/ERviEE\\/vt0|<E|\\|

o\/ERviEE\/vt0|<E|\| verify token get

これは奇妙です。 Facebookが検証トークンなどの特殊文字をエスケープする方法について説明しているドキュメント参照自体はないようです。これが他のエンティティでも発生するかどうかはわかりません。

結論:検証トークンに特殊文字を使用する場合は、少し注意する必要があります。

なぜなら、FacebookはWebhookの検証トークンの特殊文字をエスケープしているからです。

0
xameeramir

次のシェルでチェーン証明書を使用できます。

cat www.example.com.crt bundle.crt > www.example.com.chained.crt

から http://nginx.org/en/docs/http/configuring_https_servers.html#chains

0
magicpanda