node 百度小程序支付签名/通知支付状态验签

  • Post author:
  • Post category:小程序


签名:业务私钥;


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 版权协议,转载请附上原文出处链接和本声明。