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 ...
随机推荐
- 关于日期的一些常用方法的封装——dates.js
针对自己在日常用到的一些日期方法,整理成一个js日期插件,插件定义了一个dates全局对象,继承了Date函数,相当于在Date函数上做了一些扩展. 这个插件会不断更新,所有我之后用到的关于日期的自定 ...
- 【noip 模拟赛curse,light,maze】 题解
2018.10.16 总结:考的不好 原因: 1.考的时候没状态,读题读不进去 2.考的时候不仔细,该得分没得到 T1:curse 1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到 ...
- Python 学习笔记(十三)Python函数(一)
函数基础 函数:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print().可以自己创建函数,这 ...
- iOS获取设备ip地址(OC版)
#import <SystemConfiguration/CaptiveNetwork.h> #import <ifaddrs.h> #import <arpa/inet ...
- 初识ExtJS 6----自学笔记(一)
一.使用环境 这一点写在前面,是为了方便大家在找资料的时候可以直接定位环境版本. ExtJS版本 6.2 中文官方网站提供版本,网站地址http://extjs.org.cn/node/793 开发 ...
- code#5 P2 棋子
棋子 时间限制: 1.0 秒 空间限制: 512 MB 相关文件: 题目目录 题目描述 棋盘从左到右被分割成 n(n≤1000) 个格子,从左到右编号为1,2,...,n.棋盘上有 m(m≤n) ...
- MVC和MVT的区别
首先,MVC和MVT是框架式不是设计模式. 框架与设计模式虽然相似,但却有着根本的不同.设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象:框架可以用代码表示,也能直接执 ...
- 解决 SSH 不能输入中文的问题
有些应用的进程名称可能是中文,还有一些应用创建的目录可以也会是中文,在 SSH 上使用 debugserver 没有办法输入中文的进程名称,也没办法在 SSH 上操作中文的目录,网上试了一些方法,不过 ...
- react脚手架环境搭建流程
1.安装与配置node.js:1.1软件下载地址:https://nodejs.org/en/,推荐下载.msi文件,其中npm已经集成在了node.js中.1.2 双击下载的.msi文件进行安装,安 ...
- 学习tp5的第三天(模型)
一.模型 1.定义基础模型 <?php namespace app\index\model; use think\Model; class User extends Model{ // 设置完整 ...