微信小程序授权登录获取用户的openid

  • 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系
  • 然而因为小程序中的openid不可以直接使用需要用code(登录凭证)去换取openid
获取openid的思路
  • 获取openid首先需要调用小程序的login方法获取小程序的登录凭证code,然后使用code向微信换取登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)
    我这里是用一个点击事件来触发一个函数

  1. wx.getUserProfile 会获取到你的一些信息 比如昵称,头像,性别

info(){// 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗wx.getUserProfile({desc: '获取用户的信息',//获取用户的信息success:(res)=> {//用户成功授权console.log("成功",res)this.setData({userInfo: res.userInfo,hasUserInfo: true,nickName:res.userInfo.nickName, //获取昵称touxian:res.userInfo.avatarUrl,  获取头像urlsex:res.userInfo.gender  //获取性别})},fail:res=>{console.log("失败",res)}})},

下图看打印

  1. wx.login 可以获取到你的code值
        wx.login({//成功放回success:(res)=>{console.log(res);let code=res.code}})

下图看打印

通过wx.request 来让code换取openid

这里面需要一段很长的url地址

  https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
  • 这个地址可以在开发文档=>服务器=>登录中 找到
    不要以为你把这个路径cv上就好了 这段连接中有三处地方需要改动
    (每个人的id都不一样所以你要自己去作修改 下面有修改处的位置)

        wx.request({/*url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + APPID + '&secret=' + SECRET + '&js_code=' + res.code + '&grant_type=authorization_code',
*/url: 'https://api.weixin.qq.com/sns/jscode2session?appid=wx8099f643beb716ff&secret=4e6df35403708737c78ef7cffd525c2e&js_code=' + res.code + '&grant_type=authorization_code',success:(res)=>{console.log(res);var obj = {};obj.openid = res.data.openid;obj.expires_in = Date.now() + res.data.expires_in;//存储openidwx.setStorageSync('user', obj);//获取到你的openidconsole.log(obj.openid);}})

需要修改的地方

注意是没处地方都是等号之后&符号之前的 (这里一定不能出错)

打印你就会看到你的openid的值 如下

  info(){wx.getUserInfo({//成功后会返回success:(res)=>{console.log(res);// 把你的用户信息存到一个变量中方便下面使用let userInfo= res.userInfo//获取openId(需要code来换取)这是用户的唯一标识符// 获取code值wx.login({//成功放回success:(res)=>{console.log(res);let code=res.code// 通过code换取openIdwx.request({url: `https://api.weixin.qq.com/sns/jscode2session?appid=wx16ccbe7d04209a11&secret=1f9465bdebe244b5ad15635e8a655832&js_code=${code}&grant_type=authorization_code`,success:(res)=>{console.log(res);userInfo.openid=res.data.openidconsole.log(userInfo.openid);}})}})}})},

总结:

  • openid是用户的唯一标识,它可以快速的建立小程序内的用户体系
  • 因为openid是一个敏感信息所有他不会直接给你,需要你用登录凭证(code)去换取openid

// 登录wx.login({success: function (r) {var code = r.code;//登录凭证if (code) {//2、调用获取用户信息接口wx.getUserInfo({success: function (res) {console.log({ encryptedData: res.encryptedData, iv: res.iv, code: code })//3.解密用户信息 获取unionId//...//3.请求自己的服务器,解密用户信息 获取unionId等加密信息wx.request({url: '',//自己的服务接口地址method: 'post',header: {'content-type': 'application/x-www-form-urlencoded'},data: { encryptedData: res.encryptedData, iv: res.iv, code: code },success: function (data) {//4.解密成功后 获取自己服务器返回的结果if (data.data.status == 1) {var userInfo_ = data.data.userInfo;console.log(userInfo_)} else {console.log('解密失败')}},fail: function () {console.log('系统错误')}})},fail: function () {console.log('获取用户信息失败')}})} else {console.log('获取用户登录态失败!' + r.errMsg)}},fail: function () {callback(false)}})

PHP实现微信小程序授权登录(示例)

    public function login(){//接收参数$code = input('code'); //code码$nickName = input('nickname'); //微信昵称$avatarUrl = input('avatar'); //微信头像//验证参数if (empty($code) || empty($nickName) || empty($avatarUrl)){return json(['status'=>500,'msg'=>'参数不能为空']);}//自己到微信公众平台获取$appid = ' ';$secret = ' ';//获取openid$url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code";$userInfo = json_decode(file_get_contents($url),true);if (empty($userInfo['openid'])) $this->error('登陆失败,'.$userInfo['errmsg'],'',$userInfo['errcode']); //存储数据$userInfo['nickname'] = $nickName;$userInfo['avatar'] = $avatarUrl;$userInfo['createtime'] = time();$userInfo['updatetime'] = time();//根据获取的openid 来查看数据库 有的话更新 session_key 没有的话添加$model = new Member();$data = $model->where('openid',$userInfo['openid'])->find();if ($data){//存在数据 更新$model->where('openid',$userInfo['openid'])->update(['session_key'=>$userInfo['session_key']]);//获取用户id$userInfo['user_id'] = $data['id'];$token =  signToken($userInfo['user_id']);}else{//不存在将用户信息添加入库 获取自增的id$token =  signToken($userInfo['user_id']);$userInfo['user_id'] = $model->insertGetId($userInfo);}$this->success('登陆成功',['token'=>$token],'200');}

关于小程序中如何获取openid_小程序 本地开发获取openid 10007_Bruk.Liu的博客-CSDN博客

globalData:{appid:'wxa1111111111111',secret:'3acbe5r8s4s5d7s895'},
  login(){var that = this;wx.login({success: function (res) {if (res.code) {wx.getUserInfo({success: function (res) {var objz = {};objz.avatarUrl = res.userInfo.avatarUrl;objz.nickName = res.userInfo.nickName;//console.log(objz);wx.setStorageSync('userInfo', objz);//存储userInfo}});var d = that.globalData;//这里存储了appid、secret、token串  var l = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + d.appid + '&secret=' + d.secret + '&js_code=' + res.code + '&grant_type=authorization_code';wx.request({url: l,data: {},method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT  // header: {}, // 设置请求的 header  success: function (res) {console.log(res)var obj = {};obj.openid = res.data.openid;obj.expires_in = Date.now() + res.data.expires_in;//存储openidwx.setStorageSync('user', obj); }});} else {console.log('获取用户登录态失败!' + res.errMsg)}}});},

【精选】获取微信小程序授权信息并保存到数据库中(包含openId和session_key,java后台)_微信小程序 sesison_key 如何存储-CSDN博客

wx.login({success: function(res) {if (res.code) {  //wx.login获取code。console.log(res.code);//发起网络请求wx.getUserInfo({success:function(res_user){console.log(res_user.userInfo)wx.request({url: 'http://xxx.xxx.xxx.xxx:服务器端口/自定义名字',//填写自己的urlmethod:'POST',//向后端发送的数据data: {code: res.code ,   //将code发送到后台服务器。imgurl: res_user.userInfo.avatarUrl,//获取头像urlnickname:res_user.userInfo.nickName,//获取昵称sex:res_user.userInfo.gender,//获取性别},header: { "Content-Type": "application/x-www-form-urlencoded" //POST方式是这个},})}})} else {console.log('获取用户登录态失败!' + res.errMsg)}}});

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

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

相关文章

S5PV210(十):LCD

本文主要探讨210的LCD相关知识。 LCD LCD称液晶(透光背光呈色),可在电信号驱动下使液晶分子旋转,呈现不同的颜色(被动发光) lcd接口为TTL接口(5V为1,0V为0),不能传输太远,远距离传输方式:SoC(TTL) ->VGA-> LCD(TTL) 其他显设备:CRT(…

基于STM32设计的室内环境监测系统(华为云IOT)_2023

一、设计需求 基于STM32+华为云物联网平台设计一个室内环境监测系统,以STM32系列单片机为主控器件,采集室内温湿度、空气质量、光照强度等环境参数,将采集的数据结果在本地通过LCD屏幕显示,同时上传到华为云平台并将上传的数据在Android移动端能够实时显示、查看。 【1…

windows自动登陆

新建文本粘贴下面代码,另存为注册表文件 Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Driver Signing] "Policy"hex:00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]"DefaultUserN…

2024最新mac电脑清理垃圾的软件有哪些?

mac电脑是许多人喜爱的电子产品,它拥有优美的设计、流畅的操作系统和强大的性能。但是,随着使用时间的增长,mac电脑也会积累一些不必要的垃圾文件,这些文件会占用宝贵的存储空间,影响电脑的运行速度和稳定性。因此&…

微信小程序获取openid

1.需要小程序中调用 wx.login获取临时code值(每次获取的code值只能用一次) wx.login({success (res) {console.log(res)} }) 打印结果为: 2.调用微信提供的apid接口,获取openid,入参需要三个参数:AppID(小…

C#中LINQtoObjects、LINQtoDataSet和LINQtoXML

目录 一、使用LINQ操作数组和集合 二、使用LINQ操作DataSet数据集 1.AsEnumerable()方法 2.CopyToDataTable()方法 3.AsDataView()方法 4.Take()方法 5.Sum()方法 6.示例 (1)源码 (2)生成效果 三、使用LINQ操作XML 1.…

Java字符串常用函数 详解5000字 (刷题向 / 应用向)

1.直接定义字符串 直接定义字符串是指使用双引号表示字符串中的内容,例如"Hello Java"、"Java 编程"等。具体方法是用字符串常量直接初始化一个 String 对象,示例如下: 1. String str"Hello Java"; 或者 …

【C++语法讲解】 | 运算符重构 | 三种运算符的重构方式 |代码演示

文章目录 1,简述2,结构体的定义1,结构体的声明2,结构体的申请 3.1 ,在结构体中重构3.2 在结构体外进行重构 1,简述 通常情况下,我们会创建一些简单的数据结构以应对日常的算法使用,…

基于 NGram 分词,优化 Es 搜索逻辑,并深入理解了 matchPhraseQuery 与 termQuery

基于 NGram 分词,优化 Es 搜索逻辑,并深入理解了 matchPhraseQuery 与 termQuery 前言问题描述排查索引库分词(发现问题)如何去解决这个问题?IK 分词器NGram 分词器使用替换 NGram 分词器后进行测试matchPhraseQuery 查…

国际物流常见风险如何规避_箱讯科技

外贸物流是国际贸易的重要环节,其管理和效率的高低直接影响着贸易的成本和效益。因此,外贸企业应该重视物流的组织和管理,提高物流运作的效率。 国际物流基础知识 01什么是“双清包税”和“双清不包税” 双清包税上门又叫双清包税到门&…

CMake引用OSG

从CMake执行find_package(OpenSceneGraph REQUIRED COMPONENTS osgDB osgUtil)这句;情况如下; 当前OSG已经安装好;环境变量添加了OSG_ROOT(其值是OSG安装的根目录),并且 %OSG_ROOT%\bin 添加到了path; 有一个警告,已经done了; Found osgDB: optimized;D:/OSGEarth/l…

wordpress版本识别

wordpress版本识别 1.通过RSS Feed识别 RSS Feed参考 访问网站/feed或者?feedrss 例如 默认结构:https://www.example.com/?feedrss2 其他结构:https://www.example.com/feed/ 返回结果中搜索 generator 可以看到直接是5.9.7版本 2.wpscan等工具扫一…

Powercli批量修改分布式交换机端口组

背景 需求&#xff1a; 批量修改虚拟机的分布式端口组 解决方式一&#xff1a; 三条命令解决&#xff1a;先获取目标虚拟机、获取目标端口组、修改虚拟机端口组、检查虚拟机状态。 $vm Get-VM -Name <虚拟机名称> $portGroup Get-VirtualPortGroup -Name <端口…

生成式人工智能:网络攻击者手中的破坏性力量

2022 年底&#xff0c;公开可用的生成式人工智能工具的推出使我们进入了人类历史上最大的技术革命之一。 一些人声称它的影响与互联网、手机、智能手机和社交媒体的引入一样大&#xff0c;甚至更大。这些新的生成式人工智能技术的采用和发展速度是我们以前从未见过的。 虽然这…

VBA根据Excel内容快速创建PPT

示例需求&#xff1a;根据Excel中选中的单元格内容&#xff08;3列&#xff09;如下图所示&#xff0c;在已打卡的PowerPoint文件中创建页面。 新增PPT Slide页面使用第二个模板页面&#xff0c;其中包含两个文本占位符&#xff0c;和一个图片占位符。将Excel选中区域中前两列写…

学习笔记二十七:K8S控制器Statefulset入门到企业实战应用

这里写目录标题 Statefulset控制器&#xff1a;概念、原理解读Statefulset资源清单文件编写技巧查看定义Statefulset资源需要的字段查看statefulset.spec字段如何定义&#xff1f;查看statefulset的spec.template字段如何定义 Statefulset使用案例&#xff1a;部署web站点State…

【Python基础】Python编程入门自学笔记,基础大全,一篇到底!

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

虚拟机创建与连接的详细步骤

文章目录 什么是虚拟机&#xff1f;步骤1: 选择虚拟化软件1.1 VirtualBox1.2 VMware Workstation1.3 VMware Player1.4 Hyper-V 步骤2: 创建虚拟机2.1 打开虚拟化软件2.2 创建新虚拟机2.3 配置虚拟机2.4 安装操作系统2.5 启动虚拟机 步骤3: 连接虚拟机3.1 图形用户界面 (GUI)3.…

MySQL复习总结(二):进阶篇(索引)

文章目录 一、存储引擎1.1 MySQL体系结构1.2 存储引擎介绍1.3 存储引擎特点1.4 存储引擎选择 二、索引2.1 基本介绍2.2 索引结构2.3 索引分类2.4 索引语法2.5 SQL性能分析2.6 索引使用2.6.1 最左前缀法则2.6.2 范围查询2.6.3 索引失效情况2.6.4 SQL提示2.6.5 覆盖索引2.6.6 前缀…

Python基础入门例程35-NP35 朋友的年龄是否相等(运算符)

最近的博文&#xff1a; Python基础入门例程34-NP34 除法与取模运算&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程33-NP33 乘法与幂运算&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程32-NP32 牛牛的加减器&#xff08;运算符&#xff09;-CSD…