#先说下获取手机号的步骤,首先要调用wx.login拿到code,把code发送到我们的服务器(开发者服务器)上,后台通过appid、appsecret(小程序后台那里生成的)、code向微信接口服务拿到session_key、openid等信息,到这里其实我们已经可以直接去获取手机号了,自定义登录态,如果项目需要可以做

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html

#获取手机号和用户信息的代码如下面的permissions.js

#checkSession

主要方法是checkSession,这个呢是封装了下wx.checkSession,首先是看走success区间呢还是fail区间,如果是success区间,先从本地拿code,如果这个code存在且未被使用过就直接返回这个code,否则重新wx.login获取code(fail区间一样的逻辑)

#getSessionKeyByCode

这个呢是调用后台的接口,通过code换取seesion_key的,拿到数据后,重新set wx_code到本地中,并添加上use为true,代表这个code已经被使用了

#getPhoneNumber

这个是获取手机号的方法,获取手机号需使用button组件,并添加上open-type="getPhoneNumber"属性,并绑定上bindgetphonenumber="getPhoneNumber",点击按钮的时候会返回加密的数据encryptedData、iv,加密需要我们传sessionKey(如果后台有存那不必传),这个sessionKey我们在上一步中已经存在本地了,所以直接从本地拿wx_code里的session_key

#获取用户信息,相对获取手机号简单些,直接调即可,可以看getUserInfo方法

