微信授权官方文档
登录流程时序:
这里我是用微信开发者工具写的前端
login.wxml代码:

<view class="userinfo"><block wx:if="{{!hasUserInfo}}"><button class="addphoto_footer" wx:if="{{currentIndex == 0}}" bindtap="getUserProfile"> 获取头像昵称 </button><button class="addphoto_footer" wx:if="{{currentIndex == 1}}" bindtap="getUserInfo"> 获取头像昵称 </button></block><block wx:else><image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image><text class="userinfo-nickname">{{userInfo.nickName}}</text></block></view>

login.js:

getUserProfile: function (e) {var that = this;wx.getUserProfile({desc: '必须授权才能使用',success: res => {let user = res.userInfothis.setData({user: user,encryptedData: res.encryptedData,iv: res.iv})var encryptedData = res.encryptedData;var iv = res.iv;wx.login({success: (res) => {if (res.code) {wx.request({url: '请求地址',method: 'Get',header: {'content-type': 'application/x-www-form-urlencoded',},data: {code: res.code,encryptedData: encryptedData,iv: iv,},success(res) {console.log("success!!!")}})}}})},fall: res => {console.log('失败', res)},

后端代码:
WxCtrl:

private WxService wxService;@Autowired@Resourceprivate RestTemplate restTemplate;String AppId = "***********";  //公众平台自己的appIdString AppSecret = "****************";  //AppSecret@GetMapping("/login")public Map<String, Object> wxDoLogin(@RequestParam("code") String code, String encryptedData, String iv) throws Exception {Map<String, Object> result = new HashMap<>();System.out.println("code is " + code);String access_token = String.valueOf(AccessToken.getAccessToken());result.put("status", 200);String url = "https://api.weixin.qq.com/sns/jscode2session?" +"appid=" + AppId +"&secret=" + AppSecret +"&js_code=" + code +"&grant_type=authorization_code";String jsonData = restTemplate.getForObject(url, String.class);JSONObject jsonObject = JSONObject.parseObject(jsonData);if (StringUtils.contains(jsonData, "errcode")) {result.put("status", 500);result.put("msg", "登录失败");}String openid = jsonObject.getString("openid");String sessionKey = jsonObject.getString("session_key");//解密
//        String s = wxService.wxDecrypt(encryptedData, jsonObject, iv);
//        JSONObject jsonObject1 = JSON.parseObject(s);
//        Object watermark = jsonObject1.get("watermark");
//        JSONObject jsonObject2 = JSON.parseObject(String.valueOf(watermark));return result;}

WxService

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.codec.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.spec.AlgorithmParameterSpec;
import java.util.Random;@Slf4j
@Component
public class WxService {public String wxDecrypt(String encryptedData, JSONObject jsonObject, String vi) throws Exception {// 开始解密String sessionKey = (String) jsonObject.get("session_key");byte[] encData = cn.hutool.core.codec.Base64.decode(encryptedData);byte[] iv = cn.hutool.core.codec.Base64.decode(vi);byte[] key = Base64.decode(sessionKey);AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keySpec = new SecretKeySpec(key, "AES");cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);return new String(cipher.doFinal(encData), "UTF-8");}//生成随机用户名,数字和字母组成,public String getStringRandom(int length) {StringBuilder val = new StringBuilder();Random random = new Random();//参数length,表示生成几位随机数for (int i = 0; i < length; i++) {String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";//输出字母还是数字if ("char".equalsIgnoreCase(charOrNum)) {//输出是大写字母还是小写字母int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;val.append((char) (random.nextInt(26) + temp));} else {val.append(random.nextInt(10));}}return val.toString();}
}

RestTemplateConfig

import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate(RestTemplateBuilder builder){return builder.build();}
}

微信小程序授权登录获取用户名和昵称相关推荐

  1. 微信小程序授权登录+获取手机号

    微信小程序授权登录+获取手机号 一.官方文档背景: 小程序登录的链接: 微信小程序获取手机号的链接: 二.微信小程序授权登录+获取手机号 1.简单说明官方文档的操作:先授权登录后拿手机号 2.前端代码 ...

  2. SpringCloud 微信小程序授权登录 获取openId SessionKey【SpringCloud系列13】

    SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见. 自我提升方法推荐:神奇的早起 早上 5:00 -5:20 起床刷牙 5:30-6:00 晨练(跑步.跳绳.骑自行车.打球等等) ...

  3. 基于Thinkphp5+EasyWeChat+fastadmin微信小程序授权登录获取手机号微信公众号网页---联合授权登录

    战前准备 1.使用 composer 安装 EasyWeChat $ composer require overtrue/wechat:~4.0 -vvv 或者在composer.json文件renq ...

  4. 微信小程序授权登录获取用户信息并保存至缓存用于下次登录

    1.获取用户信息 wx.getUserProfile(Object object) 获取用户信息.页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用,每次请求都会弹出授权窗 ...

  5. 微信小程序授权登录获取用户信息详解

    今天来说一下微信小程序的授权登录获取用户信息,首先我们看微信提供的小程序开发文档: https://blog.csdn.net/qq_41971087/article/details/82466647 ...

  6. 微信小程序授权登录——获取用户信息

    小程序登录 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系. 登录流程时序 效果展示: 功能实现: 新建一个login页面 login.js: wx. ...

  7. 微信小程序授权登录获取用户头像和昵称时得到微信用户,记录getUserInfo转变为getUserProfile的使用修改

    首先,在微信官方更新授权操作之前,我们一直使用getUserInfo来获取微信用户的头像和昵称以及openid,这个可以参考我的上一篇博客(使用getUserInfo获取用户头像),但是微信官方弃用g ...

  8. 微信小程序授权登录获取手机号,偶尔出现41003问题

    最近做微信授权登录获取手机号有时会出现41003问题,研究半天网上查了不少资料,梳理下过程: 从文档可知主要是wx.login()获取code顺序问题 <button class="b ...

  9. 最新版微信小程序授权登录(自定义头像昵称)

    根据官方微信小程序开发关于登录授权API的调整,自 2022年10月25日起有关API接口获取用户头像将统一返回默认灰色头像,昵称将统一返回 "微信用户".(如下图所示) ​ 那我 ...

最新文章

  1. ELK 性能优化实践
  2. Windows 7中200M神秘隐藏分区
  3. 苗旺:因果推断,观察性研究和 2021 年诺贝尔经济学奖
  4. 华为设备经典的地址以及远程登录(VTY)实施
  5. 如何改变 Python 中线程的执行顺序
  6. 一道问题引出的python中可变数据类型与不可变数据类型
  7. extern C 作用
  8. 【Windows工具】BBDown.exe B站视频下载工具详细使用说明(https://github.com/nilaoda/BBDown)
  9. 实验一 winrunner的安装使用
  10. java学生管理系统代码
  11. 软件模拟I2C(万能模板)
  12. 谷歌离开中国的三大原因四大后果
  13. guacamole开发者文档——数据库认证
  14. pytorch采用GPU加速方法
  15. 温暖守护客户财富与健康,平安人寿推出“盛世金越尊享”终身寿险
  16. 如何与其他用户共享SkyBell HD访问
  17. 数据分析之numpy基础/matplotlib绘图/numpy常用函数/杂项功能
  18. 解决问题记录4:kettle数据库连接报错时区问题
  19. 豆瓣8.5以上!这10本书,值得每个人读一遍
  20. 职言 | 校招面试有感,一个面试官的几点建议

热门文章

  1. fork函数的介绍和使用
  2. PNP : TCP relay Socks4a
  3. html英文读法,48个英语音标发音表
  4. 菜鸟学Linux 第107篇笔记 zabbix概念和安装
  5. 联想y7000p2020H重装系统后少了各种驱动的解决办法。
  6. DELL笔记本webcom摄像头问题解决方法
  7. 直播 | 36Kr的容器化之路
  8. 银河麒麟v10系统+龙芯3A5K 移植qt5的惨痛经历(一)
  9. 嵩天老师的Python基础MOOC课笔记
  10. 访问学者进入美国哪些东西不能带?