nodeJS微信JSDK 配置

更新日期: 2019-09-22 阅读: 3.2k 标签: 微信

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


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

微信生成签名步骤:

1.获取token

2.通过token,获取jsapi_ticket

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

4.排序拼接生成签名

  • 在routes---->index.js
var express = require('express');
var router = express.Router();
var axios = require('axios');
var sha1 = require('sha1');
var fs = require('fs');

let accessTokenJson = require('../user_token');

const APP_ID = 'wx47159511d53720fb'
const APP_SECRET = 'e8be2675730af8b743769e34fc8a7267'
let config_nonceStr = '' //随机字符串
let config_timestamp = '' //时间戳

/* GET home page. */
router.get('/', function(req, res, next) {
    res.send('这是首页')
});

router.get('/getWxConfig', function (req, res, next) {
  let url = req.query.url;  // 获取url
  getToken().then(getTicket).then(ret=>{
    res.json({ // 返回前端需要的配置config
      success:true,
      code:200,
      config_appid: APP_ID,
      config_sign: signature(ret, url),
      config_timestamp,
      config_nonceStr
    })
  })
});

/*获取token*/
function getToken(){
  return new Promise((resolve,reject)=>{
    //获取当前时间 
    var currentTime = new Date().getTime();
    if (accessTokenJson.access_token === '' || accessTokenJson.expires_time < currentTime){
      axios.get('https://api.weixin.qq.com/cgi-bin/token',{
        params:{
          appid: APP_ID,
          secret: APP_SECRET,
          grant_type: 'client_credential'
        }
      }).then(res=>{
        accessTokenJson.access_token = res.data.access_token;
        accessTokenJson.expires_time = new Date().getTime() + (parseInt(res.data.expires_in) - 200) * 1000;
        //更新本地存储
        fs.writeFile('../user_token.json', JSON.stringify(accessTokenJson));
        resolve(accessTokenJson.access_token)
      }).catch(err => {
        return Promise.reject(err);
      })
    }else{
      resolve(accessTokenJson.access_token)
    }
  })
}

/* 通过token,获取jsapi_ticket */
function getTicket(accessToken){
  return new Promise((resolve,reject)=>{
    axios.get('https://api.weixin.qq.com/cgi-bin/ticket/getticket', {
      params: {
        type: 'jsapi',
        access_token: accessToken
      }
    }).then(res => {
      resolve(res.data.ticket);
    }).catch(err=>{
      return Promise.reject(err);
    })
  })
}

/**
 * 签名算法
 * @param ticket 用于签名的 jsapi_ticket
 * @param url 用于签名的 url ,注意必须动态获取
 * @return sha1算法加密的字符串
 */
function signature(ticket, url){
  config_nonceStr = createNonceStr() // 生成随机字符串
  config_timestamp = createTimestamp() // 获取当前时间戳
  let ret ={
    jsapi_ticket: ticket,
    nonceStr:config_nonceStr,
    timestamp:config_timestamp,
    url: url,
  }
  var string = raw(ret) // 排序拼接为字符串
  console.log(string)
  return sha1(string) // 返回sha1加密的字符串
}

/* 生成随机字符串 */
function createNonceStr(){
  return Math.random().toString(36).substr(2,15);
}

/* 获取当前时间戳 */
function createTimestamp() {
  return parseInt(new Date().getTime() / 1000) + '';
}

/* 排序拼接 */
function raw(args){
  let keys = Object.keys(args).sort(); //获取args对象的键值数组,并对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)
  let newArgs ={}
  keys.forEach(key=>{
    newArgs[key.toLowerCase()] = args[key];
  })
  let string = '';
  for (let k in newArgs) {// 循环新对象,拼接为字符串
    string +=`&${k}=${newArgs[k]}`
  }
  string = string.substr(1)// 截取第一个字符以后的字符串(去掉第一个'&')
  return string;
}

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

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

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

5、调用微信接口APi

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


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/6091

相关推荐

微信跳转外部浏览器打开的代码实现

在我们做营销活动或推广宣传的时候,容易遇到域名被封,无法跳转app下载等情况。这时需要微信跳转外部浏览器打开页面的功能,目前ios只能通过遮罩层来提示用户,对于安卓可以直接跳转外面默认浏览器

Kbone:微信官方推出 Web 前端和小程序统一框架

最近微信官方重磅推出了一个统一 Web 前端和小程序的框架 —— Kbone 。微信小程序的底层模型和 Web 端不同,开发者无法直接把 Web 端的代码挪到小程序环境内执行。

js判断是否是微信浏览器方法总结【整理4种方式】

在实际开发中,我们需要知道当前的浏览器是微信内置的浏览器,那么如何判断呢?以下提示了四种方法,每一种都可以进行判断是否是微信浏览器。

解决微信公众平台网页授权两次或多次重定响应问题

在做微信公众平台网页授权时,发现每次请求授权链接时都会重定向链接redirect_uri都会自动请求两次,由于并发导致了一些问题,那么,为什么会请求两次呢?,调试时发现会访问两次,一次是301,页面重定向了,第二次跟第一次就差这个参数connect_redirect=1

微信内打开外部默认浏览器下载app

使用微信打开网址时,对于安卓端而言无法打开常用下载软件,手机APP等。大家常用的方法是,弹出一个遮罩提示用户在新的浏览器窗口打开。 但是我们基于微信接口开发了一款全新的手机端微信中推广助手,用户在微信中点击的话

用cookie解决新版微信中H5页面底部白条问题

实现思路是,引入cookie功能,创建一个存储访客微信用户信息的cookie。当用户首次访问时,通过oauth授权获取用户信息,并存储于cookie中。当用户再次访问时,判断是否有相应cookie来调取用户信息,这样就不会触发二次授权。

解决微信返回上一页.页面不刷新问题

在项目中遇到的一个神奇的 BUG,点击「返回」按钮返回到上一页,但是页面却没有刷新。这是 ios 微信的缓存机制造成的,跳转到下一页时仍然会缓存当前页。

解决微信返回上一页之后,页面不刷新

由于项目中使用了vue,使用了gulp和普通的页面跳转。并没有引入vue-router。所以不能使用 watch监控$router。微信公众号ios点击后退按钮,优选读取缓存,所以vue里的生命周期不会在进行调用。所以项目中执行隐藏分享qq,空间。等功能不被再次执行。

解决vue在ios微信“复制链接”始终为初始地址的问题

ios因为微信内置浏览器对 history 的支持不够全面 所以对于开启了 History Mode 的 SPA 应用,只会保存第一条 url 只要每个页面都刷新一次,判断环境为iOS的微信环境时候,使用重定向跳转的方式

套路!陌生美女加微信好友,提出激情裸聊,然后……

一个月黑风高的晚上,你独自刷着朋友圈,突然一个陌生女子要求。添加好友,你第一反应是什么?更要命的是没聊几句话,对方居然要求“裸聊”!

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!