我在注册我的 Twitter webhook 时遇到问题。我正在使用 twitterdev/account-activity-dashboard,虽然请求到达了 webhook(我可以在日志中看到它),但我一直收到这个回报:
Webhook URL 不符合要求。无效的 CRC 令牌或 json 响应格式。
我相信我已经非常仔细地遵循了这里的描述: https://github.com/twitterdev/account-activity-dashboard
我的凭证是正确的,权限是正确的,我已经设置了一个环境。
服务器端在 node.js 中。响应 webhook 创建请求的简单代码在这里。
我正在使用加密库创建 hmac(同样,如上面链接中提供的示例所示。)
function twitterWebhook(req, res, next)
{
my.logger.verbose('Entered the Twitter Webhook');
my.logger.verbose('Here is the url: ' + JSON.stringify(req.url));
my.logger.verbose('Here is the query: ' + JSON.stringify(req.query));
var crc_token = req.query.crc_token;
my.logger.verbose('crc_token is: ' + crc_token);
my.logger.verbose('secret is : ' + conf.T_consumer_secret);
var hmac = crypto.createHmac('sha256',
conf.T_consumer_secret).update(crc_token).digest('base64');
my.logger.verbose('hmac is : ' + hmac);
if (req.method.toLowerCase() == 'get'){
var aResponse = {response_token:hmac};
var aResponseString = JSON.stringify(aResponse);
res.send(hmac);
}
response_token: 'sha256=' + hmac
您必须在响应令牌的开头添加
sha256=
,添加后同样的问题得到解决。
我正在使用 python3.7 + ngrok 为我的 callbakurl 和 nodejs 服务提供的 Twitter 来管理 callbackurl,订阅。
这是我通过 ngrok 公开的烧瓶 webhook
@app.route('/webhook/twitter', methods=['GET'])
def webhook_challenge():
# creates HMAC SHA-256 hash from incoming token and your consumer secret
sha256_hash_digest = hmac.new(API_KEY_SECRET.encode('utf-8'), msg=request.args.get('crc_token').encode('utf-8'), digestmod=hashlib.sha256).digest()
# construct response data with base64 encoded hash
response = {'response_token': 'sha256=' + base64.b64encode(sha256_hash_digest).decode('utf-8')}
# returns properly formatted json response
return json.dumps(response)
重要的是要注意,在您设置应用程序后,您的 Twitter 帐户 API 仪表板,继续并再次重新生成密钥。
由于您将运行两个应用程序,对于我来说是 Flask 应用程序和 NodeJs 应用程序,请确保更新所有应用程序中的所有 Consume Api 密钥和访问令牌。
更新失败将导致错误。在我的例子中,我没有在我的 Flask 应用程序上更新 Consumer_Api_Secret 并且收到错误消息 Webhook URL 不符合要求。无效的 CRC 令牌或 json 响应格式。