我正在制作一个应用程序,其中在成功付款后创建一个摘要,然后使用Razorpay签名验证的建议方法进行验证。
我的后端在NodeJS中,这是我创建摘要的方式。
const crypto = require("crypto");
var generatedSignature = crypto
.createHmac(
"SHA256",
razorpay_order_id + "|" + razorpay_payment_id
)
.update(key_secret)
.digest("hex");
var isSignatureValid = generatedSignature == payload.razorpay_signature // false
我创建签名的方式错误吗?
答案 0 :(得分:0)
您只需要像下面那样更改顺序即可。
const crypto = require(“ crypto”);
var generateSignature =加密货币 .createHmac( “ SHA256”, key_secret ) .update(razorpay_order_id +“ |” + razorpay_payment_id) .digest(“ hex”);
var isSignatureValid = generateSignature == payload.razorpay_signature
答案 1 :(得分:0)
您可以使用以下代码。希望这可以使代码更容易理解。
const crypto = require("crypto");
const hmac = crypto.createHmac('sha256', RAZORPAY_KEY_SECRET);
hmac.update(razorpayOrderId + "|" + razorpayPaymentId);
let generatedSignature = hmac.digest('hex');
let isSignatureValid = generatedSignature == payload.razorpay_signature;
请参阅此链接以获取更多https://nodejs.org/api/crypto.html#crypto_class_hmac
答案 2 :(得分:0)
浏览了razorpay npm官方模块后,发现此功能可以为您完成工作。也可以利用它。
文件名和目录:node_modules / razorpay / dist / utils / razorpay-utils.js,函数名:validateWebhookSignature
采用'body'-哈希序列, '签名'-razorpay返回签名, 'key_secret'-从razorpay仪表板
它使用与该线程先前提到的相同的crypto.hmac_256函数。
更新: 使用此功能进行测试,返回不匹配的false ==>签名。
在GitHub上阅读,使用测试密钥无法匹配签名。使用实时键即可使用。
当我尝试使用生产密钥时,将更新此线程。 干杯!
答案 3 :(得分:0)
const crypto=require('crypto');
const json = JSON.stringify(req.body); // req.body is entire body payload
const expectedSignature =
crypto.createHmac('sha256',secretKey).update(json).digest('hex');
// secretKey is configured key provided by us while creating webhook
//--- Or Use razorpay static method
/*
@params body string (body is req.body data)
@params razorpayHeaderSignature string (x-razorpay-signature of header section
provided by webhook)
@params secretKey (secretKey is configured key provided by us while creating webhook)
*/
const json = JSON.stringify(req.body); // req.body is entire body payload
Razorpay.validateWebhookSignature(body, razorpayHeaderSignature, secretKey);
注意 - IN 请求正文不要使用某些特殊字符,如“/”等。这会导致签名验证失败。
答案 4 :(得分:0)
以下解决方案对我有用
import crypto from 'crypto';
const signature = req.headers['x-razorpay-signature'];
const generatedSignature = crypto
.createHmac('sha256', RAZOR_PAY_WEBHOOK_SECRET)
.update(JSON.stringify(req.body))
.digest('hex');
if (signature === generatedSignature) {
console.log('request is legit');
}
else{
console.log('Wrong Signature!');
}