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

#先说下获取手机号的步骤,首先要调用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
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nacos 集成 zipkin sleuth实现链路追踪(入门篇)

声明:链路追踪属于微服务的一部分,微服务系列博文陆续会出,可以帮助小伙伴们学习微服务一站式从入门到精通。 文章目录一、zipkin 服务端1. 下载2. 前台运行3. 服务端访问二、网关服务2.1. 父项目依赖2.2. gateway依赖2.3. gateway配置三、订…

开源巨头 SUSE 收购 Rancher Labs,云原生时代来临

作者 | 马超责编 | 伍杏玲封图 | rancher.com官网出品 | CSDN(ID:CSDNnews)近日,全球最大的独立开源公司SUSE宣布收购云原生初始公司Rancher Labs。针对此交易,SUSE首席执行官Melissa Di Donato表示:“我们…

小程序开发(8)-之跳转第三方小程序设计

嗯嗯,这个其实没什么好说,但还是说说我们项目的做法,因为我们这里需要跳转的小程序挺多的,所以我们采用了在后台配置的,像图一一样,配置名称、appid、跳转的页面地址等 wx.navigateToMiniProgram({appId: …

微服务专栏

文章目录一、后端框架1. Spring Boot2. SpringCloud3.SpringCloudAlibaba二、 流行组件2.1. 服务发现2.2. 网关动态路由2.3. 认证授权2.4. 远程调用2.5. 流控服务降级2.6. 消息队列2.7. 分布式缓存2.8. 消息总线2.9.分布式事务三、 前端框架3.1. Vue3.2. LayUI3.3. Bootstrap一…

使用函数计算三步实现深度学习 AI 推理在线服务

目前深度学习应用广发, 其中 AI 推理的在线服务是其中一个重要的可落地的应用场景。本文将为大家介绍使用函数计算部署深度学习 AI 推理的最佳实践, 其中包括使用 FUN 工具一键部署安装第三方依赖、一键部署、本地调试以及压测评估, 全方位展现函数计算…

仅用 2 年过渡到自研 ARM 芯片,苹果的底气从何而来?

作者 | Steven Sinofsky译者 | 弯月,责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)今年 WWDC 2020 上,苹果宣布自研 ARM 芯片——Apple Silicon,对于苹果而言,Apple Silicon很…

Flink SQL 如何实现数据流的 Join?

无论在 OLAP 还是 OLTP 领域,Join 都是业务常会涉及到且优化规则比较复杂的 SQL 语句。对于离线计算而言,经过数据库领域多年的积累,Join 语义以及实现已经十分成熟,然而对于近年来刚兴起的 Streaming SQL 来说 Join 却处于刚起步…

小程序开发(9)-之地图组件map、导航

map用起来真的一言难尽呀,按照官方文档说是可以支持传入一个setting,来配置所以的属性的。。,但是我试了没效果,经纬度更新了,调试代码看到的wxml经纬度也变化了,但是map上的经纬度却没变化,后来…

惊魂48小时,阿里工程师如何紧急定位线上内存泄露?

阿里妹导读:云计算场景下的大规模分布式系统中,网络异常、磁盘IO异常、时钟跳变、操作系统异常乃至软件本身可能存在bugs等,均给分布式系统正确运行带来了挑战。持续的监控报警完善是打造稳定高可用分布式系统过程中非常重要的工作&#xff0…

我的程序跑了 60 多小时,就是为了让你看一眼 JDK 的 BUG 导致的内存泄漏

来源 | why技术荒腔走板大家好,我是 why,老规矩,先来一个简短的荒腔走板,给冰冷的技术文注入一丝色彩。上面图片中这个正在奔跑的少年,是正在参加校运会的我,那一年我 18 岁,高三。参加的项目是…

Flutter+Serverless端到端研发架构实践

Serverless(无服务架构)被誉为下一代云计算,自概念推出以来,因为能带来研发交付速度提升与成本的降低在业内异常火爆。闲鱼客户端基于Flutter进行架构演进与创新,通过Flutter统一Android和iOS双端提升研发效能之后&…

Go 开发关键技术指南 | 为什么你要选择 GO?(内含超全知识大图)

导读:从问题本身出发,不局限于 Go 语言,探讨服务器中常常遇到的问题,最后回到 Go 如何解决这些问题,为大家提供 Go 开发的关键技术指南。我们将以系列文章的形式推出《Go 开发的关键技术指南》,共有 4 篇文…

小程序开发(10)-之热力图解决方案、手绘图

原本是用别人用canvas画的热力图的https://github.com/rover95/wxapp-heatmap,但是问题有点多,热力图的颜色,卡顿、叠加、渲染失败等,所以就弃用了,也找了好久,好像大家都没有更好的提议,自己也…

windows下mysql8.x配置远程连接

文章目录1. 现象2. 登录mysql3.先查看下当前的用户,具有什么权限4.创建新的用户之后再查权限5. 赋予权限6.刷新权限,然后就可远程访问了1. 现象 Host ‘192.168.0.103’ is not allowed to connect to this MySQL server mysql8.x配置远程连接 2. 登…

Spark整合Ray思路漫谈

什么是Ray 之前花了大概两到三天把Ray相关的论文,官网文档看了一遍,同时特意去找了一些中文资料看Ray当前在国内的发展情况(以及目前国内大部分人对Ray的认知程度)。 先来简单介绍下我对Ray的认知。 首先基因很重要&#xff0c…

建设数据中台之前,建议先看这份企业数据能力测评 | 大咖说中台

作者 | 耿立超来源 | 《大数据平台架构与原型实现:数据中台建设实战》“我的企业目前在数据应用上处于什么水平?接下来应该朝哪个方向努力?”本文试图帮助企业决策者和IT负责人解答这一问题。今天,数据之于企业的重要性已经勿须多…

小程序开发(11)-之支付封装

嘿,支付好像没什么好说的,记录下吧 像下面的代码,params毫无疑问呢,就是需要传给接口的参数了,一般就是订单号和金额了,appId呢当然是放在config.js文件中,openId呢就是一开始的时候就获取的&a…

如何让 python 处理速度翻倍?内含代码

阿里妹导读:作为在日常开发生产中非常实用的语言,有必要掌握一些python用法,比如爬虫、网络请求等场景,很是实用。但python是单线程的,如何提高python的处理速度,是一个很重要的问题,这个问题的…

Zipkin 存储追踪数据至 MySQL

下载zipkin-mysql数据库脚本 https://github.com/openzipkin/zipkin/tree/master/zipkin-storage/mysql-v1/src/main/resources 创建数据库名称为zipkin,字符集编码:utf8mb4 初始化脚本 -- -- Copyright 2015-2019 The OpenZipkin Authors -- -- Licen…

Spring Cloud Alibaba 新一代微服务解决方案

本篇是「跟我学 Spring Cloud Alibaba」系列的第一篇, 每期文章会在公众号「架构进化论」进行首发更新,欢迎关注。 1、Spring Cloud Alibaba 是什么 Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件…