关于微信第三方的开发,官方文档给了很详细的解析说明,有不清楚流程的同学可以先去官网学习,而我这里主要是整理一下自己的后台处理流程。

其实微信登录就是通过用户的授权,允许app获取用户的微信信息,再往自己的数据库插入获取的信息。
这里用手机app作为例子,当手机选择微信登陆且确认的时候,app会生成一个code,用于获取授权信息,这个code的生命周期只能使用一次,这时候后台可以接受这个code,并获得access_token和openid等信息,有了access_token和openid就能获得该微信用户的信息。
因为以上步骤都是需要appId和秘钥的,所以这两个信息需要放在后台,而不是app客户端。后台操作如下:
后台发送http请求的操作可以使用第三方的okhttp3

     <dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.10.0</version></dependency>

maven导入需要的jar,编写工具类获取access_token

 public static final String APPID = "你的appId";public static final String SECRET = "你的秘钥";//获取信息的地址access_token和openIdprivate static final String ACCESSTOKEN = "https://api.weixin.qq.com/sns/oauth2/access_token";private static final String WECHATUSERINFO = "https://api.weixin.qq.com/sns/userinfo";public static Map getAccessToken(String code){String url = new StringBuilder(ACCESSTOKEN).append("?grant_type=authorization_code&appid=").append(APPID).append("&secret=").append(SECRET).append("&code=").append(code).toString();OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url(url).build();try {Response response = client.newCall(request).execute();String resultJson = response.body().string();/** 正确返回示例* "access_token":"ACCESS_TOKEN",* "expires_in":7200,* "refresh_token":"REFRESH_TOKEN",* "openid":"OPENID",* "scope":"SCOPE",* "unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"*/Map parseObject = JSONObject.parseObject(resultJson, Map.class);//将json专还成map,方便取值String access_token = (String)parseObject.get("access_token");if (access_token != null){//有token说明请求正确,返回Map信息return parseObject;}} catch (IOException e) {e.printStackTrace();}return null;}

调用该方法传入正确的code,能得到我们所需要的信息,到这里为止只是获得了授权和openId的信息,也许你会问openId到底是什么,openId其实就是你微信帐号的唯一标识。
获得到这个map之后,controller层可以这样操作

     //得到accesstoken和openIdMap accessToken = WechatUtil.getAccessToken(code);if (accessToken==null)//请求失败,空就说明刚刚的请求没有发送成功{result.put("code",-1);result.put("msg","第三方登录失败");return result;}//请求成功,获取openId,access_tokenString access_token = (String)accessToken.get("access_token");String open_id = (String)accessToken.get("openid");/***通过openId查找数据库,如果查得到用户说明这个微信号*登陆过,直接返回这个用户的信息即可,否则就继续调用*另一个http请求获得用户的信息,然后将这个信息插入的自己的数据库*/UserWithBLOBs user = this.userService.getItemByOpenId(open_id);//没有微信登陆过,发送请求获取微信信息,再添加入库if (user == null) {UserWithBLOBs userInfo = WechatUtil.getUserInfo(open_id, access_token);//将上方的该用户插入到你的数据库且返回到前端}else {//user!=null用微信登陆过,直接将user放入返回即可//返回user信息给前端app}return result;

获得用户信息的方法,同样使用okhttp3

