nodeJS微信分享

本文实例为大家分享了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后台,后台返回封装好的数据。

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

(0)

相关推荐

  • 使用Nodejs开发微信公众号后台服务实例

    摘要: 微信,庞大的用户基数,极强的用户粘性,在近两年吸引了无数的开发者注意力. Nodejs,近两年发展非常快的开发工具,尤其适合构建移动后台.本文就以笔者自己开发的实例,来描述如何基于Nodejs开发属于自己的微信公众号.在这个实例中,主要使用到了express, wechat, mongodb, monk等模块. 前期准备: 1.申请微信公众号,前往 https://mp.weixin.qq.com/  申请,这里不做过多阐述. 2. 购买服务器, 这里推荐Amazon的EC2,首次用户可

  • 详解nodejs微信公众号开发——2.自动回复

    上一篇文章:nodejs微信公众号开发(1)接入微信公众号,本篇文章将在此基础上实现简单的回复功能. 1. 接入代码的优化 之前我们简单粗暴的实现了微信公众号的接入,接入的代码直接写在了app.js文件里面,从项目开发的角度而言,不便于日后代码的维护,所以将这部分代码独立出来,按照koa的风格,写成一个中间件. 在根目录下新建wechat文件夹,新建generator.js文件, var sha1 = require('sha1'); module.exports = function(opts

  • 详解nodejs微信公众号开发——3.封装消息响应模块

    上一篇文章:nodejs微信公众号开发(2)自动回复,实现了简单的关注回复.采用拼接字符串的形式,并不是很方便,这里我们将其封装承接口. 1. ejs模板引擎 不使用拼接字符串的方式,那么模板引擎就是较好的选择.Nodejs开源模板的选择很多,程序中使用 EJS,有Classic ASP/PHP/JSP的经验用起EJS来的确可以很自然,也就是说,你能够在 <%...%> 块中安排 JavaScript 代码,利用最传统的方式 <%=输出变量%>(另外 <%-输出变量是不会对

  • nodejs获取微信小程序带参数二维码实现代码

    nodejs获取微信小程序带参数二维码实现代码 由于项目需求,需要获取小程序页面的带有参数的二维码.好,那就看文档搞吧. 之前都是写前端,没有写过后台的东西,这次难得有机会组长让我试一试试用node来写,那就写吧. 1.首页获取token,发送request请求,用get的方式,在url后面加上小程序的grant_type,appid,secret,就顺利拿到token了,注意,这个token是有有效时间的,小程序的是7200秒,也就是2个小时,每天获取的次数有限,需要有个中控服务器定时获取to

  • 详解nodejs微信公众号开发——6.自定义菜单

    上一篇文章:nodejs微信公众号开发--5.素材管理接口,我们实现了新增临时素材.管理永久素材的接口,这些接口的实现,使我们能够推送多样的消息给用户.本节介绍的内容是关于自定义菜单 1. 自定义菜单的介绍 自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能.关于自定义菜单需要掌握以下几点内容: 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单. 一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以"..."代替. 创建自定义菜单后,由于微信客

  • 使用NodeJs 开发微信公众号(三)微信事件交互实例

    微信公众号有个规则,一旦开启了开发者模式,其他的常规功能就都必须通过接口调用完成.比如说自定义菜单功能,必须通过发送post请求的方式生成.本章就通过关注到取消关注的整个过程来谈一谈nodejs是怎么样与微信交互的.这些功能的入口就是你在测试公众号里面填写的URL(以下用/login/wechat代替). 事件交互 扫码关注微信公众号后,微信会调用你的接口/login/wechat,并且附带一段xml信息,首先你需要获取一些签名,通过加密.排序比对是否与你填写的TOKEN一致,如果一致则进行xm

  • 详解nodejs微信公众号开发——5.素材管理接口

    上一篇文章:nodejs微信公众号开发--4.自动回复各种消息,我们实现了被动回复文字和图文,回复图片失败,因为需要先获取通过素材管理接口上传多媒体文件而得到的MediaId,这一节们就来实现素材管理的接口.可参看:公众平台开发者文档 1. 新增临时素材 临时素材顾名思义是临时的,上传后一定时间就被清理掉,适用于一些有时效性的图文链接.关于临时素材需要注意的点: 对于临时素材,每个素材(media_id)会在开发者上传或粉丝发送到微信服务器3天后自动删除(所以用户发送给开发者的素材,若开发者需要

  • 详解nodejs微信公众号开发——1.接入微信公众号

    接入微信公众号是开发的第一步,万事开头难,走好第一步,后面的路就更宽广. 1.公众平台测试帐号的使用 登录微信公众平台,由于很多开发人员并没有认证的的微信公众号,所以比较折中的方式是使用公众平台测试帐号来测试功能,其优势是能够测试微信公众号的绝大部分功能,不受认证门槛的限制. 进入测试账号管理界面: 我们需要配置接口的信息,URL和Token是微信公众平台和本地开发服务建立连接的桥梁. 微信配置好后,扫面下方的测试号二维码,即可以在手机上测试开发的功能. 2.验证公众号 一图胜千言.接入公众号时

  • nodejs微信公众号支付开发

    odeJs 微信公众号功能开发,移动端 H5页面调用微信的支付功能.这几天根据公司的需要使用 node 和 h5页面调用微信的支付功能完成支付需求.现在把开发过程重新捋一遍,以帮助更多的开发者顺利的完成微信支付功能的开发.(微信暂时还没有提供 node 的支付功能) 一.请求CODE 请求 code 的目的就是获取用户的 openid(用户相对于当前公众号的唯一标识) 和access_token,请求的API:https://open.weixin.qq.com/connect/oauth2/a

  • 详解nodejs微信公众号开发——4.自动回复各种消息

    上一篇文章:nodejs微信公众号开发--3.封装消息响应模块,实现了对消息接口的模块化处理,方便后期的使用,本篇文章将介绍微信公众号回复各种消息的功能实现,包括文本.图片.语音.视频.音乐.图文等. 注:感觉最近localtunnel很不稳定,测试起来比较麻烦,有条件的自己搞个云服务器吧,我比较偷懒,几继续使用localtunnel了. 1. 被动回复用户消息 当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML

随机推荐