微信"锐捷查询"的实现.md

一、前言

在很久之前,大概小瓜刚刚火起来的那段时间,我就尝试性地想了解微信开发,可惜当时简单看了下,就没有深入了解而放弃了。前一段时间,正好稍微有空就想把前一段时间学习的python、webservice、爬虫等等技术联合在一起,再在range 的脚本基础上做了工程化的修改,从而形成了这个锐捷查询功能。
这个项目本身一开始准备在我的github上完全同步开源的,后来因为考试、网站备案、内测用户信息的保护以及部分代码需要完善,所以推迟开源日期。

二、技术实现

1. 总体架构


做过校园微信的童鞋大概都用的这个架构。用户的信息通过微信的服务器发送到开发者的独立服务器(或者类似sae这种开发者引擎),再通过开发者引擎调用部署在学校内服务器程序的接口,学校内网服务器使用类似爬虫的查询去锐捷服务器爬取返回相关的数据,从而完成整个功能的实现。

2. 对锐捷服务器数据的爬取

这里可以参考:
* http://range.pw
* https://github.com/pierre94/RuiJieHelper
总体上来说难点在于验证码识别,这个重点参考 http://blog.csdn.net/u013128262/article/details/49994851 。
还有一点就是锐捷服务器只允许内网机器访问从而防止外网用户的入侵,所以爬取程序选择在学生之友的服务器上运行。
这块是之前研究的老结果,不做重点介绍。

3. 将爬取查询改装成一个web service

这里我使用python的soaplib,将代码改装后发布出去。我遇到了一系列大坑!!!
3.1 soaplib本身会开启一个server,由于学友服务器的80端口已经被IIS占用,所以选择的端口是其他的端口,这时服务器本地测试服务调用时正常,但是我在我的pc上调用是服务调用,甚至无法访问那个端口。然后我疯狂地调防火墙、高级防火墙、安全狗等的配置,最后还是无功而返。(后来才知道,学校内网服务器一般申请端口开发需要向信息中心申请,然后信息中心在防火墙开启相关的配置)。
3.2 当时以为是soaplib那个库的bug,毕竟是一个”go away”的开源项目,出问题在所难免。于是我准备使用一个python web程序本地调用那个web service,再发布出去,调转一下。后来发现IIS和python web天生相克,google了一下都没有一个成熟的解决方案,从评论上来看都是bug不少。
3.3 我决定使用IIS进行反向代理soaplib开启的那个服务,发现问题很多。接着我开启了一个nginx,毕竟nginx与python天生相容,在用IIS反向代理nginx,从而实现服务发布。突然发现几乎没有任何一家公司会使用IIS反向代理nginx,一般成熟的解决方案都是nginx反向代理IIS,毕竟nginx天生就是优秀的代理服务器,这个方案自然放弃。
3.3 最后不得不使用python+php的方法。IIS新建一个php网站,php网站利用php soap相关的函数调用python soaplib的服务,再使用php的一个开源项目phprpc,将这个web service中转一下,发布到外网。

4. 微信后台基础开发

这个比较简单,会php、python、java或者其他语言的都可以在github找到最基本的微信demo,再看看微信开发者手册,找几本相关的书籍,基本1小时可以完成相关的基本工作。

三、其他工作

后续基本就是微信那块的延伸了:
* 做绑定相关的页面和后台逻辑
* 如何防止sql注入和xss
* 密码存储中加密算法的实现
* 利用sae的memcache实现微信会话状态
……

四、一些总结

4.1 为何选择在sae上部署微信后台程序
主要是因为sae相对来说安全性比较高,每个应用是独立的,而且权限控制的比较死。还有就是sae基本不需要运维成本,适合快速部署应用。

4.2 遇到的大坑
* 验证码识别
* IIS与python
* 内网服务器的端口限制

4.3 用户数据的安全保障
* 前端保护(主要是wx js接口)
* 后端防护(防sql、xss等)
* 独特的加密算法和密钥+sae的隔离和权限控制

4.4 如何使用服务
* 扫描二维码

* 回复锐捷、绑定
* 进入绑定页面
邀请码暂时是“bear2.cn”,如有改动咨询[email protected]

你可能感兴趣的:(微信"锐捷查询"的实现.md)