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学习笔记之入门篇
Apr 16 NodeJs
详解Nodejs的timers模块
Dec 22 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
NodeJS学习笔记之Module的简介
Mar 24 NodeJs
NodeJS基础API搭建服务器详细过程记录
Apr 01 NodeJs
NodeJS 实现多语言的示例代码
Sep 11 NodeJs
nodejs实现范围请求的实现代码
Oct 12 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 NodeJs
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
Feb 06 NodeJs
Nodejs实现WebSocket代码实例
May 19 NodeJs
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
May 30 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
文章推荐系统(三)
2006/10/09 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
YII2 实现多语言配置的方法分享
2017/01/11 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
Bootstrap fileinput组件封装及使用详解
2017/03/10 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
Python函数式编程指南(四):生成器详解
2015/06/24 Python
Python实现微信翻译机器人的方法
2019/08/13 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
使用K.function()调试keras操作
2020/06/17 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
印尼旅游网站:via
2017/11/12 全球购物
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
怎样写好自我鉴定
2013/12/04 职场文书
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
土建施工员岗位职责
2014/07/16 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2014年科协工作总结
2014/12/09 职场文书
单位考核聘任报告
2015/03/02 职场文书
信仰观后感
2015/06/03 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
js之ajax文件上传
2021/05/13 Javascript