`
zhangdaiscott
  • 浏览: 454210 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
8fb25857-16b4-3681-ab5e-e319f45c42a8
Jeecg快速开发平台
浏览量:0
文章分类
社区版块
存档分类

小程序登录&授权&获取用户信息

阅读更多
一 、登录
时序图如下:

 
wx.login()
获取js_code
示例代码:
App({
  onLaunch: function() {
    wx.login({
      success: function(res) {
        if (res.code) {
          //TODO
        } else {
          console.log('获取用户登录态失败!' + res.errMsg)
        }
      }
    });
  }
})
 
code 换取 session_key
接口地址:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
请求参数:
参数 必填 说明
appid 小程序唯一标识
secret 小程序的 app secret
js_code 登录时获取的 code
grant_type 填写为 authorization_code
返回参数:
参数 说明
openid 用户唯一标识
session_key 会话密钥
unionid 用户在开放平台的唯一标识符。本字段在满足一定条件的情况下才返回。具体参看UnionID机制说明

wx.checkSession
检测当前用户登录态是否有效
wx.checkSession({
  success: function(){
    //session 未过期,并且在本生命周期一直有效
  },
  fail: function(){
    //登录态过期
    wx.login() //重新登录
    ....
  }
})
二、授权
部分接口需要获得用户授权同意后才能调用。此类接口调用时:
  • 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;
  • 如果用户已授权,可以直接调用接口;
  • 如果用户已拒绝授权,则短期内不会出现弹窗,而是直接进入接口 fail 回调。请开发者兼容用户拒绝授权的场景。
开发者可以使用 wx.getSetting 获取用户当前的授权状态。
wx.getSetting({
  success: (res) => {
    /*
     * res.authSetting = {
     *   "scope.userInfo": true,
     *   "scope.userLocation": true
     * }
     */
  }
})
用户可以在小程序设置界面(右上角 - 关于 - 右上角 - 设置)中控制对该小程序的授权状态。
开发者可以调用 wx.openSetting 打开设置界面,引导用户开启授权。
wx.openSetting({
  success: (res) => {
    /*
     * res.authSetting = {
     *   "scope.userInfo": true,
     *   "scope.userLocation": true
     * }
     */
  }
})
授权
提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。
OBJECT参数说明:
参数名 类型 必填 说明
scope String 需要获取权限的scope,详见 scope 列表
success Function 接口调用成功的回调函数
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)
success返回参数说明:
参数名 类型 说明
errMsg String 调用结果
 
// 先查询一下用户是否授权了 "scope.record" 这个 scope
wx.getSetting({
    success(res) {
        if (!res.authSetting['scope.record']) {
            wx.authorize({
                scope: 'scope.record',
                success() {
                    // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问
                    wx.startRecord()
                }
            })
        }
    }
})
scope 对应接口 描述
scope.userInfo wx.getUserInfo 用户信息
scope.userLocation wx.getLocation, wx.chooseLocation 地理位置
scope.address wx.chooseAddress 通讯地址
scope.invoiceTitle wx.chooseInvoiceTitle 发票抬头
scope.werun wx.getWeRunData 微信运动步数
scope.record wx.startRecord 录音功能
scope.writePhotosAlbum wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum 保存到相册
scope.camera   摄像头
 
三 、获取用户信息
1.wx.getUserInfo(OBJECT)
获取用户信息,withCredentials 为 true 时需要先调用 wx.login 接口。
需要用户授权 scope.userInfo
OBJECT参数说明:
参数名 类型 必填 说明 最低版本
withCredentials Boolean 是否带上登录态信息 1.1.0
lang String 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。默认为en。 1.3.0
success Function 接口调用成功的回调函数  
fail Function 接口调用失败的回调函数  
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)  
注:当 withCredentials 为 true 时,要求此前有调用过 wx.login 且登录态尚未过期,此时返回的数据会包含 encryptedData, iv 等敏感信息;当 withCredentials 为 false 时,不要求有登录态,返回的数据不包含 encryptedData, iv 等敏感信息。
success返回参数说明:
参数 类型 说明
userInfo OBJECT 用户信息对象,不包含 openid 等敏感信息
rawData String 不包括敏感信息的原始数据字符串,用于计算签名。
signature String 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息,参考文档 signature
encryptedData String 包括敏感数据在内的完整用户信息的加密数据
iv String 加密算法的初始向量
userInfo参数说明:
参数 类型 说明
nickName String 用户昵称
avatarUrl String 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
gender String 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
city String 用户所在城市
province String 用户所在省份
country String 用户所在国家
language String 用户的语言,简体中文为zh_CN
示例代码:
wx.getUserInfo({
success: function(res) {
var userInfo = res.userInfo
var nickName = userInfo.nickName
var avatarUrl = userInfo.avatarUrl
var gender = userInfo.gender //性别 0:未知、1:男、2:女
var province = userInfo.province
var city = userInfo.city
var country = userInfo.country
}
})
 
encryptedData 解密后为以下 json 结构
{
    "openId": "OPENID",
    "nickName": "NICKNAME",
    "gender": GENDER,
    "city": "CITY",
    "province": "PROVINCE",
    "country": "COUNTRY",
    "avatarUrl": "AVATARURL",
    "unionId": "UNIONID",
    "watermark":
    {
        "appid":"APPID",
    "timestamp":TIMESTAMP
    }
}
2.getPhoneNumber(OBJECT)
获取微信用户绑定的手机号,需先调用login接口。
因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 <button> 组件的点击来触发。
注意:目前该接口针对非个人开发者,且完成了认证的小程序开放。需谨慎使用,若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。
需要将 <button> 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号。
 
在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。
 
代码示例:
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"> </butto>
Page({
getPhoneNumber: function(e) {
console.log(e.detail.errMsg)
console.log(e.detail.iv)
console.log(e.detail.encryptedData)
}
})
参数 类型 说明
encryptedData String 包括敏感数据在内的完整用户信息的加密数据
iv String 加密算法的初始向量
 
encryptedData 解密后为以下 json 结构
{
"phoneNumber": "13580006666",
"purePhoneNumber": "13580006666",
"countryCode": "86",
"watermark":
{
"appid":"APPID",
"timestamp":TIMESTAMP
}
}
参数 类型 说明
phoneNumber String 用户绑定的手机号(国外手机号会有区号)
purePhoneNumber String 没有区号的手机号
countryCode String 区号
  • 大小: 84.6 KB
分享到:
评论

相关推荐

    小程序登录获取用户信息 php服务端

    在微信小程序的开发过程中,获取用户信息是至关重要的一步,特别是在涉及到用户个性化服务、数据分析以及权限控制等场景。本文将详细讲解如何在PHP服务端实现小程序登录并获取用户信息。 首先,我们需要理解小程序...

    uniapp 小程序授权登录,获取用户头像昵称等信息

    uniapp 小程序授权登录,获取用户头像昵称等信息,代码已经封装好,下载就能用

    微信小程序用户授权、位置授权及获取微信绑定手机号

    以下是对微信小程序授权机制的详细介绍。 首先,用户授权在微信小程序中指的是获取用户的个人信息,比如用户的头像、昵称等。由于涉及到用户隐私,小程序需要先获得用户的明确授权,才能调用相关的接口。用户信息...

    springboot微信小程序登录获取用户信息的demo案例.zip

    自2017年正式上线以来,小程序凭借其便捷性、易获取性和出色的用户体验迅速获得市场认可,并成为连接线上线下服务的重要桥梁。 小程序的核心特点包括: 零安装:用户只需通过微信扫一扫或搜索功能,即可打开和...

    ASP.NET网页微信登录授权,获取用户基本信息

    微信认证流程(我自己简称三次握手): 1、用户同意授权,获取code 2、通过code换取网页授权access_token,用户openId等信息 3、通过access_token和用户的openId获取该用户的用户信息 ...获取用户信息。

    微信小程序授权获取用户详细信息openid的实例详解

    本实例将详细讲解如何在微信小程序中授权获取用户openid及其相关信息。 首先,我们可以使用两种方式来获取用户信息。第一种是直接调用`wx.getUserInfo`接口,这将返回用户的基本信息,如昵称和头像。以下是一个简单...

    微信小程序弹出对话框,可设置获取用户信息type

    在描述中提到的`type`属性,实际上是指在授权获取用户信息时使用的`scope`。微信小程序提供了一套完整的用户授权机制,通过`wx.authorize`或`wx.openSetting`接口可以请求用户授权获取特定的信息,例如基本信息、...

    微信小程序如何获取用户头像和昵称

    微信小程序获取用户信息是一个涉及用户授权的流程,需要用户允许之后才能进行。开发者必须提供清晰的用户指引,告知用户为何需要这些信息,并且在获取用户信息前,需要使用wx.showModal弹出授权提示框,让用户明确...

    java之微信开放平台之小程序获取用户信息

    说实话,微信开放平台的文档真的是狗屎一般的存在,维护不及时,混乱,每隔一段时间更新一次授权接口!着实让开发者想口吐芬芳了!...微信小程序获取用户openid 首先看一下文档中规划的登录流程时序图上面这一部分:

    C#获取微信小程序openid等用户信息(前端+asp.net服务器端代码)

    在微信小程序的开发过程中,获取用户的openid和其他相关信息是至关重要的步骤。这涉及到微信小程序与后端服务器之间的数据交互,确保用户身份的安全验证。本篇主要介绍如何在C#环境下,结合asp.net服务器端来实现这...

    C#微信小程序服务端获取用户解密信息实例代码

    微信小程序在用户授权后,会通过API接口发送加密后的用户信息到服务端,服务端需要正确解密这些信息才能获取用户的详细资料。 在给出的代码示例中,首先定义了一个名为`wxapi`的类,它实现了`IHttpHandler`接口,这...

    java处理小程序授权和app微信授权

    首先,小程序授权主要依赖微信开放平台提供的OAuth2.0协议,它允许第三方应用在用户授权的情况下,获取到用户的基本信息。在Java后端,我们可以创建一个`TUserController`类,这个控制器负责处理来自小程序的授权...

    asp微信小程序(授权登录+微信支付)案例demo

    ASP微信小程序(授权登录+微信支付)案例DEMO是一个实用的教学资源,涵盖了微信小程序开发中的核心功能:授权登录和微信支付。在这个项目中,开发者可以学习如何利用ASP后端技术和微信开放平台接口来构建一个完整的...

    微信小程序获取手机号授权用户登录功能

    小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写。 1.getPhoneNumber这个组件通过button来实现(别的标签无效)。将button中的open-...

    微信小程序微信授权用户头像昵称获取规则调整对应

    根据微信社区的最新公告,自2022年11月8日24时起,小程序 wx.getUserProfile 接口、wx.getUserInfo 接口获取用户昵称头像将被收回对于来自低于2.27.1版本的访问,小程序通过 wx.getUserProfile 接口将正常返回用户...

    微信小程序用户授权弹窗 拒绝时引导用户重新授权实现

    我们在开发小程序时,如果想获取用户信息,就需要获取用的授权,如果用户误点了拒绝授权,我们怎么样去正确的引导用户重新授权呢。今天就来给大家讲讲如果正确的引导用户授权。 老规矩,先看效果图 从上图可以看出...

    支付宝 网页授权 获取用户信息Demo(C#)

    本示例"支付宝网页授权获取用户信息Demo(C#)"是针对C#开发者设计的一个小程序,它利用了支付宝官方提供的SDK,帮助开发者实现从支付宝平台获取用户的基本信息。下面将详细介绍这个DEMO的工作原理和涉及的技术知识点...

    小程序登陆+用户基本信息授权+手机号授权(结合业务)1

    综上所述,微信小程序的登录和授权涉及多步骤的交互,包括获取`code`、验证登录凭证、生成自定义`token`、授权获取用户基本信息和手机号。每个步骤都需要细心处理,以确保用户体验和数据安全性。同时,随着微信接口...

    微信小程序-授权提示

    在微信小程序中,如果需要获取用户的个人信息,如昵称、头像等,必须先获得用户的授权。这是因为微信小程序遵循严格的数据安全和隐私政策。自定义授权提示模块可以让开发者根据自己的应用需求设计更符合品牌风格和...

    微信小程序非跳转式组件授权登录的方法示例

    在了解微信小程序非跳转式组件授权登录的方法之前,首先需要明白微信小程序授权登录的整体流程。授权登录流程大致可以分为以下几个步骤: 1. 授权:小程序向用户请求授权,通常是在需要获取用户信息的场景下,比如...

Global site tag (gtag.js) - Google Analytics