public static UserWithBLOBs getUserInfo(String openId,String accessToken){String url = new StringBuilder(WECHATUSERINFO).append("?openid=").append(openId).append("&access_token=").append(accessToken).toString();OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url(url).build();try {Response response = client.newCall(request).execute();String resultJson = response.body().string();/**正确的返回信息* {* "openid":"OPENID",* "nickname":"NICKNAME",* "sex":1,* "province":"PROVINCE",* "city":"CITY",* "country":"COUNTRY",* "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",* "privilege":[* "PRIVILEGE1",* "PRIVILEGE2"* ],* "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"* }*/Map parseObject = JSONObject.parseObject(resultJson, Map.class);String id = (String)parseObject.get("openid");if (id != null){//成功获取用户信息String nickname = (String)parseObject.get("nickname");Integer sex = (Integer)parseObject.get("sex");String province = (String)parseObject.get("province");String city = (String)parseObject.get("city");String headimgurl = (String)parseObject.get("headimgurl");UserWithBLOBs user = new UserWithBLOBs();user.setUserName(nickname);user.setOpenId(openId);user.setUserImg(headimgurl);//这里只选了三个字段,根据自己的业务选择更多的字段return user;}}catch (Exception e){e.printStackTrace();}return null;}
``

第三方微信登陆的后台实现相关推荐

  1. Android第三方登录签名错误,关于应用签名修改后第三方微信登陆不了的问题

    android员工离职后,今天重新生成了打包的key算是以防万一吧. 再次运行程序的时候发现第三方微信登陆不了. 第一步:打包程序并查看微信开放平台的应用签名是否正确. 使用新的签名打包程序 同时运行 ...

  2. uni-app关于小程序及app端第三方微信登陆问题(app端如何取得code值)

    加强安全保护,防止部分应用邀请新用户有奖励而产生的刷号行为,和后端配合,不从前端传openid,取得相应的code值给后端,后端再去拿到openid获取用户信息. 1.第三方微信登陆,主要是在获取co ...

  3. 微信登陆php后台,关于微信的登录以及PHP后台的实现

    一.前言 这篇文章所学到来自七月的小程序教学,同时我也是为了再次巩固下对微信的登录以及PHP后台生成的token的过程.以下是我的感受和心得. 二.准备 1.微信小程序的appID,appKey(ap ...

  4. 微信开放平台开发第三方授权登陆:微信扫码登录

    一.概述 根据需求,需要拥有第三方微信登录功能,并获取到用户信息. 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 二.前期准备工作 1.注册邮箱账号. 2.根 ...

  5. 如何实现自有App上的小程序第三方微信授权登陆?

    对于微信小程序来说,有 OpenID 或 UnionID 作为唯一标识,微信授权登陆小程序账号是很容易实现的,但对于其他应用上的小程序来说(如支付宝.百度等),打通该登陆方式是比较麻烦的. 之前在Fi ...

  6. 微信开放平台开发第三方授权登陆(二):PC网页端

    微信开放平台开发系列文章: 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三):Android客户端 微信开放平 ...

  7. 微信开放平台开发第三方授权登陆(三):Android客户端

    微信开放平台开发系列文章: 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三):Android客户端 微信开放平 ...

  8. 微信开放平台开发第三方授权登陆

    本文转载自网络,原文链接https://blog.csdn.net/qq_34190023/article/details/81133619 目录 一.前期准备流程 二.具体实现步骤 1.注册邮箱账号 ...

  9. 支付宝第三方授权登陆

    支付宝微信第三方软件的接入,也是越来越流行,最近也稍微研究了一下,支付宝和微信的登陆接入. 由于本人是做Java后台发开的,所以前端app集成没有涉及,研究的是网页和后台部分. 做第三方软件的​接入, ...

最新文章

  1. 在UIWindow上加类似于“回到顶部”的按钮
  2. 在Ubuntu上安装openResty #1
  3. 查询Linux系统最后重启时间的三个方法
  4. VC++2010开发数字图像系统1
  5. 7-10 365次方 (10 分)
  6. win7下桌面IE快捷方式无法删除解决方法
  7. 通过泰勒展开求自然常数e,R语言实现
  8. (附源码)php柘城农产品销售系统 毕业设计020832
  9. 解决联通宽带域名劫持
  10. 介绍理想工作计算机 英语作文,我的理想工作(My Ideal Job)
  11. javascript 取整,取余数
  12. MySQL充电_mysql语法充电
  13. photoshop去眼袋
  14. 用c语言写一个求和的程序,C语言实现两数求和
  15. 创业第一步:创业方程式
  16. Vue相关软件的安装
  17. 股票打板 知识 收集
  18. muduo---C++网络编程库
  19. 基于Spark实现电影点评系统用户行为分析—DataFrame篇(二)
  20. 新年祝福页面html,2017年新年祝福页面模版

热门文章

  1. Bugku-web writeup
  2. (sudo命令)linux中给普通用户添加root权限
  3. gentoo中文字体美化
  4. 蒋鑫:Git的特性及优点
  5. OpenCV-6-ANN_MLP神经网络模型训练
  6. 图文详解基于角色的权限控制模型RBAC
  7. python join() 和split()函数总结
  8. JavaScript系列学习笔记 —— DOM模型之Document对象
  9. 非正交多址接入(NOMA)
  10. mysql 5亿数据 查询_日均5亿查询量的京东订单中心,为什么舍MySQL用ES?