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);
これに答えるのを忘れましたが、httpsサーバーにcaファイルとパラメーターを追加し、Facebookがそれを受け入れたことがわかりました。
強力な検証トークンを使用して FBメッセンジャーwebhookをセットアップ しようとしていました。ややこのように:o\/ERviEE\/vt0|<E|\|
同じことがコードで確認されています:
req.query['hub.verify_token'] === 'o\/ERviEE\/vt0|<E|\|'
ただし、FBから受け取った値は次のとおりです。o\\/ERviEE\\/vt0|<E|\\|
これは奇妙です。 Facebookが検証トークンなどの特殊文字をエスケープする方法について説明しているドキュメント参照自体はないようです。これが他のエンティティでも発生するかどうかはわかりません。
結論:検証トークンに特殊文字を使用する場合は、少し注意する必要があります。
なぜなら、FacebookはWebhookの検証トークンの特殊文字をエスケープしているからです。
次のシェルでチェーン証明書を使用できます。
cat www.example.com.crt bundle.crt > www.example.com.chained.crt
から http://nginx.org/en/docs/http/configuring_https_servers.html#chains