签名:业务私钥;
RSA公私钥生成请移步
公钥需要配置在这儿 ,私钥自己保存(支付时用来签名)
验签:平台公钥;(用来验证平台推送的支付消息)
- 支付签名
const crypto = require('crypto');
//参数见官方文档
let text = 'appKey=xxx&dealId=xxx&totalAmount=xx&tpOrderId=xxx';
//业务私钥,和在-开发者设置-配置的公钥时一对,格式 .pem 我是直接导入的
var key = fs.readFileSync(this.app.config.baseDir + '/config/rsa_private_key.pem', 'utf-8')
var sha=crypto.createSign('RSA-SHA1');
sha.update(text, 'utf8');
rsaSign = sha.sign(key, 'base64');
console.log('\n使用私钥签名:', rsaSign);
拿着签名去支付就ok
支付时一般返回code6是签名问题
- 验签(支付完成后会在你配置的回调地址推送消息)
-
按照文档要去必须验签
// *注意参数 这里是返回的所有参数(除去rsaSign )
var data = 'count='+param.count+'&dealId='+param.dealId+'&giftCardMoney='+param.giftCardMoney+'&hbBalanceMoney='+param.hbBalanceMoney+'&hbMoney='+param.hbMoney+'&orderId='+param.orderId+'&partnerId='+param.partnerId+'&payMoney='+param.payMoney+'&payTime='+param.payTime+'&payType='+param.payType+'&promoDetail'+param.promoDetail+'=&promoMoney='+param.promoMoney+'&returnData='+param.returnData+'&status='+param.status+'&totalMoney='+param.totalMoney+'&tpOrderId='+param.tpOrderId+'&unitPrice='+param.unitPrice+'&userId='+param.userId+''
var sign = param.rsaSign //rsaSign
//平台公钥,我复制下来装到 pem 文件里了,注意格式,pem导入要有头有尾
var key = fs.readFileSync(this.app.config.baseDir + '/config/rsa_public_key.pem', 'utf-8')
var verify = crypto.createVerify('RSA-SHA1');
verify.update(data, 'utf-8');
var res=verify.verify(key,sign,'base64');
console.log("非对称签名校验结果结果:"+res);
*注意上面参与签名的字符串,哼容易出错.
*pem格式的密钥类似这种格式
版权声明:本文为time_xueing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。