问题描述
我正在使用网络钩子验证使用 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
,其他步骤相同。