企业微信小白出坑记
花了两周的时间学习研究企业微信,今天终于把前后端我要用到的几个主要API都调通了。中间采坑无数,所以想做个小结,希望后续象我一样的newbie能少走一些弯路少踩一些坑。 最重要的一句话 反思这半个月的经历,最强烈的感受就是一定要保证能看到系统的反馈,也就是后台日志。因为只要你看到了日志中提示的信息,再到腾讯的开放社区(developers.weixin.qq.com)搜索,一般都会很快找到答案。 最开始我是用Chrome的开发者工具做调试,但不知道企业微信的jweixin-1.2.0.js包在Chrome中是不输出info日志的。所以有些API我明明调用了,但前台页面没有任何反应,也看不到后台日志输出,百思不得其解。后来换成微信开发者工具,一下子看到那么多提示信息,才恍然大悟:)可是没多久,我又在微信开发者工具中遇到了类似的问题:页面没反应,后台没日志。因为有了前面的经验,我尝试着换到Chrome中调试,终于再次看到了日志输出。。。但这还是不够,有些前端接口比如openUserProfile无论是Chrome还是微信开发者工具都不支持调试,只能用企业微信的客户端进行调试,这时候如果想看日志怎么办呢?经过一番搜索,原来还有一个神器vconsole!有了她,就可以在企业微信客户端看到输出的日志啦。这个工具的具体用法我就不多说了,网上一搜一大把——这真是一个最好的时代,你只需知道一个关键词,就可以打开一个新世界:) 至此,如果只能对入门的初学者说一句话,我想说: 当你看不到前台的反应也看不到后台日志的时候,记得切换调试工具! 框架选型 这里谈一谈企业微信前中后台的选型问题。在着手准备开发之前,我对当前主流的开发框架做了一番了解,最终选型如下 1、 前端是Vue:目前非常流行的优秀前端框架,又是中国人写的,官网上全套中文的文档、教程、书籍,非常方便。尤其是全中文的视频教程非常实用。 2、 后台是Java:用SpringBoot写微服务,Docker完成容器化部署,Nginx做负载均衡和反向代理。理由特别简单:我用Java写了二十年的程序了,连说梦话都是用Java语言:)当然,最重要的是,在企业应用领域,Java依靠成熟的生态依旧是当仁不让的霸主。 3、 数据库是MongoDB:这里要强烈推荐一下。MongoDB是文档数据库的代表作。在文档数据库领域的开山之作应该是Lotus Notes,我正好是CLP(Certified Lotus Professional),所以对文档数据库也是情有独钟。当然最打动我的是MongoDB的这个特点:用MongoDB替代关系数据库后,相关的数据访问代码会下降10~40倍!!!这是多大的效率提升啊。尤其在替换后,原来在关系数据库必须花大量时间考虑的schema变更、读写分离、分库分表、多点容灾等等问题全部被MongoDB官方的产品功能优雅、轻松的化解。这里再推荐下MongoDB中国区的扛把子唐建法在极客时间的课程《MongoDB高手课》,我就是被这篇教程带入了MongoDB的世界。 工具清单 1、 前端开发工具用了HBuilderX:因为前端框架用了Vue,HBuilderX又是Vue官方推荐的,所以顺理成章了,实际的使用感受也确实不错。这两款软件都是国产的,感觉国产软件越做越精致了。 2、 前端调试工具在开篇说过了,就是微信开发者工具、Chrome、vconsole三款工具。再次安利亲爱的开发者:当你看不到前台的反应也看不到后台日志的时候,记得切换调试工具。 3、 Java开发工具用了Eclipse:这个也没啥说的,虽然IDEA的软文铺天盖地,其实两款工具没有什么本质差别,Eclipse又是开源免费的,各种功能插件一大把,所以懒得换了。 小程序还是H5 其实我是先花了两周时间在企业微信上用小程序做了一些开发。结果发现有一个悖论:企业微信的大部分前端接口必须使用小程序的secret,但小程序没有上架之前就没有secret,而求小程序上架必须人工审核,审核要求小程序必须是完成开发。。。也许是我太笨,没有理解腾讯的政策,既然企业微信是在企业内部用的,为啥还需要腾讯来审核?但我确实是在这一步卡住了,才回头认真面对这个灵魂的拷问:我为什么用小程序而不是H5? 不得不承认,一上来就用小程序是因为这是腾讯的嫡系,无论是前面的开发工具还是后面的原生云开发支持都具有巨大的优势。不过,小程序由于诞生时间较短导致各种小问题频出,又要学习一套全新的编程方式,云开发对企业应用的框定和约束等问题也确实需要认真考虑和对待。简而言之,后来我选择用现在流行的框架来开发企业应用,至少后续项目组进驻后,学习开发成本都比较低,也容易找到相应的开发人员。 给腾讯的一个建议 这两周下来,对企业微信的官方文档可以说是恨之入骨!太渣了!每个接口都是简单的不能再简单的说明,没有例子,没有源码,更别说视频教程了,全靠自己摸索,浪费了我太多的时间。如果腾讯的文档写得完善一些,可能我花的这两周时间可以缩短为两天。尤其是没有例程这个事,难道腾讯不知道“Talk is cheap, show me the code.”吗? 比如wx.agentConfig必须写在wx.config的ready方法中,这么重要的信息文档中竟然没有写,害我在开放社区中查了半天才明白;又比如可信域名是可以通过在hosts中手工模拟的,这么重要的技巧也没有任何地方提及。这要浪费多少不知道这个技巧的程序员多少时间啊! 对比Vue的官方文档,说明、例程、视频教程一应俱全,无比贴心,学习成本几乎为零。我想这对Vue的流行也起到了至关重要的作用。如果说Vue是个暖男,那么企业微信的文档就是一个不折不扣的渣男! 在腾讯的开放社区中,有管理员认真的回答大家的提问,这一点非常好,但财大气粗的腾讯如果能把文档写得更完善一些,也不用请那么多专职管理员去回答铺天盖地的问题了。 我为什么看好企业微信 中国人讲究中庸,做事讲究平衡,因为一个好的平衡点总能给我们带来最大的效能,这一点在开发平台上也不例外:JavaEE是一个开放平台,Lotus Notes是一个相对封闭的平台,而企业微信介于两者之间。我举一个栗子来简单说明三者的区别: 比如上传照片这件事,Java是没有任何限制的,你可以选择任何交互方式、任何处理模式让用户上传照片,用户的体验可以千差万别,但代价是你自己要操心每一个细节,调节所有涉及的参数,一般完成这个小功能需要程序员忙活几个小时;Lotus Notes恰恰相反,只有一种上传的方式,可调节的参数很少,但程序员只需要写一行代码,分分钟搞定;企业微信则提供了一个类似Lotus Notes的调用函数,交互方式基本固定,但后台的处理你可以选择你熟悉的方式,比如Java。这种折中虽然限制了用户体验(一致的体验也不一定不好),但大大提升了效能,个人感觉是比较合适的平衡点。 我们再从技术层面看看企业微信这种“中庸特质”。 一方面,企业微信 “封装”了很多“能力”,只要简单的几行代码就能“拉起”这些“能力”。比如“扫一扫“、获取地理位置、操作蓝牙等等;但另一方面,你获得这种能力的前提是必须严格遵守腾讯的规范,并且操作形式都是“腾讯式”的。 又比如,一方面你可以选择很多喜欢的技术框架,前台可以用Vue,也可以用React,后台可以用Java,也可以用Python;但另一方面,你必须严格安装腾讯要求的方式,先完成config的企业权限注入,再完成agentConfig的应用权限注入,才能享受你希望获得的那些“能力”。 综上,我的感觉就是:Java太开放,需要操心的事太多;Notes太封闭,受限太多;而企业微信找到了一个很好的平衡点,我们通过付出一点自由的代价,获得了能力的加持和平台的支持,更不用说与微信的互联互通所带来的的价值了。所以,在企业应用领域,算是一个中国人的中庸选择吧。