整合了获取用户信息/用户手机号/及请求封装 粘贴即用

目录结构

app.js

//app.js
// const util = require('/utils/util.js')
// import {requst_session_key} from './pages/api/index'
App({onLaunch: function () {//获取胶囊按钮信息let menuButtonObject = wx.getMenuButtonBoundingClientRect();//获取机器信息wx.getSystemInfo({success: res => {let statusBarHeight = res.statusBarHeight,navTop = menuButtonObject.top,//胶囊按钮与顶部的距离navHeight = statusBarHeight + menuButtonObject.height + (menuButtonObject.top - statusBarHeight)*2;//导航高度this.globalData.navHeight = navHeight;this.globalData.navTop = navTop;this.globalData.windowHeight = res.windowHeight;console.log(this.globalData.navHeight+'+'+this.globalData.navTop+'+'+this.globalData.windowHeight);},fail(err) {console.log(err);}})// 登录wx.login({success: res => {console.log(res.code+'我是登录中的')if(res.code){console.log(123);wx.request({url: 'https://weixin.rmsy.com/v1/session-key/'+res.code,// url: 'http://192.168.2.103:5001/v1/session-key/'+res.code,success (res) {console.log(123);console.log(res);console.log(res.data.data.session_key);wx.setStorageSync("sessionkey", res.data.data.session_key);}})}}})// 获取用户信息wx.getSetting({success: res => {console.log(res);if (res.authSetting['scope.userInfo']) {// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框wx.getUserInfo({success: res => {// 可以将 res 发送给后台解码出 unionIdthis.globalData.userInfo = res.userInfo// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回// 所以此处加入 callback 以防止这种情况console.log(this);if (this.userInfoReadyCallback) {this.userInfoReadyCallback(res)}}})}}})},globalData: {userInfo: null,flag:false,navHeight:null,navTop:null,windowHeight:null,stastic:1},/*** *  自定义方法 start* *//*** *  自定义方法 end* */
})

index.js

import {requst_login
} from './../api/index'
// 获取应用实例
const app = getApp()Page({data: {userInfo: {},hasUserInfo: false,canIUse: wx.canIUse('button.open-type.getUserInfo')},// 事件处理函数
//获取手机号getPhoneNumber(e) {console.log(e);if (e.detail.encryptedData) {console.log("iv:" + e.detail.iv)console.log("encryptedData:" + e.detail.encryptedData)wx.setStorageSync('iv', e.detail.iv)wx.setStorageSync('encryptedData', e.detail.encryptedData)requst_login({nickName: this.data.userInfo.nickName,avatarUrl: this.data.userInfo.avatarUrl,city: this.data.userInfo.city,gender: this.data.userInfo.gender,province: this.data.userInfo.province,language: this.data.userInfo.language,}).then((res) => {console.log(res.data.data);// setTimeout(()=>{//   console.log(res);// },1000)wx.setStorageSync("role", res.data.data);wx.navigateTo({'url': '/pages/logs/logs'});}).catch(()=>{console.log('登陆失败');})} else {console.log('获取用户手机失败!' + e.errMsg)}},onLoad() {if (app.globalData.userInfo) {this.setData({userInfo: app.globalData.userInfo,hasUserInfo: true})} else if (this.data.canIUse) {// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回// 所以此处加入 callback 以防止这种情况app.userInfoReadyCallback = res => {this.setData({userInfo: res.userInfo,hasUserInfo: true})}} else {// 在没有 open-type=getUserInfo 版本的兼容处理wx.getUserInfo({success: res => {app.globalData.userInfo = res.userInfothis.setData({userInfo: res.userInfo,hasUserInfo: true})}})}},getUserInfo(e) {console.log(e)app.globalData.userInfo = e.detail.userInfothis.setData({userInfo: e.detail.userInfo,hasUserInfo: true})}
})

index.wxml

<!--index.wxml-->
<view class="container"><view class="usermotto"><button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">登录</button></view>
</view>

api/index.js

import {  httpRequest, putRequest, deleteRequest,
} from './request'
const base = '';
// 获取session-key
export const requst_session_key = data => httpRequest(`session-key`, data);
// 用户登录
export const requst_login = data => httpRequest(`login`, data,'post');
// 获取我的设备
export const requst_get_device = data => httpRequest(`get-device`, data);

request.js

const util = require("../../utils/util");
// var tokenKey = "access-token";
// var serverUrl =  "http://192.168.2.103:5001/v1/wx/";
var serverUrl = "";
// 例外不用token的地址
var exceptionAddrArr = [];
// 获取sessionKey
const getSessionKey = ()=> {return  new Promise((resolve, reject) => {let sessionKey = wx.getStorageSync("sessionkey");wx.checkSession({success () {resolve(sessionKey);},fail () {// 登录wx.login({success: res => {if(res.code){// return this.httpFake('session-key','get',{},sessionKeyCallback);// function sessionKeyCallback(e){wx.setStorageSync("sessionKey", e.sessionKey);// }}reject(res);}})}})})}//post请求,数据在body中
async function httpRequest(url, data, method = "GET") {var header = {};var result;var e = await getSessionKey()if (e) {let encryptedData = wx.getStorageSync('encryptedData');let iv = wx.getStorageSync('iv');// header.Authorization = token;header['encryptedData'] = encryptedData;header['iv'] = iv;header['sessionKey'] = e;// if(method == "post-form"){// header['Content-Type'] =  "application/text";// }}return  new Promise((resolve, reject) => {if (e) {wx.request({url: serverUrl + url,data: data,header: header,method: method,success: (res => {resolve(res)// if (res.statusCode === 200) {//   //200: 服务端业务处理正常结束//   resolve(res)// } else {//   reject(res)// }}),fail: (res => {reject(res)})})} else {wx.navigateTo({url: '/pages/index/index',})wx.showToast({title: '登录失效,请重新登录!',icon: 'none',duration: 2000})}})
}module.exports.httpRequest = httpRequest;

微信小程序登录及请求封装相关推荐

  1. 微信小程序服务器开小差了,微信小程序wx.request请求封装

    微信小程序 wx.request RequestTask wx.request(Object object)发起 HTTPS 网络请求. 示例代码 wx.request({ url: 'test.ph ...

  2. 微信小程序wx.request请求封装,和跨域的解决。

    建议把所有请求抽离到不同页面对应的js文件中,可以方便后期的修改和排查问题,小程序请求是通过微信后台来请求我们的后台地址来进行后端映射.你请求的接口实际到微信的后端做了一道映射,微信后端拿到你的 wx ...

  3. uniapp 微信小程序登录方法封装

    uniapp 微信小程序登录方法封装 前言 一.登录接口 二.登录 上代码 总结 前言 ui设计没有登录页所以将微信小程序登录方法同一封装一个方法 一.登录接口 uni.getUserProfile ...

  4. 微信小程序 wx.request 的封装

    自学转行到前端也已近两年,也算是简书和掘金的忠实粉丝,但是以前一直惜字如金(实在是胆子小,水平又低),现在我决定视金钱如粪土(就只是脸皮厚了,水平就那样),好了废话不多说,切入主题,最近自己尝试了一下 ...

  5. Spring Boot + Spring Security + JWT + 微信小程序登录

    Spring Boot + Spring Security + JWT + 微信小程序登录整合教程 参考文章 文章目录 整合思想 整合步骤 1. AuthenticationToken 2. Auth ...

  6. 调用网易云二维码登录API,实现微信小程序登录

    调用网易云二维码登录API,实现微信小程序登录 首先前往网易云音乐API官网 binaryify.github.io/NeteaseClou- 首先根据文档的链接下载好配置文件,再根据官方文档启动好本 ...

  7. SpringBoot实现微信小程序登录功能

    SpringBoot实现微信小程序登录 微信小程序登录流程 登录流程图 前端代码 后端代码 微信小程序登录流程 微信小程序官方文档:微信小程序官方文档 第一次学习微信小程序的登录,以前也好奇微信小程序 ...

  8. 用Spring Boot完成微信小程序登录

    使用Spring Boot完成微信小程序登录 由于微信最近的版本更新,wx.getUserInfo()的这个接口即将失效,将用wx.getUserProfile()替换,所以近期我也对自己的登录进行更 ...

  9. 微信小程序登录功能的前端设计与实现

    导语 | 登录/注册这模块就像个冰山,我们通常以为它就是「输入账号密码,就完成登录了」,但实际下面还有各种需要考虑的问题.作为应用的基础能力,登录/注册的设计需要有足够的健壮性,避免出现全站性阻塞.同 ...

最新文章

  1. tensorflow 1.0 学习:参数和特征的提取
  2. WP评论系统更换小结(转)
  3. MySQL基础(二):视图、触发器、函数、事务、存储过程
  4. boost::math::tools::centered_continued_fraction用法的测试程序
  5. mysql select count 5万条数据很慢_Mysql注入总结
  6. 收集程序员的几幅对联
  7. 执行一次怎么会写入两次数据_浅谈 Redis 数据持久化之 AOF 模式
  8. 史上最全近百条Oracle DBA日常维护SQL脚本指令
  9. python生成数字_Python生成数字图片代码分享
  10. WIN2008下找不到proxy的处理方法
  11. 了解PHP中$_SERVER变量对路径的解析
  12. 色散方程用matlab编译,急切求助用matlab曲线拟合色散方程 - 程序语言 - 小木虫 - 学术 科研 互动社区...
  13. pyinstaller打包项目,运行exe找不到指定模块(自定义/python39.dll等)
  14. QQ网络存储随便用(原创)
  15. 主动降噪相消干涉原理
  16. 对象存储(Object-based Storage)概述
  17. 音视频开发总结之一理论基础
  18. Win10系统更新提示错误0xc1900403的解决方法
  19. 德州仪器推出支持以太网Powerlink协议的处理器平台
  20. 更加智能地管理SD-WAN最后一英里-ielab

热门文章

  1. DeviceIoControl接口
  2. GlusterFS技术概要分析(转自oschina)
  3. 火鸟Firebird数据库的中文参考资料
  4. PyQt5表格控件QTableWidget
  5. 手撕算法系列之冒泡排序
  6. 从零开始的DIY智能家居 - 基于 ESP32 的智能光照传感器
  7. AutoJs学习-录屏功能
  8. NC开发笔记——NC63开发方法总结
  9. SQL Server2012在程序开发中实用的一些新特性
  10. Cadence从原理图到PCB的具体步骤