nodeJS微信分享


Posted in NodeJs onDecember 20, 2017

本文实例为大家分享了nodeJS微信分享的具体代码,供大家参考,具体内容如下

一、接入微信JSSDK

直接引用或者下载本地都行

二、JS请求node后台签名、随机数、时间戳之类的

function getWxSignature() { 
  $.ajax({ 
    url: "/activityWxShaer", 
    type: 'post', 
    data: { urlhref:location.href }, 
    success: function(jsons) { 
      var data = JSON.parse(jsons); 
      wx.config({ 
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 
        appId: 'xxxxxxxxx', // 必填,公众号的唯一标识 
        timestamp: data.timestamp, // 必填,生成签名的时间戳 
        nonceStr: data.nonceStr, // 必填,生成签名的随机串 
        signature: data.signature, // 必填,签名,见附录1 
        jsApiList: [ 
            'onMenuShareTimeline', 
            'onMenuShareAppMessage', 
            'onMenuShareQQ', 
            'onMenuShareWeibo', 
            'onMenuShareQZone' 
          ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 
      }); 
      shareFunc();// 微信的分享接口 里面为ready 
    } 
  }); 
}

三、nodeJS express 路由

/** 
 * 分享 
 */ 
router.post('/activityWxShaer', function(req, res, next) { 
  let hrefURL = req.body.urlhref; 
  wxShare.prototype.accessToken(hrefURL, function(data) { 
    res.json(data); 
  }); 
});

四、nodeJS签名,微信重点签名,我是采用sha1 ,我看了好多都是用sha-1,HEX之类的不知道是不是我环境的问题,我不能用最后只能自己写了

/** 
   * 签名 
   * @param {*} url 
   */ 
  sign(url) { 
    let _this = this; 
    var ret = { 
      jsapi_ticket: configEnd.ticket, 
      nonceStr: configEnd.nonceStr, 
      timestamp: configEnd.timestamp, 
      url: url 
    }; 
    var string = _this.rawString(ret); 
    var shaObjs = sha1(string); 
    return shaObjs; 
  }; 

四、nodeJS后台代码直接上整体代码
[javascript] view plain copy
var url = require('url'); 
var request = require('request'); 
var sha1 = require('sha1'); 
 
let config = { 
    appID: "",// 微信公众号ID 
    appSecret: "" //微信公众号里有 
  }, 
  configEnd = { 
    appID: '', 
    access_token: '', 
    ticket: '', 
    timestamp: '', // 必填,生成签名的时间戳 
    nonceStr: '', // 必填,生成签名的随机串 
    signature: '', // 必填,签名,见附录1 
  }; 
 
/** 
 * 微信分享 
 */ 
class wxShare { 
  /** 
   * 请求获取access_token 方法入口 
   * @param {* URL链接} hrefURL 
   * @param {* 回调请求方法} callback 
   */ 
  accessToken(hrefURL, callback) { // 获取access_token 
    let _this = this; 
    var tokenUrl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + config.appID + '&secret=' + config.appSecret; 
    request(tokenUrl, function(error, response, body) { 
      if (response.statusCode && response.statusCode === 200) { 
        body = JSON.parse(body); 
        configEnd.access_token = body.access_token; 
        _this.upJsapiTicket(hrefURL, body.access_token, callback) 
      } 
    }); 
  }; 
  /** 
   * 获取<span style="font-family:Arial;">Jsapi_Ticket</span> 
   * @param {* URL链接} hrefURL 
   * @param {* token} access_Ttoken 
   * @param {* 回调请求方法} callback 
   */ 
  upJsapiTicket(hrefURL, access_Ttoken, callback) { // Jsapi_ticket 
    let _this = this; 
    var ticketUrl = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' + access_Ttoken + '&type=jsapi'; 
    request(ticketUrl, function(err, response, content) { 
      content = JSON.parse(content); 
      if (content.errcode == 0) { 
        configEnd.ticket = content.ticket; // ticket 
        configEnd.timestamp = _this.createTimestamp(); // 时间戳 
        configEnd.nonceStr = _this.createNonceStr(); // 随机数 
        configEnd.signature = _this.sign(hrefURL); // 签名 
        callback && callback(configEnd); // 回调前端JS方法 
      } 
    }) 
  }; 
  /** 
   * 随机字符串 
   */ 
  createNonceStr() { 
    return Math.random().toString(36).substr(2, 15); 
  }; 
  /** 
   * 时间戳 
   */ 
  createTimestamp() { 
    return parseInt(new Date().getTime() / 1000).toString(); 
  }; 
  /** 
   * 拼接字符串 
   * @param {*} args 
   */ 
  rawString(args) { 
    var keys = Object.keys(args); 
    keys = keys.sort() 
    var newArgs = {}; 
    keys.forEach(function(key) { 
      newArgs[key.toLowerCase()] = args[key]; 
    }); 
    var string = ''; 
    for (var k in newArgs) { 
      string += '&' + k + '=' + newArgs[k]; 
    } 
    string = string.substr(1); 
    return string; 
  }; 
  /** 
   * 签名 
   * @param {*} url 
   */ 
  sign(url) { 
    let _this = this; 
    var ret = { 
      jsapi_ticket: configEnd.ticket, 
      nonceStr: configEnd.nonceStr, 
      timestamp: configEnd.timestamp, 
      url: url 
    }; 
    var string = _this.rawString(ret); 
    var shaObjs = sha1(string); 
    return shaObjs; 
  }; 
 
} 
module.exports = wxShare;

就一普通的ajax请求nodeJS后台,后台返回封装好的数据。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
初始Nodejs
Nov 08 NodeJs
nodejs教程之环境安装及运行
Nov 21 NodeJs
Nodejs Stream 数据流使用手册
Apr 17 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
详解nodejs操作mongodb数据库封装DB类
Apr 10 NodeJs
NodeJS使用七牛云存储上传文件的方法
Jul 24 NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 NodeJs
nodejs更新package.json中的dependencies依赖到最新版本的方法
Oct 10 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 NodeJs
nodejs各种姿势断点调试的方法
Jun 18 NodeJs
详解NodeJS模块化
Jun 15 NodeJs
NodeJS爬虫实例之糗事百科
Dec 14 #NodeJs
nodejs实现爬取网站图片功能
Dec 14 #NodeJs
NodeJs form-data格式传输文件的方法
Dec 13 #NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 #NodeJs
nodejs实现大文件(在线视频)的读取
Oct 16 #NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 #NodeJs
NodeJs实现定时任务的示例代码
Dec 05 #NodeJs
You might like
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
PHP new static 和 new self详解
2017/02/19 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
input type=file 选择图片并且实现预览效果的实例
2017/10/26 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
CSS3弹性盒模型开发笔记(三)
2016/04/26 HTML / CSS
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
C/C++程序员常见面试题一
2012/12/08 面试题
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
护理自荐信范文
2013/10/05 职场文书
小学生暑假感言
2014/02/06 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书
使用Docker容器部署rocketmq单机的全过程
2022/04/03 Servers