TW实习日记:第五天

时间:2022-08-23 20:30:17

  今天可以说是非常忙的一天了,要再项目中实现微信相关的功能:授权登录以及扫码登录,还有就是自建应用的发送消息。首先功能代码其实在经过了几天的学习之后并没有很难,但是最让我难受的是在项目中去加代码,首先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和手机号这三个字段。那么,问题来了,在这个功能的流程里,我始终无法想明白一点,如图:

TW实习日记:第五天

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

TW实习日记:第五天

  在这个流程图的帮助下,我最后放弃了直接返回JSON数据给前端的念头,采用了经常能见到的方案也就是后台带着JSON数据,重定向至前端页面,前端在页面加载时判断是否有登录成功的cookie来判断是否登录成功,成功则再利用cookie中的信息再请求后台拿到用户数据显示在主页。这个流程相对来讲清晰直观,免去了刚才我思考请求来源和响应去向的麻烦,遂最后和前端同事提出了这个方案。最后,目前代码是写完了,还没有测试,因为微信的回调域名不接受IP地址...恰好我司的测试服务器没有域名,使用的是IP地址直接访问,尴尬hhh

  虽然周五当天没有完成扫码登录和发送信息的需求,但我相信也很快了,毕竟自己之前已经做出来Demo了,后续也会分享出来。最后总结一下这一周,我想说的是,出来工作真的会接触到很多学校里接触不到的东西。可能因为我在学校里划水了两年,很多项目中的工具其实并没怎么用到,比如团队代码管理的工具svn和git我就没有用过,项目的打包,连接远程服务器(这个有点丢人...)等工程相关的事情,我都很不熟悉。希望在未来的日子里可以尽快熟悉这些东西,毕竟程序员也不是只写代码就好,当我能写出业务逻辑代码却对工程相关内容一窍不通时真的也挺尴尬的,尤其这些东西对于同事和组长都是很简单的东西,我说我不会确实很尴尬哈哈。我知道我现在很水,所以博客名也起的是水猿(很水的程序员),但是我心里还是有一些小小的理想的,希望未来能够更进一步,愿自己和大家都能保持一颗学习的心!

Terence Xie

2018.7.22 周日 16:05

TW实习日记:第五天的更多相关文章

  1. TW实习日记:前三天

    今天是2018年7月20号,周五.从周一开始实习到现在,终于想起来要写日记这种东西了,可以记录一下自己这一天所学所做所知也是蛮不错的.先简单总结一下自己的大学生活吧,算是多姿多彩,体验了很多东西.在大 ...

  2. TW实习日记:第四天

    第四天 早上第一件事就是和组长说前一天的需求的事,简而言之就是两个导航栏不属于一个标签内,自定义导航栏属于<body>下的<header>,微信顶部的则是<head&gt ...

  3. TW实习日记:第九天

    这两天有点忙,要改前端网页和加需求上去.所以昨天说的Vue缓存机制也没看,所以打算现在列个挖了的坑的清单: Vue缓存机制.生命周期和钩子函数 使用项目组自用组件来重写静态页面 SSM框架搭建.整合流 ...

  4. TW实习日记:第31-32天

    不知不觉的,实习的净工作天数,已经都超过一个月了.因为对工作内容不是很满意,所以打算月底离职,也不知道是公司太缺人还是我真的能干活,领导竟然三番两次找我让我再考虑...明天又要找我了,哎...随机应变 ...

  5. TW实习日记:第十天

    今天任务很简单,就是出品项目的时间轴显示页面和动态路由设置.其实时间轴页面很快就做完了,在做完处理完数据之后,然而有很多细节需要打磨,这就又考验了我面向搜索引擎编程的能力,根据需求百度了很多css的样 ...

  6. TW实习日记:第八天

    今天早上主要是接着做昨天的微信端网页预览附件,听同事说当打包代码放入服务器上后,就不存在跨域问题了,也就懒得自己写接口了,那么就希望自己能一次过吧...结果写着写着,发现开发文档中关于预览文件的方法, ...

  7. TW实习日记:第七天

    今天早上,将项目的两个企业微信接口:登录和应用消息发送接口,做了最后的收尾工作,把目前我能解决的问题算是基本都解决了.早上还开了一个会,大意是组长封装了许多组件叫我们使用,在不断的使用中打磨组件的可用 ...

  8. TW实习日记:第六天

    今日的一整天都是在开发微信相关的接口,因为项目的系统是嵌在企业微信中,所以不可避免的要产生微信UserID和企业系统ID的匹配关系,那么就需要用手机号或是邮箱这种两边都存在的唯一参数进行匹配.然后再将 ...

  9. TW实习日记:第28天

    同前两天一样,等接口,开发,调试接口.重复地做着低级代码得搬运工作,确实挺没意思的.怪不得有些人一直说写低级代码很无聊,没有创造性和成就感.31号准备溜了,还是好好复习准备秋招吧. 挖坑清单: Vue ...

随机推荐

  1. CDQ分治

    要求可以计算前面的操作对后面询问的贡献 BZOJ1176 #include <cstdio> #include <algorithm> using namespace std; ...

  2. Android的setVisibility&lpar;View&period;GONE&rpar;无效的问题及原因分析(转)

    出现这种情况很可能是因为设置了animation,并且调用了setFillAfter(true),这就会导致setVisibility无效,只需要调用一下clearAnimation()方法或者去掉s ...

  3. mysql 索引建立

    如何建立mysql索引? 创建索引原则 1.左前缀原则 : mysql索引匹配会从右匹配,到遇到( >  < between like)终止.如 我们建立索引(a,b,c,d), a = ...

  4. make it clear how to use const in C&plus;&plus;

    1.first of all,take a lookup on the left side of keyword const.If there is something(type or pointer ...

  5. Nginx阅读笔记&lpar;四&rpar;之root和alias

    nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了下,方便大家在应用过程中,快速响应.root与alias主要区别在于nginx如何解释location后面的uri ...

  6. Bean validation

    公司测试非常严格,要求我们对每个参数的长度进行校验,提了一个参数长度校验的单,然后我们老大就把我们的代码全部打回去了.... 一个bean类中往往有超多变量,如果一个个写if else,够呛,而且圈复 ...

  7. Web开发——JavaScript基础(JSON教程)

    参考: JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小.更快,更 ...

  8. 弱网测试—Network-Emulator-Toolkit工具

    参考别人网址:http://blog.csdn.net/no1mwb/article/details/53638681 弱网测试,属于健壮性测试:怎么样去做弱网测试呢? 一.安装弱网测试工具-Netw ...

  9. Cross origin requests are only supported for protocol schemes&colon; http&comma; data&comma; chrome&comma; chrome-extension&comma; https&period;

    转自:https://www.zhihu.com/question/20948649?sort=created 我最近也遇到这个问题了,用传统的快捷方式加参数并没有用,不知道是不是和chrome版本有 ...

  10. js数组去重与性能分析(时间复杂度很重要)

    随着js的深入和实际项目对性能的要求,算法的简单实现已经不能满足需要,在不同的应用场景下,时间复杂度很重要. 首先是创建数组与性能处理函数: // 保证时间差的明显程度,创建不同量级的数组,size为 ...