文章目录

  • 服务器安装与配置
  • 代码编写
    • 给大家整理了一下
  • 开启服务器

我选用的是node.js来搭建服务器,没有安装的小伙伴可以参考我的node.js其他博客。

服务器安装与配置

  1. 初始化项目,将会自动创建package.json配置文件。

    npm init -y
    
  2. 安装Express框架和request模块。
    npm install express –save
    npm install request --save
    
  3. 安装nodemon监控文件修改(如果已经安装则跳过此步)。
    npm install nodemon -g
    

代码编写

执行上述命令后,在项目目录下创建app.js文件,编写代码如下:

引入Express框架和request模块,配置appid和secret。

const express = require('express')
const bodyParser = require('body-parser')
const request = require('request')
const app = express()
app.use(bodyParser.json())
const wx = {appid: '',   // 需要填写开发者的AppIDsecret: ''    // 需要填写开发者的AppSecret
}

模拟数据库。(在这就用数组形式,数据库搭建比较繁琐,在这不展示了,可以参考我博客中其他的node.js+mysql项目)

var db = {  // 模拟数据库session: {},    // 保存openid和session_key的会话信息user: {}        // 保存用户记录,如用户名、积分等数据
}

请求登录接口,校验登录凭证的微信接口URL地址。
(下面的url 是腾讯提供的测试 凭证的接口,不用修改)

app.post('/login', (req, res) => {var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' +wx.appid + '&secret=' + wx.secret + '&js_code=' + req.body.code +'&grant_type=authorization_code'  request(url, (err, response, body) => {if(){ // 此处代码判断session.openid是否存在}}res.json({token: token})})
})

判断 session 中 openid 语句代码。

if (session.openid) {var session = JSON.parse(body)// 用于生成tokenvar token = 'token_' + new Date().getTime()db.session[token] = session
}

设置访问接口 3000

app.listen(3000, () => {console.log('server running at http://127.0.0.1:3000')
})

给大家整理了一下

因为这里的appid和session_key需要进行解密,所以要用到微信的WXBizDataCrypt函数
WXBizDataCrypt.js

var crypto = require('crypto')function WXBizDataCrypt(appId, sessionKey) {this.appId = appIdthis.sessionKey = sessionKey
}WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {// base64 decodevar sessionKey = new Buffer(this.sessionKey, 'base64')encryptedData = new Buffer(encryptedData, 'base64')iv = new Buffer(iv, 'base64')try {// 解密var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv)// 设置自动 padding 为 true,删除填充补位decipher.setAutoPadding(true)var decoded = decipher.update(encryptedData, 'binary', 'utf8')decoded += decipher.final('utf8')decoded = JSON.parse(decoded)} catch (err) {throw new Error('Illegal Buffer')}if (decoded.watermark.appid !== this.appId) {throw new Error('Illegal Buffer')}return decoded
}module.exports = WXBizDataCrypt

app.js全部代码如下

// 加密解密
const crypto = require('crypto');
const WXBizDataCrypt = require('./WXBizDataCrypt')const express = require('express')
const bodyParser = require('body-parser')
const request = require('request')
const app = express()
app.use(bodyParser.json())const wx = {appid: '',secret: ''
}var db = {session: {},user: {}
}app.post('/login', (req, res) => {// 注意:小程序端的appid必须使用真实账号,如果使用测试账号,会出现login code错误console.log('login code: ' + req.body.code)var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + wx.appid + '&secret=' + wx.secret + '&js_code=' + req.body.code + '&grant_type=authorization_code'request(url, (err, response, body) => {console.log('session: ' + body)var session = JSON.parse(body)if(session.openid) {var token = 'token_' + new Date().getTime()db.session[token] = sessionif(!db.user[session.openid]) {db.user[session.openid] = {credit: 100}}}res.json({token: token})})
})app.get('/checklogin', (req, res) => {var session = db.session[req.query.token]console.log('checklogin: ', session)// 将用户是否已经登录的布尔值返回给客户端res.json({is_login: session !== undefined})
})app.get('/credit', (req, res) => {var session = db.session[req.query.token]if(session && db.user[session.openid]) {res.json({credit: db.user[session.openid].credit})} else {res.json({err: '用户不存在,或未登录。'})}
})app.post('/userinfo', (req, res) => {// 获取session值var session = db.session[req.query.token]console.log('session:' + session)if(session) {// 使用appid和session_key解密encryptedDatavar pc = new WXBizDataCrypt(wx.appid, session.session_key)var data = pc.decryptData(req.body.encryptedData, req.body.iv)console.log('解密后:', data)// 校验rawData是否正确通过var sha1 = crypto.createHash('sha1')sha1.update(req.body.rawData + session.session_key)var signature2 = sha1.digest('hex')console.log(signature2)console.log(req.body.signature)res.json({pass: signature2 === req.body.signature})} else {res.json({err: '用户不存在,或未登录。'})}
})app.listen(3000, () => {console.log('server running at http://127.0.0.1:3000')
})

