uni-app微信小程序一键授权登录最新版文档全流程揭秘

uniapp微信小程序登录(先授权微信后授权手机号)-- (1) 1.操作流程 ①点击登录按钮,实现微信授权。 ②授权允许后弹出绑定手机号授权。 ③手机号授权成功后,跳转回登录界面。 2.逻辑流程 ①登录之前自动加载出微信的code。 ②微信登录后,将获取的微信信息(昵称、头像等)以及后台算出的openid、unionid等保存/更新到数据库的会员表中,并返回算出的session_key+会员信息。 ③判断会员信息中手机号是否为空。如果手机号为空,获取手机号授权;否则返回登录界面。 ④获取手机号授权,允许后在后台解密。得到手机号。更新数据库中会员表的手机号 阅读详情
AI摘要

本文记录了使用uni-app开发微信小程序实现一键授权登录的全流程。包括获取用户授权的基本流程,介绍了获取用户手机号、服务器端解密手机号、头像及昵称获取方案等内容,还提及了注意事项,如基础库版本要求等,最终实现获取用户授权及相关信息。

最近做了一个产品展示的微信小程序,用的很火的极客开发工具hbuilderx,实现了微信一键登录授权,授权获取手机号,头像,昵称的功能,刚好记录一下。我自己主要是做Android开发的,前后端都会,后端用的若依的二开的java语言。

获取用户授权的基本流程

在开发微信小程序时,获取用户的手机号、头像和昵称需要用户授权。微信小程序提供了相应的API来实现这些功能。以下是实现这些功能的基本流程和代码示例。需要注意的是目前微信小程序文档中规定:获取用户头像和昵称必须提供用户交互动作获取,获取手机号必须提供用户授权按钮事件获取。

获取用户手机号

获取用户手机号需要使用 button 组件的 open-type 属性,并绑定 getPhoneNumber 事件。

<!-- 在wxml文件中 -->
<button open-type="getPhoneNumber" bindgetphonenumber="onGetPhoneNumber">获取手机号</button>
 

// 在js文件中
Page({
  onGetPhoneNumber(e) {
    if (e.detail.errMsg === 'getPhoneNumber:ok') {
      const encryptedData = e.detail.encryptedData;
      const iv = e.detail.iv;
      console.log('加密数据:', encryptedData);
      console.log('初始向量:', iv);
      // 将 encryptedData 和 iv 发送到服务器进行解密
    } else {
      console.error('获取手机号失败:', e.detail.errMsg);
    }
  }
});
 

代码说明:

  • open-type="getPhoneNumber" 是 button 组件的属性,用于触发获取手机号的操作。
  • bindgetphonenumber 是绑定的事件,当用户点击按钮并授权后触发。
  • e.detail.encryptedData 和 e.detail.iv 是加密的数据和初始向量,需要发送到服务器进行解密。
  • 服务器解密后可以获取用户的手机号。

服务器端解密手机号

