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 Express框架中处理404页面一个方式
May 28 NodeJs
基于html5和nodejs相结合实现websocket即使通讯
Nov 19 NodeJs
nodejs 实现钉钉ISV接入的加密解密方法
Jan 16 NodeJs
NodeJS遍历文件生产文件列表功能示例
Jan 22 NodeJs
Nodejs之http的表单提交
Jul 07 NodeJs
深入解析nodejs HTTP服务
Jul 25 NodeJs
nodejs 图片预览和上传的示例代码
Sep 30 NodeJs
NodeJS简单实现WebSocket功能示例
Feb 10 NodeJs
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
Oct 17 NodeJs
搭建一个nodejs脚手架的方法步骤
Jun 28 NodeJs
linux 下以二进制的方式安装 nodejs
Feb 12 NodeJs
NodeJs内存占用过高的排查实战记录
May 10 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
Laravel 5框架学习之表单
2015/04/08 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
2019/06/03 PHP
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
iframe中使用jquery进行查找的方法【案例分析】
2016/06/17 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
vuex实现简易计数器
2016/10/27 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
laydate时间日历插件使用方法详解
2018/11/14 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
2020/02/23 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
简单的Python2.7编程初学经验总结
2015/04/01 Python
在Python中操作日期和时间之gmtime()方法的使用
2015/05/22 Python
微信跳一跳游戏python脚本
2020/04/01 Python
Kears+Opencv实现简单人脸识别
2019/08/28 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
python全栈开发语法总结
2020/11/22 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
翻译专业应届生求职信
2013/11/23 职场文书
给女儿的表扬信
2014/01/18 职场文书
英语故事演讲稿
2014/04/29 职场文书
个人承诺书格式
2014/06/03 职场文书
庆七一活动总结
2014/08/27 职场文书
政协会议宣传标语
2014/10/09 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
白鹤梁导游词
2015/02/06 职场文书
离婚案件原告代理词
2015/05/23 职场文书
python神经网络 使用Keras构建RNN训练
2022/05/04 Python