const api = require('./api.js');
const util = require('./util.js');function checkSession() {return new Promise((resolve, reject) => {wx.checkSession({success() {console.log('success:有效的');//session_key 未过期,并且在本生命周期一直有效let res = wx.getStorageSync('wx_code');// resolve(res);console.log(res);if (!res || res.use) {console.log('无效的code');wx.login({success: res => {// 发送 res.code 到后台换取 openId, sessionKey, unionIdwx.setStorageSync('wx_code', res);resolve(res);},fail: res => {reject(res);}})} else {console.log('有效的code');resolve(res);}},fail() {console.log('fail:失败了');// session_key 已经失效,需要重新执行登录流程// 登录wx.login({success: res => {// 发送 res.code 到后台换取 openId, sessionKey, unionIdwx.setStorageSync('wx_code', res);resolve(res);},fail: res => {reject(res);}})}})})
}function checkSession_blank() {return new Promise((resolve, reject) => {wx.checkSession({success() {console.log('success:有效的');//session_key 未过期,并且在本生命周期一直有效let res = wx.getStorageSync('wx_code');// resolve(res);console.log(res);if (!res || res.use) {console.log('无效的code');wx.login({success: res => {// 发送 res.code 到后台换取 openId, sessionKey, unionIdwx.setStorageSync('wx_code', res);resolve(res);},fail: res => {reject(res);}})} else {console.log('有效的code');resolve(res);}},fail() {console.log('fail:失败了');// session_key 已经失效,需要重新执行登录流程// 登录wx.login({success: res => {// 发送 res.code 到后台换取 openId, sessionKey, unionIdwx.setStorageSync('wx_code', res);resolve(res);},fail: res => {reject(res);}})}})})
}function getSessionKeyByCode(res) {return util.wxRequestGet({url: api.getSessionKeyByCode.url,data: {code: res.code}}).then(res => {let wxCode = wx.getStorageSync('wx_code');wx.setStorageSync('wx_code', {...res.data.data,...wxCode,use: true})})
}function getPhoneNumber(e) {console.log(e);// return checkSession().then(res => {let detail = e.detail;let wxCode = wx.getStorageSync('wx_code');// console.log('wx_code: ', res);return new Promise((resolve, reject) => {util.wxRequest({url: api.getUserDetails.url,data: {encryptedData: detail.encryptedData,iv: detail.iv,jsCode: wxCode.code,sessionKey: wxCode.session_key},method: 'POST',success: function (res) {console.log(res);// 把用户信息和手机号信息等set在一起if (res.data.success) {let userInfo = wx.getStorageSync('wx_userinfo');wx.setStorageSync('wx_userinfo', {...userInfo,...res.data.data,openId: wxCode.openid});// wx.setStorageSync('wx_code', {//     ...wxCode,//    use: true// });return resolve(res);} else {wx.showToast({icon: 'none',title: res.data.msg})}reject(res);},fail: function (res) {reject(res);}})})// })
}function getUserInfo() {return new Promise((resolve, reject) => {const wxUserInfo = wx.getStorageSync('wx_userinfo') || {}if (wxUserInfo.nickName) {resolve(wxUserInfo)} else {wx.authorize({scope: 'userInfo',success() {wx.getUserInfo({success: (result) => {wx.setStorageSync({data: { ...wxUserInfo, ...result.userInfo },key: 'wx_userinfo',})resolve(result.userInfo)},// fail: (res) => reject(res),complete: () => resolve({})})}})}})
}function setUserInfo(data) {const userInfo = wx.getStorageSync('wx_userinfo');wx.setStorageSync('wx_userinfo', { ...userInfo, ...data })
}module.exports = {checkSession: checkSession,getPhoneNumber: getPhoneNumber,getUserInfo: getUserInfo,setUserInfo: setUserInfo,getSessionKeyByCode: getSessionKeyByCode
}

小程序开发(7)-之获取手机号、用户信息相关推荐

  1. 【微信小程序/实现】实现获取微信个人信息

    [微信小程序/实现]实现获取微信个人信息 一.目的:实现获取微信个人的昵称和头像 二.页面过程 三.实现过程 (1)核心代码: (2)完整代码 1. wxml代码 2. wxss代码 3. js代码 ...

  2. 微信小程序开发笔记—天气获取显示

    文章目录 一.实现效果 二.天气查询API 三.微信小程序设计思路 1.页面跳转 2.获取天气信息 3.信息显示 四.程序实现 1.页面跳转功能 2.获取天气信息 2.1.变量声明 2.2.获取所在地 ...

  3. lpc2000 filash utility 程序烧写工具_重点必看 | 取证小程序开发之第四届美亚杯硬盘信息快速解题...

    告别金秋十月,迎来仲冬十一月,同时迎来的是首届电子数据取证小程序大赛.随着投稿截止时间的一天天到来,越来越多的用户参与到本次小程序大赛,用自己的力量参与取证知识创新,为营造良好的取证技术生态赋能. 上 ...

  4. 微信小程序中企业微信获取外部联系人信息

    需求:企业微信聊天页面,点击可跳转微信小程序的用户详情页. 本质就是在企业微信端拿到当前联系人的unionid,然后去用户服务里找到对应的用户userid,进入用户的详情页面. 流程:后端写一个从un ...

  5. 微信小程序授权登录(获取手机号及用户信息)

    目录 1.开放平台绑定微信小程序 2.小程序AppID/AppSecret获取 3.获取授权信息 4.获取用户信息

  6. java微信小程序授权微信登录获取手机号

    微信小程序获取手机号流程 1.先调用微信登录wx.login()获取code,通过code在后台获取session_key和openid(为了安全方面的原因,请不要直接使用这些信息作为你小程序的用户标 ...

  7. 微信小程序授权登录和获取手机号功能(详细)

    总结,新增获取用户手机号功能,里面用到了关于获取用户信息和用户手机号的功能,一开始写的时候发现我把两个按钮写在一个登录页面上,获取手机号逻辑是当用户点击授权之后跳转到首页,当点击拒绝弹窗提示,最后发现 ...

  8. uniapp微信小程序授权登录并获取手机号

    新版:前端要授权两次,一次获取用户信息授权码code,另外一次获取用户手机授权码code,全部传给后端.后端通过用户信息授权码获取openid,通过手机授权码获取手机号码.老版:前端传给后端授权码co ...

  9. 微信小程序通过code去获取微信用户的加密信息

    今天项目要获取用户信息,我发现官方给的解密demo就是没有java  我ca,我就找了这哥们的  (多谢   @未来之路   这哥们的答案) 一.微信小程序 第一步:调用 wx.login获取code ...

最新文章

  1. 蚂蚁森林合种计划(2020.10.23,7天有效,每周更新)
  2. [k8s] 第一章 十分钟带你理解Kubernetes核心概念
  3. 免息月供137元,新iPhone SE有7大理由值得买!但反对只需这1个就够了
  4. 想要提升网站曝光率应避免哪些错误设置的出现?
  5. 每个人都应该知道的25个大数据术语 1
  6. linux实验五 信号应用,实验五 进程间通信(中)
  7. maven识别包下的xml
  8. 阿里涉江:你真的会学习吗?从结构化思维说起
  9. 想做开源软件开发谁能带一下呀
  10. cmd 命令 copy 复制文件
  11. OpenLayers按像素距离平移地图
  12. 新西兰八大名校--新西兰公立大学
  13. EasyBoot常用的命令
  14. Tegra TX1 build tensorflow r1.1
  15. SpringBoot整合grpc
  16. LT8911EXB:MIPI CSI/DSI转EDP信号转换芯片-润百信科技提供技术批量支持
  17. 2018秋招面试经验(测试开发、产品)
  18. IPv6与VoIP——配置Cisco CME实现VoIP实验
  19. Oracle 字符集从GBK升级到Utf8
  20. CodeM2018 初赛A轮 第1,2题

热门文章

  1. AliRTC 开启视频互动 “零计算” 时代
  2. Scheduled SQL: SLS 大规模日志上的全局分析与调度
  3. ZAO 背后的深度学习算法原理浅析
  4. 分布式锁在存储系统中的技术实践
  5. ServiceMesh最火项目:Istio架构解析
  6. 阿里云云效如何保障双11大型项目管理
  7. 看了三张照片,这个AI只用20分钟破获六年“悬案”
  8. 披荆斩棘的北森,乘风破浪的HR SaaS
  9. MQ 技术产品井喷,今天来详聊一下腾讯开源消息中间件 TubeMQ | 原力计划
  10. 异构计算黄金时代下,超强异构计算服务器FP5468G2将会带来哪些变革?