TW实习日记:第五天
今天可以说是非常忙的一天了,要再项目中实现微信相关的功能:授权登录以及扫码登录,还有就是自建应用的发送消息。首先功能代码其实在经过了几天的学习之后并没有很难,但是最让我难受的是在项目中去加代码,首先svn就弄了一会儿(其实是因为没有打开公司要求的文件加密软件导致无法check out...),然后项目的后台代码继承自公司自己写的一个后台框架,弄不明白机制,不知道怎么着手写,说白了就是项目代码里特别庞大,不知如何下手。并且项目的后台并没有用到什么spring之类的第三方框架,就一个类,1000行代码...后来终于明白,要写的接口就直接写成一个方法,然后已经封装好了request和response,可以直接拿来调用,好像也挺方便的。之后就开始着手写功能代码。
授权登录其实很简单,照着官方文档(https://work.weixin.qq.com/api/doc)弄就好了,这里还是稍微总结一下步骤把:
- 首先按照文档的要求构造一个链接。这个链接可以放在前端的某个按钮里,作用是通过带上几个应用以及企业微信的唯一参数,相当于是对微信验明正身,告诉微信确实是本企业微信的应用需要获取Code。然后链接中会带上一个URL,这个URL是我们自己写的一个接口,专门用来接收和处理Code。这样,在微信确认过后,会回调这个接口,并且把Code参数用URL参数的形式传给接口。然后我们就可以愉快的用request.getParameter("code")来接收Code参数了。
- 然后我们需要对Code进行处理,才能获得用户的唯一UserId。想要获得UserId不光需要用户本次点击链接产生的Code,还需要带上Access_Token参数,这个详见官方文档,不详细说明了。然后调用微信的接口,如果合法调用,就会返回用户的UserId。然后我们就可以通过UserId获得用户得信息了。因为这次的项目开发的是自建应用,所以scpoe我用的是snsapi_base,也就是最低级别,只能获得UserId,因为自建应用可以直接使用UserId获取更多信息,所以就采用了这种静默授权的方式,不需用户点击授权即可拿到信息。如果是开发第三方应用的话,需要选择别的scope才能获得更多信息。
写完了功能代码,就迎来了我这一天最纠结的问题了。那就是在前后端分离的情况下,我如何向前端返回我的登录匹配与否的信息。首先交代一下背景,项目原先的登录方式就是前端获取用户输入信息传给后台接口进行匹配,后台返回JSON,包括是否登录成功,以及一些相关字段,如果登陆失败相关字段为空。并且,项目的后台是没有存放UserId的,这也就是说不能通过匹配UserId的方式进行验证,只能通过唯一手机号来进行验证了,所以我在最后还需要做一个表,用来存放UserId、Id和手机号这三个字段。那么,问题来了,在这个功能的流程里,我始终无法想明白一点,如图:

就是在以上这个流程中,后台到底如何向前端返回信息?因为中间前端访问的是构造的微信链接,而并不是请求后台的接口,并且还有一个微信回调后台接口的操作,所以处理code的接口如果直接response.setEntity来返回JSON的话,那这个response是发送给谁?因为对Http请求了解的真的不够深,想了很久也无法想清楚其中的请求关系。最后在网上看到了一个流程图(原文链接:https://segmentfault.com/a/1190000010753247)

在这个流程图的帮助下,我最后放弃了直接返回JSON数据给前端的念头,采用了经常能见到的方案也就是后台带着JSON数据,重定向至前端页面,前端在页面加载时判断是否有登录成功的cookie来判断是否登录成功,成功则再利用cookie中的信息再请求后台拿到用户数据显示在主页。这个流程相对来讲清晰直观,免去了刚才我思考请求来源和响应去向的麻烦,遂最后和前端同事提出了这个方案。最后,目前代码是写完了,还没有测试,因为微信的回调域名不接受IP地址...恰好我司的测试服务器没有域名,使用的是IP地址直接访问,尴尬hhh
虽然周五当天没有完成扫码登录和发送信息的需求,但我相信也很快了,毕竟自己之前已经做出来Demo了,后续也会分享出来。最后总结一下这一周,我想说的是,出来工作真的会接触到很多学校里接触不到的东西。可能因为我在学校里划水了两年,很多项目中的工具其实并没怎么用到,比如团队代码管理的工具svn和git我就没有用过,项目的打包,连接远程服务器(这个有点丢人...)等工程相关的事情,我都很不熟悉。希望在未来的日子里可以尽快熟悉这些东西,毕竟程序员也不是只写代码就好,当我能写出业务逻辑代码却对工程相关内容一窍不通时真的也挺尴尬的,尤其这些东西对于同事和组长都是很简单的东西,我说我不会确实很尴尬哈哈。我知道我现在很水,所以博客名也起的是水猿(很水的程序员),但是我心里还是有一些小小的理想的,希望未来能够更进一步,愿自己和大家都能保持一颗学习的心!
Terence Xie
2018.7.22 周日 16:05
TW实习日记:第五天的更多相关文章
- TW实习日记:前三天
今天是2018年7月20号,周五.从周一开始实习到现在,终于想起来要写日记这种东西了,可以记录一下自己这一天所学所做所知也是蛮不错的.先简单总结一下自己的大学生活吧,算是多姿多彩,体验了很多东西.在大 ...
- TW实习日记:第四天
第四天 早上第一件事就是和组长说前一天的需求的事,简而言之就是两个导航栏不属于一个标签内,自定义导航栏属于<body>下的<header>,微信顶部的则是<head> ...
- TW实习日记:第九天
这两天有点忙,要改前端网页和加需求上去.所以昨天说的Vue缓存机制也没看,所以打算现在列个挖了的坑的清单: Vue缓存机制.生命周期和钩子函数 使用项目组自用组件来重写静态页面 SSM框架搭建.整合流 ...
- TW实习日记:第31-32天
不知不觉的,实习的净工作天数,已经都超过一个月了.因为对工作内容不是很满意,所以打算月底离职,也不知道是公司太缺人还是我真的能干活,领导竟然三番两次找我让我再考虑...明天又要找我了,哎...随机应变 ...
- TW实习日记:第十天
今天任务很简单,就是出品项目的时间轴显示页面和动态路由设置.其实时间轴页面很快就做完了,在做完处理完数据之后,然而有很多细节需要打磨,这就又考验了我面向搜索引擎编程的能力,根据需求百度了很多css的样 ...
- TW实习日记:第八天
今天早上主要是接着做昨天的微信端网页预览附件,听同事说当打包代码放入服务器上后,就不存在跨域问题了,也就懒得自己写接口了,那么就希望自己能一次过吧...结果写着写着,发现开发文档中关于预览文件的方法, ...
- TW实习日记:第七天
今天早上,将项目的两个企业微信接口:登录和应用消息发送接口,做了最后的收尾工作,把目前我能解决的问题算是基本都解决了.早上还开了一个会,大意是组长封装了许多组件叫我们使用,在不断的使用中打磨组件的可用 ...
- TW实习日记:第六天
今日的一整天都是在开发微信相关的接口,因为项目的系统是嵌在企业微信中,所以不可避免的要产生微信UserID和企业系统ID的匹配关系,那么就需要用手机号或是邮箱这种两边都存在的唯一参数进行匹配.然后再将 ...
- TW实习日记:第28天
同前两天一样,等接口,开发,调试接口.重复地做着低级代码得搬运工作,确实挺没意思的.怪不得有些人一直说写低级代码很无聊,没有创造性和成就感.31号准备溜了,还是好好复习准备秋招吧. 挖坑清单: Vue ...
随机推荐
- cesium.js 设置缩放最大最小限制
viewer.scene.screenSpaceCameraController.minimumZoomDistance = 1200;viewer.scene.screenSpaceCameraCo ...
- UGA,PGA
tom认为UGA不包含 sort工作区,所以下面的图都是错误的 The UGA is, in effect, your sessions state. It is memory that your ...
- Web | ES6的异步编程
js对于异步操作有三个解决方案,分别是Promise,generator,async/await. 下面分别说说这三种方案的一些基础. Promise promise对象用于表示一个异步操作的最终状态 ...
- Runtime - ② - NSObject类
首先,我们都知道NSObject是大多数类的根类,但是,这个类的是怎么实现的呢?我们可以去下载开源的Runtime源码,探究下NSObject类的实现. 1. NSObject.h文件 我们可以直接使 ...
- S2-01
类: 类是对象的虚例,类是对象的集合,类是对象的模板. 对象是类的实例.(可以 0到多个.) .NET Framwork vs版本 .NET Framwork 1.0 /1.1 vs2003 .NET ...
- Framwork框架日志与配置工具的使用
一.使用设置: 头文件的添加: ..\Framwork\Include\pthread_64; ..\Framwork\CommFramwork\include; ..\Framwork\Utilit ...
- TinyMCE插件:RESPONSIVE filemanager 9 安装与配置
RESPONSIVE filemanager 功能: 文件上传 文件下载 重命名文件 删除文件 新建文件夹 为每个用户创建子目录 上传文件效果图: 浏览文件效果图: 文件说明: filemanager ...
- Java 多线程 volitile 和 atomic
Java 多线程 volitile 和 atomic volitile关键字 public class MTester { public static class TestKey{ int x = 0 ...
- Office 365部分安装及同时安装Visio的方法
From MWeb Win版本的Office 365安装包默认安装所有组件,没有选择的页面,在安装Office 365后再安装下载的Visio 2016专业版时,会显示计算机上已经安装了即插即用Off ...
- Testing for diversifying selection for two clades with a background clade
在利用branch-site检测趋同进化的时候 .可以将各个趋同进化枝分别进行检测,分析的时候不去除某一趋同枝系 .在分析的时候,需要去除其他趋同枝系的影响 I have sequences of a ...