声明:这边所谓的第三方登录,不是通过网页授权的方式,而是利用生成带参数的二维码,将微信号和平台账号绑定实现。如果你要做的是授权登录,请查看

https://blog.csdn.net/wrongyao/article/details/80229986

微信第三方登录功能实现,大致分为两个步骤,绑定和登录,下面先来了解一下绑定。

1、思路概括

注:先用平台用户的userid生成二维码,(详见生成带参数的二维码的帖子),微信扫码以后,需要关注微信公众号,首先请求会先到微信服务器,然后微信服务器会向我服务器推送消息,消息中有userid和openid(这个公众号下这个微信的唯一标识),然后我们可以将这个userid和openid存到关联表中,绑定成功。

1、利用0050的帖子我们可以生成带有userid的二维码,这边只附上简要代码

    @Overridepublic String getBindQrCode() {String sessionId = request.getRequestedSessionId();//获取当前登录的用户,注意要用sessionid做区分String loginJsonStr = redisService.get("loginJson&" + sessionId);StringBuffer sceneStr = new StringBuffer("bind&");if (StringUtils.isNotEmpty(loginJsonStr)) {LoginJson loginJson = GsonUtil.fromJson(loginJsonStr, LoginJson.class);SysUser sysUser = loginJson.getSysUser();sceneStr.append(sysUser.getSysUserId());}return getQcode(sceneStr.toString());}/*** 获取二维码** @param sceneStr* @return*/private String getQcode(String sceneStr) {String getTicketUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + AccessToken.ACCESS_TOKEN + "";// 临时整形参数值String ticketParam = "{\"expire_seconds\": 120, \"action_name\": \"QR_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": \"" + sceneStr + "\"}}}";String ticketStr = HttpRequest.post(getTicketUrl, ticketParam, null, Constant.RequestType.APPLICATION_JSON);System.out.println(ticketStr);Map<String, String> ticketMap = GsonUtil.fromJson(ticketStr, Map.class);String ticket = ticketMap.get("ticket");return "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + ticket;}

大致步骤:获取当前登录用户userid,用这个userid生成 scene_str

注意点:这边用的是redis做的缓存,不要用session,也可以用别的nosql数据库,具体原因会在下篇帖子登录的时候做详细说明。

2、将上述生成的二维码在合适的地方展示即可。注意是在登录之后。

3、扫码推送

扫码微信服务器向我服务器推送的报文

Ticket||gQHO7jwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyaXN0X2hHSlJmM2sxT1BfRXhyY2cAAgQ7P_hbAwR4AAAA
CreateTime||1541947203
EventKey||bind&1
Event||SCAN
ToUserName||gh_b348cb411e6c
FromUserName||oLXXD1ElSeoNELQP1EhUkvlRF9SM
MsgType||event

eventkey就是我们之前放入的scene_str

4、绑定

   @Override@Transactionalpublic String userBindWechat(Map<String, String> requestMap, long sysUserId) {String openId = requestMap.get("FromUserName");List<Condition> conditions = new ArrayList<>();conditions.add(new Condition(Connector.and, "open_id", Operator.equal, openId));List<SysWechat> sysWechats = sysWechatMapper.select(conditions, SysWechat.class);SysWechat sysWechat = sysWechats.get(0);long sysWechatId = sysWechat.getSysWechatId();conditions.clear();// 查询当前微信号是否已经绑定conditions.add(new Condition(Connector.and, "sys_wechat_id", Operator.equal, sysWechatId));List<SysUserWechat> sysUserWechats = sysUserWechatMapper.select(conditions, SysUserWechat.class);if (null != sysUserWechats && sysUserWechats.size() > 0) {return WechatUtil.replyTextMessage(requestMap.get("FromUserName"), requestMap.get("ToUserName"), wechatMessage.getWechatHaveBindedReplyMessage());}SysUserWechat sysUserWechat = new SysUserWechat();sysUserWechat.setSysUserId(sysUserId);sysUserWechat.setSysWechatId(sysWechatId);sysUserWechatMapper.insert(sysUserWechat);return WechatUtil.replyTextMessage(requestMap.get("FromUserName"), requestMap.get("ToUserName"), wechatMessage.getBindSuccessReplyMessage());}

大致步骤:根据微信服务器向我服务器推送的报文,获取userid,openid将这两个信息,关联起来即为绑定成功。

上述就是扫码绑定的大致思路,如有不妥的地方,欢迎大家斧正,谢谢!

wechat-0051,微信公众号,第三方登录—扫码绑定相关推荐

  1. JS_微信公众号开发调用扫码支付功能

    需要在公众号里面切入扫码功能 前端代码: <!DOCTYPE html> <html> <head lang="en"><meta cha ...

  2. 微信公众号第三方登录window.open打开新窗口和url携带http网址参数base64转码传参

    原文链接:https://dsx2016.com/?p=1109 公众号:大师兄2016 需求场景 微信第三台平台只能绑定一个域名. 当从另一个域名下的系统进行绑定操作时,只能以打开指定域名的方式进行 ...

  3. 微信公众号开发之扫码支付

    此项目已开源欢迎Start.PR.发起Issues一起讨论交流共同进步 https://github.com/Javen205/IJPay http://git.oschina.net/javen20 ...

  4. 关于微信公众号开发中扫码关注和关注之后继续扫码的不同点

    2019独角兽企业重金招聘Python工程师标准>>> 开发微信商城,当遇到需要绑定上下级关系的时候,会通过扫码的方式关注公众号,但是如果不想做这个人的下级,后台添加解绑功能,继续扫 ...

  5. 微信公众号调起扫码功能

    偶然接触到了公众号开发.说需要调起微信扫一扫.便查看了公众号开发文档 看完文档后,发现js是相对简单的.唯一的难点是在java后台编写的秘钥生成代码. 也就是说.首先需要获取access_token, ...

  6. 微信公众号拉取扫码功能

    点击扫码按钮拉取微信扫码 // 扫码添加设备goAddEquipment() {const wx = window.wxlet _this = this// wx.ready(function() { ...

  7. 以后的blog将转移到微信公众号,请扫码关注谢谢!

  8. 微信扫码登录,微信公众号生成二维码,关注登录nodejs+vue

    微信公众号生成二维码,关注后扫码登录 技术栈为nodejs+vue 有不懂的可以加我微信yizheng369 1.效果 初始: 关注后: 2.源码 此项目为前后端分离项目,前后端代码都在这个仓库里, ...

  9. php模拟微信公众号服务器,GitHub - Lin07ux/wechat-third-server: 使用 ThinkPHP、Vue 搭建一个带有后台的微信公众号第三方服务器的基础模板...

    微信公众号第三方服务器 该项目用于实现一个最基本的微信公众号第三方服务器开发的模板. 基于: ThinkPHP v3.2.3 Vue v2.2.0 Vue-resource v1.0.3 功能 微信用 ...

最新文章

  1. 使用JavaScript实现一个简单的编译器
  2. STM32 基础系列教程 30 - 文件系统
  3. JS 获取中英字符串字节长度
  4. 卷积神经网络mnist手写数字识别代码_搭建经典LeNet5 CNN卷积神经网络对Mnist手写数字数据识别实例与注释讲解,准确率达到97%...
  5. 努力学习 HTML5 (3)—— 改造传统的 HTML 页面
  6. 深入浅出 Spring 架构设计
  7. 动态规划uva1347
  8. 报表 labview_【LabVIEW懒人系列教程小白入门】1.3LabVIEW数据类型
  9. JSP基础(5)-JSP标准动作
  10. 如何在 macOS 中批量重命名文件?
  11. 《Android游戏开发详解》一3.7 里程碑
  12. Mysql三种备份,mysqdump,xtrabackup工具,基于lvm-snapshot快照备份等。
  13. 概率论与数理统计(陈希孺)笔记2.1
  14. FX2N-2DA模拟量输出模块简述
  15. matlab给元素排序,matlab排序及元素统计
  16. 【盘点】电影中八大邪恶的超级计算机
  17. C语言练习-[1005]温度转换
  18. iis服务部署后根目录打不开txt
  19. CSS兼容性技巧整理--从IE6-IE9 火狐谷歌浏览器兼容
  20. ltv价值 应用_手游LTV(用户终生价值)计算公式

热门文章

  1. 稀疏表达和压缩感知的一些对比
  2. 安装YApi 接口管理平台
  3. T40之小黑不能充电记
  4. 在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数
  5. cpu占用高 mongo_记一次 MongoDB 占用 CPU 过高问题的排查
  6. 三维模型(X,Y,Z)坐标,UV坐标
  7. Android模仿新浪微博(自定义ListView下拉刷新)
  8. 如何给Mac OS 更新到指定版本系统
  9. python数字图像处理以及绘图
  10. HBaseCon Asia 2019 Track 3 概要回顾