来自Patreon文档:
消息签名是消息体HMAC的十六进制摘要,HMAC使用webhooks页面上可查看的webhook的秘密进行签名(使用MD5)。您可以使用此项验证我们是否是邮件的发件人。
这就是我尝试验证Express
服务器中的消息的方式:
js prettyprint-override">import express from 'express';
import CryptoJS from 'crypto-js';
const router = express();
router.post('/webhook', function (req, res) {
const secret = 'Secret from https://www.patreon.com/portal/registration/register-webhooks';
console.log(CryptoJS.HmacMD5(req.body, secret).toString(CryptoJS.enc.Hex))
console.log(CryptoJS.HmacMD5(JSON.stringify(req.body), secret).toString(CryptoJS.enc.Hex))
const wordArray = CryptoJS.enc.Utf8.parse(req.body)
const hexString = CryptoJS.enc.Hex.stringify(wordArray);
console.log(CryptoJS.HmacMD5(hexString, secret).toString(CryptoJS.enc.Hex))
res.send();
});
但我记录的所有这些结果与我从标题中获得的X-Patreon-Signature值不同。
首先确保您的秘密在代码中是正确的,然后继续创建一个使用加密来散列有效负载的新文件。
我从使用功能ComputeHash制作散列模块文件开始。此函数为参数获取秘密和有效负载:
const crypto = require('crypto');
/**
* @return {string}
*/
exports.ComputeHash = function (secret, payload)
{
// string to be hashed
const str = JSON.stringify(payload);
// create a md5 hasher
const md5Hasher = crypto.createHmac("md5", secret);
// hash the string
// and set the output format
const hash = md5Hasher.update(str).digest("hex");
return(hash);
};
现在,在API文件中使用patreon应该如何实现:
注意:为了验证,您必须比较签名和哈希变量。如果两者相等,则进行验证。
我建议使用中间件来实现它,但出于演示目的,我这样做了。
const Hasher = require('./../modules/Hasher');
//more code
.post('/', async (req, res) => {
try {
const secret = config.token;
const signature = req.headers["x-patreon-signature"];
const Hash = Hasher.ComputeHash(secret, req.body);
console.log(signature);
console.log(Hash);
const verified = (signature === Hash);
} catch (e) {
res.status(401);
res.end();
}
// more code
我正在尝试用python制作一个电报回声机器人。我在heroku上托管我的python。 起初,我只是对python请求使用了电报本地API方法,然后我使用了一个python-telegram-bot库。 我能够让常规的getUpdate方法(使用长轮询——即heroku定期向您的电报机器人发出请求以获取更新)工作,但webhook不能。 我认为问题是heroku不会允许进入港口 有谁知道我该怎么
我一直想做实时聊天。 多年前,我在PHP Ajax Mysql中就这样做了,并破坏了我的服务器。 然后我用Flash试了一个文本文件。我放弃了,已经10年没有尝试过了。但是最近我听说了webhooks和websockets。 它们似乎都是做到这一点的一种方式,但我并没有真正理解其中的区别。 任何人都可以解释吗? 谢谢!
我通过GitHub将我的电报机器人部署到Heroku(我使用Webhook),机器人正在运行,但由于某种原因,它没有通过Webhook接收消息。 代码如下: 文件:
我想挂一个窗口并接收它的消息 获取了(is int),但是如何将其转换为并使用?
我有一个webhook来接收我正在尝试配置的更新。我需要从标头中获取不记名令牌,但我无法检索它。有人能解释一下这个问题吗?我被难住了! 接收网址https://example.com/receive
状态{statuscode=network_error,resolution=null} 任何形式的帮助都将受到高度赞赏。