当前位置: 首页 > news >正文

长沙经开区建设局网站漳州专业网站建设公司

长沙经开区建设局网站,漳州专业网站建设公司,贵阳建网站公司,wordpress视频弹窗微信提供了两种方法都可以实现扫描登录。 一种是基于微信公众平台的扫码登录#xff0c;另一种是基于微信开放平台的扫码登录。 两者的区别: 微信开放平台需要企业认证才能注册#xff08;认证费用300元#xff0c;只需要认证1次#xff0c;后续不再需要进行缴费年审#… 微信提供了两种方法都可以实现扫描登录。 一种是基于微信公众平台的扫码登录另一种是基于微信开放平台的扫码登录。 两者的区别: 微信开放平台需要企业认证才能注册认证费用300元只需要认证1次后续不再需要进行缴费年审。 微信公众平台需要认证微信服务号认证费用300元/年才能进行扫码登录的开发。 本文主要介绍的是微信公众平台中的扫码登录。 微信公众号在线开发文档微信公众平台开发概述 | 微信开放文档 目录 一、应用场景 二、实现原理 三、需要用到的接口 1获取Access token 2生成带参数的二维码 3接收事件推送 四、核心部分代码 1获取access_token 2获取临时二维码 3微信推送事件方法 4request请求转换为Map方法 5检查微信登录状态 五、你可能会遇到的问题 1填写服务配置可能会遇到的问题 2本地正常服务器上无法调用 六、结语 一、应用场景 我在我的网站中实现了这个功能只需要使用微信扫描并关注公众号即可实现自动登录。 在线体验地址https://www.ewbang.com/community/login 首次扫码登录需要先进行关注公众号后续只需要使用微信扫码即可完成自动登录。 注你需要准备一个已经认证过的公众号或者测试号 二、实现原理 大致流程 1、用户访问微信快速登录页面生成带参数的二维码。 2、监听微信推送事件订阅或者扫码 3、用户扫码会有两种情况 ① 用户初次关注公众号订阅事件subscribe根据时间返回的OpenID进行查询如果系统中存在此用户直接调用系统登录方法否则创建默认账号并绑定OpenID再调用系统登录方法。 ② 用户之前关注过工作号扫码事件SCAN根据时间返回的OpenID进行查询如果系统中存在此用户直接调用系统登录方法否则创建默认账号并绑定OpenID再调用系统登录方法。 4、根据参数查询用户登录状态轮询登录成功之后重定向到指定页面。 运行流程图参考三、需要用到的接口 1获取Access token https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html 2生成带参数的二维码 https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html 3接收事件推送 https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html 这里只处理订阅事件和扫码事件即可。 四、核心部分代码 用到的部分依赖jar包 !-- hutool工具包 --dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.8.12/version/dependency!--生成二维码依赖包--dependencygroupIdcom.google.zxing/groupIdartifactIdcore/artifactIdversion3.3.3/version/dependency!--xml解析--dependencygroupIddom4j/groupIdartifactIddom4j/artifactIdversion1.6.1/version/dependency1获取access_token /*** 获取access_token** return*/public String createAccessToken() {String url https://api.weixin.qq.com/cgi-bin/token;MapString, Object data new HashMap();data.put(grant_type, client_credential);data.put(appid, wxConfig.getAppid());data.put(secret, wxConfig.getSecret());log.info(createAccessToken data:{}, data);String json HttpUtil.createGet(url).form(data).execute().body();String access_token (String) JSONUtil.getByPath(JSONUtil.parse(json), access_token);return access_token;} 2获取临时二维码 这里需要注意的是 action_nameQR_SCENE场景值ID临时二维码时为32位非0整型永久二维码时最大值为100000目前参数只支持1--100000 action_name:QR_STR_SCENE场景值ID字符串形式的ID字符串类型长度限制为1到64 /*** 创建临时二维码** return*/public String createTempQrCode(String access_token, String scene_str) {String url https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token access_token;MapString, Object data new HashMap();data.put(expire_seconds, 604800);data.put(action_name, QR_STR_SCENE);MapString, Object action_info new HashMap();MapString, Object scene new HashMap();scene.put(scene_str, scene_str);action_info.put(scene, scene);data.put(action_info, action_info);String json HttpUtil.createPost(url).header(Content-Type, application/json).body(JSONUtil.toJsonStr(data)).execute().body();System.out.println(json json);String qrcode (String) JSONUtil.getByPath(JSONUtil.parse(json), url);return qrcode;} 3微信推送事件方法 get请求接口主要用于签名验证。在配置开发者服务器配置(已启用)时会用到 post请求接口主要用于事件接收逻辑处理 /** param signature 微信加密签名signature结合了开发者填写的 token 参数和请求中的 timestamp 参数、nonce参数。* param timestamp 时间戳* param nonce 这是个随机数* param echostr 随机字符串验证成功后原样返回*/GetMapping(/wx/event)public void get(RequestParam(required false) String signature,RequestParam(required false) String timestamp,RequestParam(required false) String nonce,RequestParam(required false) String echostr,HttpServletResponse response) throws IOException {response.setCharacterEncoding(UTF-8);response.getWriter().write(echostr);response.getWriter().flush();response.getWriter().close();}//处理微信推送事件PostMapping(/wx/event)public void post(final HttpServletRequest request, HttpServletResponse response) {try {// 微信加密签名final String signature request.getParameter(signature);// 时间戳final String timestamp request.getParameter(timestamp);// 随机数final String nonce request.getParameter(nonce);// 随机字符串final String echostr request.getParameter(echostr);//将xml文件转成易处理的map(下方贴出)final MapString, String map parseXml(request);//开发者微信号final String toUserName map.get(ToUserName);//OpenIdfinal String fromUserName map.get(FromUserName);//消息创建时间 整型final String createTime map.get(CreateTime);//消息类型eventfinal String msgType map.get(MsgType);//事件类型final String event map.get(Event);String scene_str ;if (event.equals(msgType)) {if (event.equals(subscribe)) {final String ticket map.get(Ticket);if (ticket ! null) {scene_str map.get(EventKey).replace(qrscene_, );}}//注事件类型为SCAN即已关注else if (event.equals(SCAN)) {final String ticket map.get(Ticket);if (ticket ! null) {scene_str map.get(EventKey);}}}// 如果scene_str 不为空代表用户已经扫描并且关注了公众号if (StringUtils.isNotEmpty(scene_str)) {// 将微信公众号用户ID缓存到redis中标记用户已经扫码完成执行登录逻辑。redisCache.setCacheObject(scene_str, fromUserName, LoginStatus.SEESIOIN_TIME, TimeUnit.SECONDS);}response.getWriter().write();} catch (Exception e) {e.printStackTrace();}} 4request请求转换为Map方法 //将xml文件转成易处理的mappublic static MapString, String parseXml(final HttpServletRequest request) throws Exception {final MapString, String map new HashMapString, String();InputStream inputStream request.getInputStream();final SAXReader reader new SAXReader();final Document document reader.read(inputStream);final Element root document.getRootElement();final ListElement elementList (ListElement) root.elements();for (final Element e : elementList) {map.put(e.getName(), e.getText());}inputStream.close();inputStream null;return map;} 5检查微信登录状态 /*** 检查微信登录状态** return*/PostMapping(/wxLogin)ResponseBodypublic AjaxResult checkWxLoginStatus(HttpSession session) {String scene_str (String) session.getAttribute(scene_str);if (StringUtils.isEmpty(scene_str)) {return AjaxResult.custom(二维码已过期, 1001);}String loginStatus redisCache.getCacheObject(scene_str);if (LoginStatus.NOT_LOGIN.equals(loginStatus)) {return AjaxResult.custom(未登录, 1002);}//执行登录方法try {autoWxLogin(loginStatus);} catch (Exception e) {return AjaxResult.error(e.getMessage());}return AjaxResult.success(登录成功);} 五、你可能会遇到的问题 1填写服务配置可能会遇到的问题 如果配置的url不能访问会报token验证失败。在本地开发测试可以借助于网穿透工具Sunny-Ngrok内网转发内网穿透 - 国内内网映射服务器 2本地正常服务器上无法调用 有可能你在本地开发过程中是没有问题但是你将代码发布到服务器上的时候发现接口调用失败。有可能是你没有将公网服务器IP添加到白名单导致的。 多个白名单配置方法每行配置一个IP地址即可。 六、结语 本章教程到这里就结束了以上内容仅来自于博主的自我总结也许其中有总结不到为的地方希望能您够多多理解感谢你的阅读希望对你有一点点的帮助。
http://www.hkea.cn/news/14593567/

