当前位置:   article > 正文

微信小程序用户登陆和获取用户信息功能实现_微信小程序获取用户信息

微信小程序获取用户信息

官方文档:

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html

接口说明:

https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html

我们看官方这个图,梳理一下用户登陆的大概流程就是:

1.小程序获取code,将code发给服务器,

2.服务器将appid + appsecret + code发给微信接口 

3.微信接口返回 session_key + openid给服务器 

4.服务器定义登陆状态,返回token给小程序

5.小程序接收token并保存

1、做一个用户登陆按钮和获取用户信息按钮

  1. <view>
  2. <button bindtap="getUserInfo" type="primary">获取用户信息</button>
  3. <button bindtap="wxLogin" type="warn" >登陆</button>
  4. </view>

 2、调用微信官方的用户登陆方法和获取用户信息方法

  1. //获取微信用户的头像和昵称
  2. getUserInfo() {
  3. wx.getUserProfile({
  4. desc: '用于完善会员资料',
  5. success: res => {
  6. console.log('用户信息:', res.userInfo)
  7. },
  8. fail: err => {
  9. console.error('获取用户信息失败', err)
  10. }
  11. })
  12. },
  13. // 微信登陆
  14. wxLogin() {
  15. wx.login({
  16. success: (res) => {
  17. console.log(res.code)
  18. },
  19. })
  20. }

3、测试 

这里我们可以看到当我点击“获取用户信息”按钮之后,成功返回的用户信息。这说明测试成功了,这里还得提一下,现在新版本的都不会显示用户昵称和头像了,之前旧版本的会直接返回用户真实的头像和昵称,所以不必纠结这一点,这不是问题。

当点击登陆按钮时,返回了code,这也说明咱们的代码是没问题的。 

4、小程序发送code给服务器 

  1. // 发送请求
  2. sendRequest() {
  3. wx.request({
  4. url: 'http://localhost:8080/api/user/wxLogin',
  5. method:'POST',
  6. data: {
  7. jsCode: this.code //code作为jsCode字段放在data对象中
  8. },
  9. success: (res)=>{
  10. this.token = res.data.data;
  11. console.log('接收到的token为:' + this.token)
  12. }
  13. })
  14. }
  1. <view>
  2. <button bindtap="getUserInfo" type="primary">获取用户信息</button>
  3. <button bindtap="wxLogin" type="warn" >登陆</button>
  4. <button bindtap="sendRequest" type="default" >发送请求</button>
  5. </view>

5、服务器端代码

  1. @Override
  2. public Result<String> wxLogin(WxLoginParam param) {
  3. System.out.println("打印code" + param.getJsCode());
  4. // 得到微信登录信息
  5. String response = payService.getWxLogin(param.getJsCode());
  6. if (StrUtil.isEmpty(response)) {
  7. return Result.fail(ResultCodeEnum.WX_ERROR);
  8. }
  9. // 微信会返回一段json,从中得到openid、session_key和unionid
  10. JSONObject resJson = JSONUtil.parseObj(response);
  11. String openid = resJson.getStr("openid");
  12. if (StrUtil.isEmpty(openid)) {
  13. Result<String> result = new Result<>();
  14. result.setCode(ResultCodeEnum.SERVICE_ERROR.getCode());
  15. result.setMessage("调用微信接口异常:" + resJson.get("errmsg"));
  16. return result;
  17. }
  18. // 根据微信用户信息查询
  19. LambdaQueryWrapper<User> usWrapper = Wrappers.lambdaQuery();
  20. usWrapper.eq(User::getOpenId, openid);
  21. synchronized (this) {
  22. User user = baseMapper.selectOne(usWrapper);
  23. if (Objects.isNull(user)) {
  24. // 如果是第一次登录则创建信息
  25. user = new User();
  26. user.setOpenId(openid);
  27. user.setInvokeFlag(ProjectConstant.INVOKE_FLAG_TRUE);
  28. baseMapper.insert(user);
  29. } else if (ProjectConstant.INVOKE_FLAG_FALSE.equals(user.getInvokeFlag())) {
  30. return Result.fail(ResultCodeEnum.ACCOUNT_STOP);
  31. }
  32. return Result.ok(JwtUtil.getToken(user.getId(), null));
  33. }
  34. }

6、测试结果 

 可以看到我们已经成功地接收到了token,说明成功了。

 亲爱的读者,感谢您关注与支持我的博客。您的每一份鼓励都是我前行的动力。若我的文章曾给您带来收获或启发,欢迎打赏支持。打赏款项将用于提升内容质量,为您提供更优质的阅读体验。无论结果如何,都感恩您的陪伴,让我们共同在知识的世界里探索前行!

​​​​​​​

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号