微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Razorpay签名验证在python中失败

如何解决Razorpay签名验证在python中失败

我正在使用网络钩子验证使用 razorpay 付款链接完成的付款状态。我已将 webhook 添加到 RazorPay webhook 部分,并将 payment_links 作为活动元素。我在使用付款链接时收到付款完成指示。但是 webhook 抛出了这个错误

这是我验证签名的方式

webhook_secret = "abc"  
webhook_signature = request.headers['X-Razorpay-Signature']
client = razorpay.Client(auth=("xyz","pqr"))
payload_body = json.dumps(request.json,separators=(',',':'))
verify = client.utility.verify_webhook_signature(payload_body,webhook_signature,webhook_secret)
print(verify)

也试过了

payload_body = json.dumps(request.data,':'))

但我一直收到错误

razorpay.errors.SignatureVerificationError: Razorpay Signature Verification Failed

我是这样试的

verify = client.utility.verify_webhook_signature(request.data.decode('utf-8'),webhook_secret)
print(verify)

输出为无

已编辑

我尝试了以下方法,但没有一个奏效

1)  verify = client.utility.verify_webhook_signature(json.dumps(request.data,':')),webhook_secret)
        print("verification of signature {}".format(verify)) 

导致类型错误:字节类型的对象不是 JSON 可序列化的。

2)  verify = client.utility.verify_webhook_signature(json.dumps(request.json,webhook_secret)
        print("verification of signature {}".format(verify))
        #razorpay.errors.SignatureVerificationError: Razorpay Signature Verification Failed

3) verify = client.utility.verify_webhook_signature(json.dumps(body,webhook_secret)
    print("verification of signature {}".format(verify))

2 和 3 导致 razorpay.errors.SignatureVerificationError: Razorpay 签名验证失败

解决方法

如果您使用的是 Django,请使用 request.body 而不是 request.json 来获取原始正文并在解码后将其发送到 verify_webhook_signature 方法。这是示例代码 -

def verify_payment(request):
    payload_body = request.body.decode()
    webhook_secret = "abc"  
    webhook_signature = request.headers['X-Razorpay-Signature']
    client = razorpay.Client(auth=("xyz","pqr"))
    verify = client.utility.verify_webhook_signature(payload_body,webhook_signature,webhook_secret)
    print(verify)

您必须在验证之前对正文进行解码,因为此问题 https://github.com/razorpay/razorpay-python/issues/121 否则会引发 TypeError。

如果您使用 Flask,请使用 request.data 而不是 request.json,其他步骤相同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。