演示效果

一、准备材料

1、已认证的公众号(必须为服务号,订阅号没有该接口的权限)

2、一个网址,用于微信回调,推荐一个内网穿透的工具:内网穿透

3、Redis,用于存储token

4、一个SpringBoot项目

二、实现原理

1、使用微信公众号(服务号)的appId和appSecret生成一个token,这个token可以复用,但是有时效性

2、使用token当做参数调用微信api:qrcode/create创建一个二维码

3、使用微信扫码,用户订阅后,微信官方会回调我们的一个地址,将openId传过来

4、将openId保存下来,下次扫描时根据openId进行判断用户身份

三、注意点

1、只有服务号才有生成带参数的二维码接口权限

2、该接口每天100000次,适用于小规模用户登录

3、获取的AccessToken有时效性,可以利用redis进行保存

4、公众号开发有白名单限制,所以服务端在调用时需要配置白名单

四、实现步骤

公众号相关

1、登录公众号,获取appId和appKey

2、配置服务器回调地址

服务端相关

1、创建SpringBoot项目将复制下来的appId和appkey配置好,并加上一个redis

2、由于微信的回调值格式是XML格式,所以需要一个解析工具类

package com.zzj.qlogin.utils;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;/*** 微信返回值解码工具类*/
public class XmlUtil {/*** 简单解析xml* @param in* @return*/public static Map<String,Object> parseXML(InputStream in){Map<String,Object> map=new HashMap<>();try {SAXReader saxReader = new SAXReader();Document document = saxReader.read(in);Element root = document.getRootElement();Iterator iterator = root.elementIterator();while (iterator.hasNext()){Element element = (Element) iterator.next();map.put(element.getName(),element.getStringValue());}} catch (DocumentException e) {e.printStackTrace();}return map;}}

