一.注册微信公众号
微信公众号官方入口https://mp.weixin.qq.com注册公众号,注册过程中,类型选择可能是新手比较迷惑的地方.微信公众号分为订阅号和服务号(还有个企业号,似乎用的人不多),每种类型下面又分为公司,政府部门,社会组织,个人等不同性质.不同类型,不同性质的公众号,权限不同,申请资料也不同.
例如:公司(订阅号或服务号),你得提供工商注册号,银行对账号.注册成功后,也并不是所有权限都默认开通,需要手动开通.有些权限还得微信认证之后才能开通.关于这些细节,可参阅微信公众号官方文档https://mp.weixin.qq.com/wiki
我选择个人订阅号,不用那么多资料.个人订阅号不支持微信认证,功能也很少,只能当成熟悉游戏规则来玩玩.不过可以开通测试账号,测试账号拥有除了跟钱有关的(微信支付,微信门店等)之外的所有功能.等到后期我开始写微信支付等功能的文章时,再想办法弄一个服务号过来,或者热心的网有手头上有多余的也可能借来用用.
测试账号申请办法:微信公众号官方管理平台->开发->开发者工具->公众平台测试账号.其中需要做一些配置,如接口配置信息,JS接口安全域名等.我的如下:
具体参数说明,后面讲解,请注册JS接口安全域名不能带http://
二.微信公众号官方后台管理界面
可能大家在其他教程(别人以前写的)里看到的是如下的界面:
这些应该都是几年前写的,微信已经改了官方后台管理界面,不再是这样了,导致大家按这些教程来操作,怎么都找不到这些界面....最新的界面如下:
三.公众号服务器配置
微信公众号分编辑模式和开发模式.编辑模式即在公众号官方后台管理界面里,设置自动回复(例如,粉丝发送1,则回复新电影介绍;发送2,则回复优惠套餐等).设置自定义菜单.而开发模式则需要开发者有一个公网上面的网站.当粉丝发送消息时,微信的服务器,会送此消息包装成一定格式的xml,转发到开发者的网站上;同时,开发者向微信服务器回复特定格式的xml,然后微信服务器会将相应的内容转发到粉丝的微信客户端上..开发者还可以调用相应的api(前提是开通了相应的权限),完成某些高级功能.如:微信支付等.
设置公众号服务器步骤为公众号官方后台管理->开发->基本配置->修改配置.如下:
点击提交时,微信服务器会向你设置的URL网站(我的即为http://szuzsq.tunnel.qydev.com/weixin/index.php)发送一个get请求,因而,你得提前写好服务器响应代码,回复一条字符串,表示成功匹配微信服务器需要的服务器.怎么回复的逻辑请参阅官方文档说明.我将在后面将代码给出(其实就是微信文档里的例子代码,见六.响应微信服务器配置URL提交代码).
最后确保在公众号官方后台管理->开发->基本配置里已启用.如下:
开发模式启用后,某些编辑模式下的功能则无法使用.例如,微信官方后台管理->功能->自动回复(以及自定义菜单等),右边会显示一把销,表示未开启自动回怎么设置.如下:
四.建立公网服务器
很多其他教程,都是以百度云BAE,新浪云SAE作为服务器,当前这2个玩意不是免费的,而且需要实名认证.特别要指出的是新浪SAE如果没有认证,所有的返回响应,都会自动添加一些html标签,提醒用户去认证,就是因为这些标签,微信接收服务器配置提交时,不能成功..
教大家一种方式,将公网上的网站,映射到你本机电脑的服务器上(反向代理).比较有名的是花生壳,但这玩意同样收钱,免费的特不稳定..
ok,新利器隆重出场,ngrok!!!!!!!!!!!这是一个开源项目,干的活就是花生壳,将网络上访问公网上的网站(我的是http://szuzsq.tunnel.qydev.com/weixin/index.php)映射到本机电脑.国内有人架设了ngrok的服务,我们直接用.
到http://www.qydev.com下载相应操作系统客户端(我的是window7),然后在解压目录下执行ngrok -config ngrok.cfg -subdomain szuzsq 80
szuzsq是我的子域名,这样,访问http://szuzsq.tunnel.qydev.com就是访问我本机电脑的服务器了.在本地,你可以轻松调试.我一般使用error_log("xxx", 3, "err.log");的方式打印日志.
五.搭建本地开发环境
我使用php作为开发语言(所有的例子都是基于php+ html5 + css3 + javascript),大家可选用自己熟悉的语言(只要是http服务器语言就行),并且会搭建环境.我的环境为:windows7
+ wampserver3 + eclipse..其中mysql默认编码以及排序均设置为utf8;php打开了xdebug调试;eclipse上集成web,javascript,php插件.如果有同样使用php又不会的配置的,可联系我...关于断点调试,我的eclipse可调试普通网站的php代码,浏览器可调试普通网站的javascript代码.但是,怎么在微信公众号开发时断点调试php和javascript,我还不会,有会的同学,请指教.
wampserver3(wampserver3.0.4_x86_apache2.4.18_mysql5.7.11_php5.6.19-7.0.4.exe)下载地址:
https://sourceforge.net/projects/wampserver/files
wampserver3自运安装了apache,mysql和php.
要运行eclipse,请先安装java(我的是java6).然后解压.
然后从菜单Help->Install New Software->Add.进入Add Respository界面,在Name处填写Indigo,在Location处填写: http://download.eclipse.org/releases/indigo.如果上一级Install界面的Work with里面直接有Indigo - http://download.eclipse.org/releases/indigo,也可以直接选中这一项...
解析完之后,会有一项"Web,XML,Java EE and OSGi Enterprise Development",不用全部安装,我只安装了"JavaScript Development Tools", "PHP Development Tools(PDT) SDK Feature"和"Web Page Editor"
六.响应微信服务器配置URL提交代码
这些代码只需保证在微信官方管理后台,提交开发者服务器配置时,能响应就行了.公众号正常运行后,可删除.
<?php //文件名: http://szuzsq.tunnel.qydev.com/weixin/index.php define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()) { echo $echoStr; exit; } } private function checkSignature() { if(!defined("TOKEN")) throw new Exception('TOKEN is not defined!'); $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr); if($tmpStr == $signature) return true; return false; } } ?>