在服务器端,需要使用微信提供的解密算法来解密 encryptedData 和 iv,以获取用户的手机号。

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AESDecryptor {

    private static final String ALGORITHM = "AES";
    private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";

    public static String decrypt(String encryptedText, String secretKey) throws Exception {
        SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(), ALGORITHM);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
        return new String(decryptedBytes);
    }

    public static void main(String[] args) {
        try {
            String encryptedPhoneNumber = "加密后的手机号Base64字符串";
            String secretKey = "16字节的密钥";
            String decryptedPhoneNumber = decrypt(encryptedPhoneNumber, secretKey);
            System.out.println("解密后的手机号: " + decryptedPhoneNumber);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 

代码说明:

  • decrypt_phone_number 函数用于解密微信小程序返回的加密数据。
  • session_key 是用户的会话密钥,可以通过 wx.login 获取。
  • encrypted_data 和 iv 是从客户端获取的加密数据和初始向量。
  • 解密后可以获取用户的手机号。

头像获取方案

  1. 使用<button>组件触发头像选择
    <button open-type="chooseAvatar" bindchooseavatar="onChooseAvatar">
      选择头像
    </button>
     
    

  2. 事件处理函数
    Page({
      onChooseAvatar(e) {
        const { avatarUrl } = e.detail
        this.setData({
          avatarUrl
        })
      }
    })
     
    

    昵称获取方案

  3. 使用<input>组件收集用户昵称
    <input 
      type="nickname" 
      placeholder="请输入昵称"
      bindblur="onNickNameInput"
    />
     
    

  4. 事件处理函数
    Page({
      onNickNameInput(e) {
        const nickName = e.detail.value
        this.setData({
          nickName
        })
      }
    })
     
    

    注意事项

  5. 需要基础库2.21.2及以上版本,旧版本基础库获取用户信息的API只支持到2.27,之后的都无法获取到用户信息了。
  6. 必须通过用户主动触发事件获取
  7. 用户拒绝授权处理方案:
    // app.json 配置
    {
      "permission": {
        "scope.userAvatar": {
          "desc": "用于完善会员资料"
        }
      }
    }
     
    

    完整示例

    ​​​​​​​
  8. ​​​​​​​
<view class="container">
  <button 
    open-type="chooseAvatar"
    bindchooseavatar="onChooseAvatar"
    class="avatar-btn"
  >
    <image 
      src="{{avatarUrl || '/default-avatar.png'}}" 
      class="avatar"
    />
  </button>

  <input
    type="nickname"
    placeholder="请输入昵称"
    value="{{nickName}}"
    bindblur="onNickNameInput"
    class="nickname-input"
  />
</view>
 

总结

通过以上步骤,可以在微信小程序中实现获取用户授权并获取用户的手机号、头像和昵称。客户端代码负责获取用户授权和加密数据,服务器端代码负责解密数据并获取用户的手机号。

【微信小程序】实现授权登入---超详细讲解 微信小程序实现授权登入 阅读详情

相关推荐

微信小程序一键登录和临时code用JWT进行微信用户授权

2、跨域进行调用接口时候,唯一标识UnionID和会话密钥 session_key如果还是用的我自己的,会出现无法调用微信服务器接口,就需要将唯一标识和会话密钥换成前端的,才可以,我自己认为这样很不合理,暂时还没有找到原因。2、能够获取到openId,但是也只能获取到openid,无法获取用户的相关信息,经过查阅官网发现,现在微信那边已经将用户信息加密,需要调用提供的接口进行解密然后获取用户数据,问题原因已经找到解决方法,还未即使更改。1、我这是一台电脑实现的前端调用后端接口,不用考虑跨域的问题。

qq_67653492的博客 5715

uniapp开发微信小程序笔记11-获取手机号授权登录流程

微信小程序通常会有一个一键获取用户手机号的功能,这个功能是前后端配合完成的。先由前端弹起授权界面,用户同意后要将传给后端,后端会拿到这些身份信息去微信官方获取到用户的手机号,再传回给前端。

wzy_PROTEIN的博客 3357

uniapp微信授权登录

uniapp微信登录之app和微信小程序登录 以下介绍app微信登录和微信小程序登录,其他平台根据需求处理。 欢迎指教~ 文章目录uniapp微信登录之app和微信小程序登录效果图官方文档前提方式一: 常用方式方式二: 结合html5+相关方法实现微信小程序直接获取用户信息返回数据效果图获取所有服务供应商 效果图 官方文档 uni.login uni.getProvider 前提 需要相关配置 授权登录插件配置 方式一: 常用方式 <button class="" @click="weixi

Smile_ping的博客 1万+

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

新版:前端要授权两次,一次获取用户信息授权码code,另外一次获取用户手机授权码code,全部传给后端。后端通过用户信息授权码获取openid,通过手机授权码获取手机号码。老版:前端传给后端授权码code和用户手机授权回调 里的iv和encryptedData给后端,后端通过code获取openid和sessionKey,然后他用sessionKey和iv解密encryptedData获取手机号。最后通过手机号进行绑定用户,然后通过登录验证返回给前端登录凭证token。

mrqi122的博客 1万+

利用随机矩阵理论(random matrix theory)确定微生物网络构建阈值

利用随机矩阵理论(random matrix theory)确定微生物网络构建阈值

微生物生态学分析 7639

【HSPiP应用指南】从理论到实践:如何利用汉森溶解度参数优化配方设计

本文深入解析了汉森溶解度参数(HSP)理论及其在配方设计中的核心价值,并详细介绍了如何利用HSPiP软件工具从理论走向实践。文章通过匹配溶解度参数、计算汉森距离(Ra),系统阐述了如何解决溶剂选择、颜料分散稳定性及扩散行为预测等关键问题,并结合界面气相色谱(IGC)等实验方法提升预测精度,旨在帮助配方师实现配方设计的可视化、可量化与高效优化。

weixin_29305313的博客 1649

uni-app 微信小程序授权登录

文章目录一、appID相关申请和配置1. appid获取方式2. appID配置二、获取用户基础数据2.1. 获取用户信息2.2. 获取用户信息2三、调用登录api3.1. 登录api3.2. 案例代码四、获取唯一标识信息4.1. 官网文档4.2. 接口简述五、绑定用户 实现登录5.1. 代码案例(未封装)5.2. 代码案例(封装) 一、appID相关申请和配置 1. appid获取方式 登录微信公众平台 官网链接:https://mp.weixin.qq.com/ 第一次需要小伙伴们点击注册按钮,.

Gblfy_Blog 1万+

STM32 烧录报错Invalid ROM Table

STM32 烧录报错Invalid ROM Table

热爱科技,物联,程序开发等 1734

uni.app实现登录

1:微信小程序登录 2:uniapp登录 3: 遇到`https://api.weixin.qq.com`不在request合法域名列表中 4:uni.getUserProfile获取用户信息拉不起授权弹窗 5: uni.login 接口code字段值the code is a mock one 6:uniapp+vue3.0+vuex+uview-plus

chengcheng9876的博客 2631

从零开始:EAS2+Elmo+Maxon电机调试全流程(含电流环优化技巧)

本文详细解析了从零开始搭建基于EAS2软件、Elmo驱动器和Maxon电机的运动控制系统的全流程。内容涵盖硬件连接规范、EAS2基础配置、核心的电流环模型辨识与手动优化技巧,以及速度环、位置环的搭建与调试策略,旨在帮助工程师构建稳定、高性能的伺服控制核心。

i0j1k2l3m的博客 503

SAP高级外币评估_FINS_FXV_S4 2022 OP

摘要:S/4HANA 2022 On-Premise中的高级外币评估(FINS_FXV)取代了经典外币估值(FAGL_FCV),提供更优化的财务结算功能。主要创新包括:增量发布逻辑、简化账户配置、行项目级估值可见性等。该功能支持IFRS9等会计准则,通过会计原则(Accounting Principle)进行配置,需完成财务报表版本定义、语义标记分配等必要设置。系统演示展示了从汇率维护(FB60/MIRO)、测试运行到最终过账(FB03)的完整流程,能自动计算并过账汇率差异。高级外币评估简化了期末结算操作,

yanzibing99的博客 1260

基于uni-app实现微信小程序一键登录和退出登录功能

目前正在使用uni-app开发一个微信小程序,开发到登录模块时通过查阅uni-app官方教程、微信小程序官方文档、网上的教程终于是实现了微信小程序的登录模块,现总结分享给大家,共同学习...

weixin_57006241的博客 1万+

RocketMQ5.3.0-control-多 Master 多 Salve-异步复制-集群搭建

RocketMQ5.3.0-control-多 Master 多 Salve-异步复制-集群搭建(详细文档)

m0_52369979的博客 731

微信小程序uni-app+vue3实现手机号一键登录方法

网上的教程都挺乱,写得都不怎么全,我重新实现了一下,把具体的方法都分享出来。

qq_74177889的博客 2460

在WSL2中配置代理(Windows)

通过按照上述步骤在WSL2中配置代理,我们可以轻松地在Windows子系统Linux中使用代理服务器访问互联网。请确保提供正确的代理服务器地址和端口号,并根据实际情况进行修改。在WSL2中使用代理是一个常见的需求,它允许我们在Windows子系统Linux中通过代理服务器访问互联网。本文将详细介绍如何在WSL2中配置代理,并提供相应的源代码示例。如果返回的IP地址与代理服务器所在地不同,说明代理正常工作。希望本文能对你有所帮助!如有其他问题,请随时向我提问。替换为实际的代理服务器地址和端口号。

FcUnity的博客 4356

华为FusionCompute之计算虚拟化

华为FusionCompute之虚拟化

jks212454的博客 2452

uni-app微信小程序登录;uni-app微信登录小程序;uni-app微信登录app;

通过uni-app文档可知:实现微信登录,无论是app还是小程序,都需要唯一标识openid,然后通过openid取掉后端的登录接口,获取cookie然后做登录跳转; 但是获取openid的方式不同,目前有两个方式获取到。 1.通过uni.login()方法,得到code,拿这个code调用后端写的接口获取openid(此方式微信小程序和app都支持,H5不支持) 2.app还可以通过uni.getUserInfo 直接获取到openid uni-app微信登录app方法 uni-app微信登录微信小

i_am_a_div的博客 2983

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

uni-app开发微信小程序实现一键获取用户微信手机号并登录,含Authing使用(干货)

使用 button 组件,并将 open-type 指定为 getPhoneNumber 类型,以获取用户手机号码。注意:不管是getUserInfo还是getPhoneNumber都只能通过 button 去触发!!!

upc_ws云边牧风是文森 7860

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

uni-app微信小程序登录授权

微信小程序授权是非常简单和常用的功能,但为了方便,还是在此记录一下要点: 首先是需要用到一个授权按钮来触发获取用户信息授权: 关键在于 open-type 为getUserInfo, 然后有个@getuserinfo的事件,把获取授权接口写到该事件里面去 <button class="sys_btn" open-type="getUserInfo" lang="zh_CN" @getuserinfo="appLoginWx">小程序登录授权</button> 方法如下: ..

ANNENBERG的博客 1130

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

uni-app 微信小程序授权登录:从 uni.login 到手机号绑定

在微信小程序中,授权登录并非调用一个 API 就能完成,而是围绕身份识别与信息授权展开的完整链路。前端通过 uni.login 获取临时 code,后端携带 AppSecret 换取 openid 与 session_key,再签发自定义登录态 token;手机号、头像昵称等敏感信息则需用户主动触发组件授权。其技术价值在于将临时凭证、服务端会话与业务请求鉴权解耦,既能保障 AppSecret 与 session_key 安全,又能支撑多端统一登录、token 续期与 401 重试。适用于 uni-app 多

weixin_33795743的博客 670

uniapp+SpringBoot实现微信小程序手机号一键登录全流程(附前后端代码及详细解释)

实现微信小程序手机号一键登录的全流程涉及前端(uni-app)和后端(Spring Boot)的协同工作。这个过程主要包括以下几个步骤:用户授权、获取手机号码、后端验证与生成Token、前端存储Token。下面我将分步骤详细介绍,并提供简化版的示例代码。

man2017的博客 3670

uni-app 微信小程序根据角色动态的更改底部tabbar

文章目录1. 需求背景1.1 源码下载2. 问题前提及思路3. 开始撸3.1 设置 `tabbar.js` 配置不同角色不同的菜单3.2 设置 `page.json`3.3 vue 配置3.4 tabBar组件代码3.5 setRole方法 1. 需求背景 公司要求开发一个小程序,要求二种不同权限的人群都可以使用,使用时根据不同的权限,获取不同的tabbar,以及展示对应不同的内容。 登录页面分为 用户登录 及 管理员登录 1.2 用户登录和管理员登录的 tabbar 根据账号角色进行对应展示 1.1

@必意玲 10万+

uniapp 实现微信小程序手机号一键登录

【代码】uniapp 实现微信小程序一键登录。

qq_26711723的博客 6752

uniapp/微信小程序 登录以及用户信息获取功能相关问题 uni.login() uni.getUserinfo()

uniapp 小程序登录

SANGZHU_001的博客 6420

uni-app在微信小程序中无法拉起用户授权面板,uni.getUserInfo直接返回匿名数据

问题描述:在开发中通过微信小程序文档(https://developers.weixin.qq.com/miniprogram/dev/component/button.html)和uni-app文档(https://uniapp.dcloud.io/api/plugins/login?id=getuserinfo)配置button属性与绑定事件实现拉起授权获取用户信息面板:open-type、@getuserinfo="bindGetUserInfo"、withCredentials,在莫名的一波操作后,

东小记的博客 3万+
PandaLikeMe
博客等级 码龄9年 10粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值