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中的非阻塞方法介绍
Jun 05 NodeJs
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
Sep 26 NodeJs
Nodejs学习笔记之Stream模块
Jan 13 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
Nodejs学习笔记之测试驱动
Apr 16 NodeJs
详解nodejs微信公众号开发——4.自动回复各种消息
Apr 11 NodeJs
详解如何在NodeJS项目中优雅的使用ES6
Apr 22 NodeJs
Nodejs中使用phantom将html转为pdf或图片格式的方法
Sep 18 NodeJs
nodejs用gulp管理前端文件方法
Jun 24 NodeJs
Nodejs异步流程框架async的方法
Jun 07 NodeJs
nodeJs的安装与npm全局环境变量的配置详解
Jan 06 NodeJs
浅谈JS和Nodejs中的事件驱动
May 05 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
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
js验证表单第二部分
2006/11/25 Javascript
JS解析XML的实现代码
2009/11/12 Javascript
javascript利用控件对windows的操作实现原理与应用
2012/12/23 Javascript
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
jquery 使用简明教程
2014/03/05 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
express 项目分层实践详解
2018/12/10 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Python日志模块logging基本用法分析
2018/08/23 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
Django中Aggregation聚合的基本使用方法
2020/07/09 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
项目资料员岗位职责
2013/12/10 职场文书
销售员求职个人的自我评价
2014/02/19 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
签订劳动合同通知书
2015/04/16 职场文书
react antd实现动态增减表单
2021/06/03 Javascript
解析在浏览器地址栏输入一个URL后发生了什么
2021/06/21 Servers
JavaScript设计模式之原型模式详情
2022/06/21 Javascript