Вы получаете ошибку 403 по 2 причинам.Чтобы смоделировать запрос webhook от Viber, вы должны отправить заголовок X-Viber-Content-Signature
.Также это значение должно быть хешем SHA256, вычисленным с использованием токена аутентификации и полезной нагрузки webhook, как описано в их документах по API в разделе Обратные вызовы .
. Я полагаю, у вас есть 2 варианта здесь.Если вы хотите просто проверить, правильно ли ваш код получает веб-крючок, вы можете временно закомментировать строки verify_signature()
.Viber (или любой другой источник webhook) не требует проверки запросов webhook.Обычно разработчик полагает, что библиотека, подобная той, что предоставляется Viber, правильно тестирует свой код, поэтому обычно нет необходимости снова тестировать их функциональность.Вы также можете подумать о создании этой функции, поскольку в этом случае это очень просто.
Если вы действительно хотите проверить проверку подписи Viber, вам нужно будет реализовать две причины, которые я упомянул в первую очередь.Вот в основном то, что вам нужно сделать в своем тестовом отправляющем коде.Обратите внимание, что я включил только новый код, который вам нужен ниже, пожалуйста, объедините его с другим вашим тестовым кодом.
import json
import hmac
import hashlib
# Compute SHA256 hex digest signature using auth token and payload.
auth_token = 'xxx-xxx-xxx'
signature = hmac.new(
key=auth_token.encode('ascii'),
msg=data.encode('ascii'),
digestmod=hashlib.sha256
).hexdigest()
# Send test webhook request with computed signature in header.
response = requests.post(
webhook_url,
data=json.dumps(data),
headers={
'X-Viber-Content-Signature': signature,
'Content-Type': 'application/json'
},
verify='E:\\Docs\\learn_py\\viberbot\\certificate.pem'
)
Обратите внимание, что @tukan указал на функцию _calculate_message_signature()
в viber-bot-python репо, который показывает, как вычисляется подпись.