几个月前我做了一个微信公众号的开发,在这里介绍一下。
微信开发其实不难,因为本质上并不在微信上,大部分还是自己的网站,微信只是作为一个登陆入口,一般微信常用的就是这三种:
企业号一般不会用,主要是给公司内部发消息、通知等等。一般用的是订阅号和服务号,这个微信号就是一个订阅号,因为只有订阅号可以个人申请,不需要营业执照号,一天只能法一条消息。服务号是企业或组织使用,有执照号就行,认证需要300块钱,一个月群发四条,认证后可以得到一些功能。
这里有一份官网的功能介绍,还挺全的:
其实认证后接口上都差不多能用,最主要的区别还是群发的数量以及显示的地方。订阅号在订阅号文件夹里面,服务号在外面。
这是微信公众号的开发文档,写得很详细也很清楚,也挺简单的,用来开发一些微信的相关功能,比如获取关注人的openid、获取关注人基本信息、微信支付、商城,还有的比较好玩的比如微信聊天机器人,这是调用了一个第三方的接口,当然你也可以自己写,因为你可以获取用户发给你的消息,我当辅导员的时候就做过一个家长可以查自己孩子成绩的公众号,也就是利用这些基础的接口。
回头说当时开发的项目,是一个面相找工作的人的公众号,实现的主要功能是刷招聘简章,也可以直接投递简历,会帮用户直接发简历邮件到hr的邮箱。主要开发人员是一个产品兼美工,一个前台,一个后台,一个写爬虫,一个写推荐算法。
开发选用的是yii2的框架+mysql数据库,关于php,实际上对一些很小网站开发速度回比java快非常多,选用这个框架是因为这个框架比较强大,我认为是现在最好的php框架了,文档也很丰富,使用的人也比较多,国内的推广方面因为有一个热心的站长所以也挺好的。
如何申请公众号以及认证就不说了,很容易就能查到,从已经注册好了并且有一个服务器开始。
首先要配置公众号一些基本信息,例如头像之类的,之后就是要填写服务器配置:
完成前面服务器验证后,微信服务器将发送GET请求到填写的服务器地址URL上进行开发者验证,GET请求携带参数如下表所示:
开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:
1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
参考代码:
比较麻烦的是微信不能用自己本机作为服务器,它不接受任何IP地址,必须得有域名,调试也只能发布后调试,不能本机调试,当然也可以用内网穿透来访问本机,网上也有很多能提供二级域名的服务。
微信有一点特别蛋疼,就是只要你一旦把服务器配置好了,那么所有的功能全部要自己用代码实现,比如菜单,用微信的菜单添加全部会失效,这非常非常麻烦。下面就是菜单的一些类型:
想了解更多可以上官网看,比如我们要添加一个菜单按钮直接跳转到我们的网站,就可以用POST请求发送类似的内容:
获取用户信息也是很常用的,如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,比如头像、昵称等等,进而实现业务逻辑。
在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。只要把这个域名配好了,其下所有的网页都可以获取用户信息。
在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开类似如下页面进行授权:
很长一串,appid是自己的,returnurl是要回调的网址,后面照着写就行了
,用户授权后开发者就可以通过access_token和openid拉取用户信息了,可以获得下面这些信息:
接下来就可以用这些信息进行一些常规的开发工作了。
讲讲在创业公司工作的情况。
其实我感觉在创业公司和之前讲的在大公司实习就完全不是一个概念了,因为人数特别少,我们那个产品经理也完全不懂技术,所以整个项目是我自己来跟进的,比如沟通进度、确定时间表这些。
整个项目周期会非常短,一般一个项目周期就是一个月,一个月之内抢着开发完,开发完就推广,效果好就再去完善,不好就当没发生过,继续去做别的事情。
公司里的人只要是写代码的基本上前后台都是能写的,不说能写的多好多块,但基本上小bug的调试都是自己完成的,不会去找后台或前台,比如后台也会改一点样式、不复杂的JS,前台的人调试的时候也会去调试后台代码。与实验室还是不一样,大公司应该也不会去碰对方的代码,全通过接口,小公司因为要抢时间,也不会全去对接口,能上线就行,出问题了再调。
总体来说,这种开发模式可以在短时间内得到大量的锻炼。为了找工作最好去大公司实习,但实际上在小公司可能会得到更多的锻炼,每个人都必须站在项目的整体上去考虑事情,而不是做一个小模块,从项目开始的需求、数据库设计、优先级等等,一个网站的整个开发流程都会很清晰的去过一遍,会有一个整体的把握,方便你以后在大公司去理解别人说做某件事情的原因,知道为什么去写代码。因为代码不能写一辈子,你总有一天也会去告诉别人需要写什么。同时代码上并不完善,会有非常多bug,因为一切以效率为先。
讲者:司玮辰
后台开发者
整理:欧霄