3、回调接口,此处需要区分两个不同的事件:订阅和扫码,简单的处理逻辑如下

    /*** 接收微信推送事件* @param request* @return*/@PostMapping("/handleWxCheckSignature")@ResponseBodypublic String handleWxEvent(HttpServletRequest request){try {InputStream inputStream = request.getInputStream();Map<String, Object> map = XmlUtil.parseXML(inputStream);String userOpenId = (String) map.get("FromUserName");String event = (String) map.get("Event");if("subscribe".equals(event)){// TODO:获取openid判断用户是否存在,不存在则获取新增用户,自己的业务//自己生成的二维码不管是关注还是扫码都能取到ticket凭证String ticket = (String) map.get("Ticket");redisCacheManager.set(ticket,ticket,10*60);logger.info("用户关注:{}",userOpenId);}else if("SCAN".equals(event)){//自己生成的二维码不管是关注还是扫码都能取到ticket凭证String ticket = (String) map.get("Ticket");redisCacheManager.set(ticket,ticket,10*60);logger.info("用户扫码:{}",userOpenId);}logger.info("接收参数:{}",map);} catch (IOException e) {e.printStackTrace();}return "success";}

微信小程序入门5-微信公众号扫码登录PC端网页相关推荐

  1. 微信小程序入门7-微信公众号设置IP白名单

    一.为什么要配置IP白名单 此处IP为服务器对公网IP: 在IP白名单内的IP地址作为来源,获取access_token接口才可调用成功. 而想要调用公众号相关API,就必须获取access_toke ...

  2. 微信小程序入门10-微信公众号token验证失败

    为了更好的运营公众号,微信官方支持用户自定义实现公众号功能,这里第一步就是配置服务器回调域名,如下图: 如果是SpringBoot项目,我们会写一个如下的Controller类 import lomb ...

  3. 微信小程序生态13-微信公众号自定义菜单、个性化菜单配置

    文章导航 微信小程序生态1-初识小程序 微信小程序生态2-创建一个微信小程序 微信小程序生态3-微信小程序登录流程设计 微信小程序生态4-扫普通二维码进入小程序.打开短链接进入小程序 微信小程序生态5 ...

  4. 微信小程序获取并展示公众号推文

    微信小程序获取并展示公众号推文 获取公众号access_token(开发环境) IP白名单设置 获取access_token 小程序前端展示 素材导入云数据库 云函数读取展示 注:笔者是小程序菜鸟,代 ...

  5. 手把手教程用Java实现微信公众号扫码登录功能

    文章目录 前言 一.环境准备 二.使用步骤 1. 使用微信工具包 2. 创建数据表 3. 登录页面代码逻辑 4. 验证微信公众号登录 总结 前言 微信现今是我们必不可少的社交工具了,围绕微信这个生态实 ...

  6. 实现支持多公众号的微信公众号扫码登录服务

    实现支持多公众号的微信公众号扫码登录服务 最近,在公司的通行证项目开发过程中,需求方提出了支持微信公众号扫码登录,并且可以支持多公众号接入的需求.研究了一下微信公众号的开发文档,实现微信公众号扫码登录 ...

  7. 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决

    目录 问题: 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决 1.上传时没有勾选保护 2.请求的域名没有配置 问题: 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决 1.上传时没有勾选保护 ...

  8. 【vue+pc端】实现微信扫码登录pc端,后端通过微信开发平台,前端生成二维码(仅供参考)

    这两周的需求是通过微信扫码登录pc端,刚定下需求原型图还没出来前,后端特意发了微信开发平台的链接给我,关于如何生成二维码的文档,以及扫码跳转后如何传code给他. 请戳这里准备工作|微信开放文档 我最 ...

  9. 微信小程序内跳转公众号

    可使用微信小程序官方提供的official-account 组件来完成,官方文档 Tips: 1. 使用组件前,需前往小程序后台,在"设置"->"关注公众号&quo ...

  10. 微信小程序 official-account组件 关注公众号

    昨天微信小程序发布了 official-account 相关组件,从意思上来讲可以通过小程序直接点击标签关注对应的公众号今天一上班就试了一下. 文档不长,但是对于我这种看文档能力较差的人还是有点吃力的 ...

最新文章

  1. ATS程序功能和使用方法详解
  2. python基础知识~ 函数详解2
  3. Xamarin.iOS提供没有匹配的配置文件
  4. linux运维、架构之路-MySQL(一)
  5. SQL Server温故系列(1):SQL 数据操作 CRUD 之增删改合
  6. Azkaban报错:Missing required property ‘azkaban.native.lib’
  7. KMP算法 java版本
  8. 英特尔Nehalem微架构三级缓存原理学习
  9. 统一配置中心的设计方案
  10. 喜庆传统中国红色纹理背景,吉庆节日必备!
  11. 嘿!你的“苹果”已经被盯上啦
  12. cmd输入pip报错_安装虚拟环境+pip安装XXX包的常见操作与报错解决
  13. Windows驱动——利用WinDriver开发PCI设备驱动程序
  14. pdf怎么打开上次看到的地方_ppt如何转pdf?俩种方法轻松搞定
  15. RAC性能分析 - gc buffer busy acquire 等待事件
  16. 服务器性能低下时正确的处理方法
  17. 利用中间结果减少计算量
  18. 解决npm 下载速度慢的问题
  19. UE4虚幻引擎更改项目缓存路径
  20. 网站全国公安机关互联网站安全服务平台备案流程

热门文章

  1. 金鱼的养殖知识大全(一)
  2. 笔记-Tukey Method发现outliers(离群点)
  3. 图灵机器人Web API
  4. 告别乐盲,AI 通过歌词生成旋律【智能快讯】
  5. tomcat设置一级域名、二级域名访问指定项目
  6. SQL Server添加字段注释表注释comments,Oracle与Sql Server添加注释语法区别
  7. 测试手机端APP时,模拟网速慢的情况
  8. Word文档快速插入分割线(虚线、实线、波浪线)
  9. 基于nacos搭建springboot 抽取axios
  10. RS485MODBUS转PROFINET网关配置-科隆OPTIFLUX7000MODBUS通信协议电磁流量计接入西门子PLC S7-1500PROFINET以太网通讯网络配置方法