nodeJS微信JSDK 配置

一、微信公众平台申请一个测试公众号

二、配置nodeJS 使用express框架搭建服务器

微信生成签名步骤:

1.获取token

2.通过token,获取jsapi_ticket

3.生成随机字符串,获取当前时间戳

4.排序拼接生成签名

  • 在routes---->index.js
  1. var express = require('express');
  2. var router = express.Router();
  3. var axios = require('axios');
  4. var sha1 = require('sha1');
  5. var fs = require('fs');
  6. let accessTokenJson = require('../user_token');
  7. const APP_ID = 'wx47159511d53720fb'
  8. const APP_SECRET = 'e8be2675730af8b743769e34fc8a7267'
  9. let config_nonceStr = '' //随机字符串
  10. let config_timestamp = '' //时间戳
  11. /* GET home page. */
  12. router.get('/', function(req, res, next) {
  13. res.send('这是首页')
  14. });
  15. router.get('/getWxConfig', function (req, res, next) {
  16. let url = req.query.url; // 获取url
  17. getToken().then(getTicket).then(ret=>{
  18. res.json({ // 返回前端需要的配置config
  19. success:true,
  20. code:200,
  21. config_appid: APP_ID,
  22. config_sign: signature(ret, url),
  23. config_timestamp,
  24. config_nonceStr
  25. })
  26. })
  27. });
  28. /*获取token*/
  29. function getToken(){
  30. return new Promise((resolve,reject)=>{
  31. //获取当前时间
  32. var currentTime = new Date().getTime();
  33. if (accessTokenJson.access_token === '' || accessTokenJson.expires_time < currentTime){
  34. axios.get('https://api.weixin.qq.com/cgi-bin/token',{
  35. params:{
  36. appid: APP_ID,
  37. secret: APP_SECRET,
  38. grant_type: 'client_credential'
  39. }
  40. }).then(res=>{
  41. accessTokenJson.access_token = res.data.access_token;
  42. accessTokenJson.expires_time = new Date().getTime() + (parseInt(res.data.expires_in) - 200) * 1000;
  43. //更新本地存储
  44. fs.writeFile('../user_token.json', JSON.stringify(accessTokenJson));
  45. resolve(accessTokenJson.access_token)
  46. }).catch(err => {
  47. return Promise.reject(err);
  48. })
  49. }else{
  50. resolve(accessTokenJson.access_token)
  51. }
  52. })
  53. }
  54. /* 通过token,获取jsapi_ticket */
  55. function getTicket(accessToken){
  56. return new Promise((resolve,reject)=>{
  57. axios.get('https://api.weixin.qq.com/cgi-bin/ticket/getticket', {
  58. params: {
  59. type: 'jsapi',
  60. access_token: accessToken
  61. }
  62. }).then(res => {
  63. resolve(res.data.ticket);
  64. }).catch(err=>{
  65. return Promise.reject(err);
  66. })
  67. })
  68. }
  69. /**
  70. * 签名算法
  71. * @param ticket 用于签名的 jsapi_ticket
  72. * @param url 用于签名的 url ,注意必须动态获取
  73. * @return sha1算法加密的字符串
  74. */
  75. function signature(ticket, url){
  76. config_nonceStr = createNonceStr() // 生成随机字符串
  77. config_timestamp = createTimestamp() // 获取当前时间戳
  78. let ret ={
  79. jsapi_ticket: ticket,
  80. nonceStr:config_nonceStr,
  81. timestamp:config_timestamp,
  82. url: url,
  83. }
  84. var string = raw(ret) // 排序拼接为字符串
  85. console.log(string)
  86. return sha1(string) // 返回sha1加密的字符串
  87. }
  88. /* 生成随机字符串 */
  89. function createNonceStr(){
  90. return Math.random().toString(36).substr(2,15);
  91. }
  92. /* 获取当前时间戳 */
  93. function createTimestamp() {
  94. return parseInt(new Date().getTime() / 1000) + '';
  95. }
  96. /* 排序拼接 */
  97. function raw(args){
  98. let keys = Object.keys(args).sort(); //获取args对象的键值数组,并对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)
  99. let newArgs ={}
  100. keys.forEach(key=>{
  101. newArgs[key.toLowerCase()] = args[key];
  102. })
  103. let string = '';
  104. for (let k in newArgs) {// 循环新对象,拼接为字符串
  105. string +=`&${k}=${newArgs[k]}`
  106. }
  107. string = string.substr(1)// 截取第一个字符以后的字符串(去掉第一个'&')
  108. return string;
  109. }
  110. module.exports = router;

三、使用内网穿透工具(例如:natapp)把本地服务器映射到公网上去

如果有服务器的可以跳过这一步

四、前端使用微信JSDK

使用步骤:

1、绑定域名

2、引入JS文件 http://res2.wx.qq.com/open/js/jweixin-1.4.0.js

vue 项目可以下载模块 npm i weixin-js-sdk -S

3、配置config

  1. wx.config({
  2. debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  3. appId: '', // 必填,公众号的唯一标识
  4. timestamp: , // 必填,生成签名的时间戳
  5. nonceStr: '', // 必填,生成签名的随机串
  6. signature: '',// 必填,签名
  7. jsApiList: [] // 必填,需要使用的JS接口列表
  8. });

