【问题标题】:TypeError: encoding without a string argument for razorpay webhook secret verification errorTypeError:编码不带字符串参数的 razorpay webhook 密码验证错误
【发布时间】:2019-12-16 09:04:59
【问题描述】:

我正在尝试验证 webhook 是否来自 Razorpay,但出现以下错误。

TypeError:没有字符串参数的编码

代码如下:

webhook_secret = MY_WEBHOOK_SECRET
signature = request.headers['X-Razorpay-Signature']
jsondata = json.loads(request.body)
client = razorpay.Client(auth=(MY_KEY, MY_SIGNATURE))
verify = client.utility.verify_webhook_signature(jsondata, signature, webhook_secret)

最后一行出现错误。有人可以帮我弄这个吗?谢谢!

Traceback(最近一次调用最后一次): 文件“C:\Users\Sreekanth\Anaconda3\lib\site-packages\django\core\handlers\exception.py”,第 34 行,在内部 响应 = get_response(请求) _get_response 中的文件“C:\Users\Sreekanth\Anaconda3\lib\site-packages\django\core\handlers\base.py”,第 115 行 response = self.process_exception_by_middleware(e, request) _get_response 中的文件“C:\Users\Sreekanth\Anaconda3\lib\site-packages\django\core\handlers\base.py”,第 113 行 响应 = Wrapped_callback(request, *callback_args, **callback_kwargs) 文件“C:\Users\Sreekanth\Anaconda3\lib\site-packages\django\views\decorators\csrf.py”,第 54 行,位于 Wrapped_view 返回 view_func(*args, **kwargs) razorpay_webhook 中的文件“C:\Users\Sreekanth\Documents\BoosterKick_software\BoosterKick\pages\views.py”,第 168 行 验证 = client.utility.verify_webhook_signature(jsondata,签名,webhook_secret) 文件“C:\Users\Sreekanth\Anaconda3\lib\site-packages\razorpay\utility\utility.py”,第 25 行,在 verify_webhook_signature self.verify_signature(正文,签名,秘密) 文件“C:\Users\Sreekanth\Anaconda3\lib\site-packages\razorpay\utility\utility.py”,第 30 行,在 verify_signature 正文 = 字节(正文,'utf-8') TypeError:没有字符串参数的编码

【问题讨论】:

  • 您好,请针对此错误发布您的整个堆栈跟踪。
  • 向我们展示完整的错误跟踪(如果显示,请删除您的 API 密钥)。但也许这个问题最好问给 Razorpay 的人。另外,在调用它们的 API 之前,请检查 jsondatasignaturewebhook_secret 的值。
  • 所以body 不是它所期望的。检查您的jsondata
  • 感谢您的回复。我编辑了问题以添加完整的错误跟踪。
  • jsondata 是字典或列表对象,而不是字符串。尝试将request.body 直接传递给网络挂钩检查。

标签: django webhooks razorpay


【解决方案1】:
webhook_secret = MY_WEBHOOK_SECRET
signature = request.headers['X-Razorpay-Signature']
jsondata = json.loads(request.body)
client = razorpay.Client(auth=(MY_KEY, MY_SIGNATURE))
client.utility.verify_webhook_signature(json.dumps(jsondata, separators=(',', ':')), signature, webhook_secret)

这对我有用。

【讨论】:

    猜你喜欢
    • 2019-05-11
    • 1970-01-01
    • 2016-10-02
    • 2019-01-28
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2020-10-05
    • 2021-10-12
    相关资源
    最近更新 更多