TW实习日记:第五天

  今天可以说是非常忙的一天了,要再项目中实现微信相关的功能:授权登录以及扫码登录,还有就是自建应用的发送消息。首先功能代码其实在经过了几天的学习之后并没有很难,但是最让我难受的是在项目中去加代码,首先svn就弄了一会儿(其实是因为没有打开公司要求的文件加密软件导致无法check out...),然后项目的后台代码继承自公司自己写的一个后台框架,弄不明白机制,不知道怎么着手写,说白了就是项目代码里特别庞大,不知如何下手。并且项目的后台并没有用到什么spring之类的第三方框架,就一个类,1000行代码...后来终于明白,要写的接口就直接写成一个方法,然后已经封装好了request和response,可以直接拿来调用,好像也挺方便的。之后就开始着手写功能代码。

  授权登录其实很简单,照着官方文档(https://work.weixin.qq.com/api/doc)弄就好了,这里还是稍微总结一下步骤把:

  1. 首先按照文档的要求构造一个链接。这个链接可以放在前端的某个按钮里,作用是通过带上几个应用以及企业微信的唯一参数,相当于是对微信验明正身,告诉微信确实是本企业微信的应用需要获取Code。然后链接中会带上一个URL,这个URL是我们自己写的一个接口,专门用来接收和处理Code。这样,在微信确认过后,会回调这个接口,并且把Code参数用URL参数的形式传给接口。然后我们就可以愉快的用request.getParameter("code")来接收Code参数了。
  2. 然后我们需要对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

猜你喜欢

转载自www.cnblogs.com/WaterApe/p/practiceInTW_5.html