4、通过ready接口处理成功验证,通过error接口处理失败验证

5、调用微信接口APi

详情见开发文档地址:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html

nodeJS微信JSDK 配置的更多相关文章

  1. nodejs微信公众号快速开发|自定义关键字回复

    一点说明: nodejs 微信api 扩展,集成大部分功能. 案例 https://github.com/leiroc/node-wxeasy-example 上传example中文件到服务器 ,然后 ...

  2. Webpack 2 视频教程 002 - NodeJS 安装与配置

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  3. Nodejs的安装配置及如何在sublimetext2中运行js

    Nodejs的安装配置及如何在sublimetext2中运行js听语音 | 浏览:4554 | 更新:2015-06-16 11:29 Nodejs的安装配置及如何在sublimetext2中运行js ...

  4. Linux环境下NodeJS的安装配置(HelloWorld)

    Linux环境下NodeJS的安装配置(HelloWorld) 最简单的环境安装,测试helloworld.给初学者!! 安装脚本,请仔细阅读逐行执行: #!/bin/bash #检查是否已经安装 r ...

  5. Nodejs微信开发使用wechat-api回复多条消息

    在上一往篇文章<Nodejs微信开发>中,微信后台能够正常的接收到客户端的消息,并能够简单的回复一条消息至客户端. 但我的目录是将微信与Bot Framework进行关联,那么肯定就有一些 ...

  6. Java企业微信开发_07_总结一下企业微信的配置

    一.企业微信后台 1.回调url 2.可信域名 3.菜单跳转按钮中的链接 4.PC端网页授权 二.代码内 1.企业微信的配置信息:WeiXinParamesUtil

  7. 微信支付配置参数:支付授权目录、回调支付URL

    一.开通微信支付的首要条件是:认证服务号或政府媒体类认证订阅号(一般认证订阅号无法申请微信支付) 二.微信支付分为老版支付和新版支付,除了较早期申请的用户为老版支付,现均为新版微信支付. 三.公众平台 ...

  8. 【详细、开箱即用】.NET企业微信回调配置(数据回调URL和指令回调URL验证)

    前言: 前段时间因为公司业务需求,需要将微信小程序与企业微信对接通,也就是把小程序绑定到对应的企业微信账号下,在该企业微信的用户可以将该小程序绑定到工作台中,然后可以在工作台中打开该小程序并授权.不过 ...

  9. NodeJS 微信公共号开发 - 响应微信发送的Token验证(山东数漫江湖)

    背景 使用 NodeJS 进行微信公共号开发,首先需要响应微信发送的Token验证,官方文档 填写服务器配置 登录微信公共平台,在开发下的基本配置打开该页面. 依次填写接口的 URL.自定义的 Tok ...

随机推荐

  1. yapi内网部署 centos

    1.部署方案 官方说明: https://hellosean1025.github.io/yapi/devops/index.html 2.需要注意的点 (1)在centos等服务启上最好使用“命令行 ...

  2. Transform the vot dataset into 4 corner format

    Transform the vot dataset into 4 corner format Matlab code to change the 8 value ground truth into 4 ...

  3. 【转】解决chrome浏览器不支持audio和video标签的autoplay自动播放

    声音无法自动播放这个在 IOS/Android 上面一直是个惯例,桌面版的 Safari 在 2017 年的 11 版本也宣布禁掉带有声音的多媒体自动播放功能,紧接着在 2018 年 4 月份发布的 ...

  4. 关于uboot中的属性"u-boot,dm-pre-reloc”的意义

    "u-boot,dm-pre-reloc”属性:当设置了这个属性时,则表示这个设备在重定向之前就需要使用. 当dm_init_and_scan的参数为true时,只会对带有“u-boot,d ...

  5. mysql判断表字段或索引是否存在,然后修改

    判断字段是否存在: DROP PROCEDURE IF EXISTS schema_change; DELIMITER // CREATE PROCEDURE schema_change() BEGI ...

  6. CentOS 使用官方源yum安装最新nginx版本

    CentOS 使用官方源yum安装最新nginx版本 1.创建nginx.repo # vi /etc/yum.repos.d/nginx.repo 2.添加内容#如果是CentOS6,文件内容如下: ...

  7. 006-nginx.conf详解-error_page 使用

    一.概述 nginx指令error_page的作用是当发生错误的时候能够显示一个预定义的uri 1.1.使用步骤 更改nginx.conf在http定义区域加入: proxy_intercept_er ...

  8. 【转】Redis哨兵(Sentinel)模式

    主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用.这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式. 一.哨兵 ...

  9. Qt开发经验小技巧81-90

    Qt中的QColor对颜色封装的很完美,支持各种转换,比如rgb.hsb.cmy.hsl,对应的是toRgb.toHsv.toCmyk.toHsl,还支持透明度设置,颜色值还能转成16进制格式显示. ...

  10. javascript Round Function

    var rounded = Math.round( number * 10 ) / 10; // round to one digit var rounded = Math.round( number ...