Я получаю POST-запрос в приложении Flask от Slack.Запрос отправляется, когда пользователь нажимает кнопку интерактивного сообщения.Согласно Slack docs я должен извлечь тело запроса для проверки подписи.Моя вычисленная подпись не совпадает с той, что прислал Slack.Фактически, тело запроса представляет собой некоторую закодированную строку.Строка на самом деле представляет собой закодированный словарь вместо параметров запроса str, как и ожидалось.
Вот начало моего представления:
@app.route('/register', methods=['POST'])
def register_visit():
data = request.get_data()
signature = request.headers.get('X-Slack-Signature', None)
timestamp = request.headers.get('X-Slack-Request-Timestamp', None)
signing_secret = b'aaaaaaaaaaaaaaaa'
# old message, ignore
if round(actual_time.time() - float(timestamp)) > 60 * 5:
return
concatenated = ("v0:%s:%s" % (timestamp, data)).encode('utf-8')
computed_signature = 'v0=' + hmac.new(signing_secret, msg=concatenated, digestmod=hashlib.sha256).hexdigest()
if hmac.compare_digest(computed_signature, signature):
...
Я попытался отформатировать полученные данные, чтобы сделатьэто выглядит так:
token=fdjkgjl&user_id=1234...
но я не знаю всех необходимых параметров, которые должны присутствовать в данных.
Любые идеи высоко ценятся.
Тело сообщения следующее - после декодирования URL (обратите внимание, что я изменил, возможно, конфиденциальные данные):
b'payload = {"type": "interactive_message", "actions":[{ "имя": "yes_button", "тип": "кнопка", "значение": "236"}], "callback_id": "visit_button", "команда": { "ID": "FFFFF",»домен ":" FFFF "}," канал ": {" идентификатор ":" FFFF», "название": "directmessage"}, "пользователь": { "идентификатор": "FFFFFF", "название": "fffft"}, "action_ts": "1540403943,419120", "message_ts": "1541403949,000100", "attachment_id": "1", "маркер": "8LpjBuv13J7xAjhl2lEajoBU", "is_app_unfurl" ложь "original_message": { "текст":»Тест " "bot_id": "DDDDDDDDD", "вложения": [{ "callback_id":" visit_button», "Текст": "Регистрация", "идентификатор": 1, "цвет": "3AA3E3", "действия": [{ "ID": "1", "имя": "yes_button", "текст": "Да", "тип": "кнопка", "значение": "236", "стиль": ""}], "запасной вариант": "Регистрация"}], "типа": "сообщение", "подтип":" bot_message "," ts ":" 1540413949.000100 "}," response_url ":" https://hooks.slack.com/actions/ffffff/ffffff/tXJjx1XInaUhrikj6oEzK08e","trigger_id":"464662548327.425084163429.dda35a299eedb940ab98dbb9386b56f0"}'