开启服务器

保存上述代码,打开控制台或者Powershell或者Linux终端,运行下面语句即可打开服务器的3000 供服务器访问。

nodemon app.js

微信小程序——用户登录模块服务器搭建相关推荐

  1. 小程序登录本地服务器,微信小程序实现用户登录模块服务器搭建

    我选用的是node.js来搭建服务器,没有安装的小伙伴可以参考我的node.js其他博客. 服务器安装与配置 初始化项目,将会自动创建package.json配置文件. npm init -y 安装E ...

  2. webform窗体怎么实现session唯一标识_微信小程序用户登录和登录态维护的实现_javascript技巧...

    这篇文章主要介绍了微信小程序用户登录和登录态维护的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 让用户登录,标识用户和获取 ...

  3. 微信小程序用户登录信息过期处理

    微信小程序用户登录信息过期处理 由于小程序对获取用户信息的新规定,获取用户信息必须通过一个button调出获取窗口,然而用户的token会过期,而本地存在的缓存可能会让用户误以为自己仍处于登录状态,但 ...

  4. python写微信小程序源码示例_python实现微信小程序用户登录、模板推送

    python实现微信小程序用户登录.模板推送 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  python实现微信小程序用户登录.模板推送.txt ] (友情提示 ...

  5. 微信小程序用户登录流程思路及主要代码

    微信小程序用户登录流程思路 由于微信官方不允许在刚进入小程序的时候,弹出用户登陆页面,需要在进入小程序后,用户主动点击才能进入登陆页面.此时,将会给小程序开发者在设计用户登陆页面时,带来一定的麻烦.现 ...

  6. vc++6.0获取磁盘基本信息_微信小程序——常用功能2:微信小程序用户登录,申请用户授权并获取用户基本信息...

    微信小程序--常用功能2:申请用户授权并获取用户基本信息 为了更好的用户体验,很多时候我们想要获取用户的基本信息,从而实现将信息呈现到用户界面.给用户划分地域.给用户分类等功能. 但是要想获取用户信息 ...

  7. 微信小程序用户登录功能无法使用

    背景 一个半年前的小程序项目了,最近一个用我项目的朋友说用户登录功能不能用了,小程序端.后端都没有报错.只有我开发时留下的,信息提示. 我第一个反应就是微信小程序在今年三月份更新的接口,wx.getU ...

  8. 开发微信小程序之阿里云服务器搭建|前后端分离

    第一次做项目开发,于是写了一篇博客记录一下开发过程中学到的东西,之前没有写博客的经验,所以写的有问题的地方欢迎各位大佬指教 如果之前没有免费试用过阿里云的服务器,可以进到这个网址 https://fr ...

  9. 微信小程序用户登录前后台详解

    一. 前端 wx.login({success: function(res) {if (res.code) {//获取用户信息wx.getUserInfo({success: function (ms ...

最新文章

  1. 搞懂机器学习的常用评价指标!
  2. 比肩清华!中山大学前1%学科数,并列全国第二!
  3. 清华大学和MIT研究人员使用DeepMind的AlphaFold方法来增强COVID-19抗体
  4. 即时通讯音视频开发(六):如何开始音频编解码技术的学习
  5. 《响应式Web设计性能优化》一2.1 性能度量基础
  6. 控制台编写JAVA程序教程_写一个java程序的步骤是什么?写java程序技巧
  7. SAFEARRAY使用方法示例
  8. 工作380-js判断是否为空
  9. 计算机 未来哪种技术稀缺,2015级职业生涯规划考试试题
  10. 循环矩阵的快速幂(bzoj 2510: 弱题)
  11. BUAA软工第0次作业
  12. Python学习笔记25:接口类、抽象类和封装
  13. 《云周刊》69期:开门红利!阿里云2月活动来袭
  14. arduino继电器控制风扇_arduino控制继电器
  15. 【C++】packaged_task的用法实例
  16. 2n 用c语言编程程序,用C语言编写程序.ppt
  17. 解读:机器学习预测收益模型应该采取哪种度量指标
  18. 超详细的纯CSS的照片墙特效
  19. Python读取PSV
  20. 【数据分析报告】中国上海电动汽车行驶和充电行为分析

热门文章

  1. 【无标题】两个路由器不同网段互通
  2. echarts 仿支付宝基金七日年化折线图
  3. “天空起重机”助力好奇号着陆盖尔撞击坑
  4. excel表格拆分如何快速完成
  5. 计算机类游戏本,游戏本电脑性价比排行2020年推荐 “性价比之最”你知道吗?...
  6. windows 命令行 通过驱动名删除打印机
  7. TAC队--团队选题报告
  8. 金士顿dtse9g2 PS2251-07 海力士(Hynix) flash not support
  9. 端游开发用什么技术可以让用户更短时间内体验游戏?端游分发...
  10. android ui 切图工具,APP切图标注教程:UI设计切图标注的小工具实用技巧