相关文章:

  • 番禺 大石网站建设互联网广告代理加盟
  • 网站建设 中企动力 石家庄个体户怎么做购物网站
  • 郑州网站建设 华数网站建设注册什么公司好
  • 毕设做网站和app留言板网页模板
  • 上海网站开发哪家好薇wordpress例
  • 网站里面的视频功能怎么做上海金山区建设局网站
  • e4a做网站软件专业的佛山网站设计
  • 9.9网站怎么做舞台灯光网站建设公司
  • 本地化吃喝玩乐平台网站可以做吗品牌建设需打持久战
  • 百度上怎么做网站国外虚拟主机wordpress
  • 大连建站平台优惠云服务器
  • 网赌网站国外空间给公司做网站费用
  • 成都犀牛网站建设公司大连网站开发公司排名
  • 网站对不同分辨率怎么样建设一个电影网站视频
  • 尚易企业邮箱登录入口网站seo排名优化软件
  • 和田网站建设外贸手机网站
  • 建设部网站在哪里报名考试网站建设福永附近网络公司
  • 电子商务网站功能设计与分析网站建设 模版
  • 涪城移动网站建设创业平台是什么意思
  • 郑州微网站网站建设结算方式
  • 天河手机建网站深圳南园网站建设
  • 漳州网站建设哪家最正规wordpress the date
  • 鼎豪网站建设django网站开发流程
  • 托管网站费用网站大全免黄
  • 古田网站建设鄂州网站制作企业
  • 网络营销网站网站建设公司后端招聘要求
  • 创造网站的软件网站模板在线预览
  • 宜春网站制作网站搜索引擎收录
  • 基木鱼建站教程网址生成短链接
  • 南通启益建设集团有限公司网站广州服务类拓客软件