微信公众平台开发环境配置
1.引言:最近两天玩了一把微信公众平台开发,在此把环境配置过程记录一下,期间遇到一些曲折,主要是BAE和SAE主机的问题,折腾了一天最后实在不行用自己实验室的主机作为服务器,唉,免费的东西就是不稳定,如果想要长期玩微信的话,最好买些好的空间。
2.参考资料:
A.微信消息接口指南:http://mp.weixin.qq.com/wiki/index.php?title=%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E6%8C%87%E5%8D%97
B.方倍工作室的一些教程:http://www.cnblogs.com/txw1958/
3.环境配置:
3.1 如果想配置BAE和SAE作为主机,
BAE配置可以参考:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html
SAE配置可以参考:http://coolwb.com/2460.html
3.2 自己主机的话,简单些:直接把文件放到主机服务器的网站根目录进行访问即可: http://www.example.com/weixin/
4. 微信公众账号申请:
公众账号有两个模式:编辑模式和开发模式。编辑模式下可以设置简单的消息自动回复和关键字自动回复,但功能太局限;由于我是想尝试开发模式的,所以开启开发者模式,在此之前,先把编辑模式关闭,再开启。
开发者模式开启之后,即可配置接口参数。如下图所示:URL处填写你主机的地址,TOKEN填写要验证的Token值,可以自己设定,但必须同所需验证的index.php中的token一致。 token验证成功后会提示"提交成功", 并且显示您已成为开发者;如果验证不成功,则要检查是否是你程序写的有问题,还是你所填主机的地址无法成功访问问题,网上有一篇相关说明是关于Token验证不成功的情形下去跟踪微信IP地址的方法(链接地址:方倍工作室),以检查是哪类问题.
(备注:我在配置过程中,虽然能验证成功,但用微信给公众账号发消息,就是无法按照设定返回给我的普通微信消息(不是公众账号),最后没办法换成自己实验室现有的一台主机作为服务器,域名用一个买过的域名作为URL)
5. 功能测试
验证成功后,上述Index.php中的相关验证口令即没用了,可以将其内容替换成自己想要处理的内容。微信目前开通给开发者的接口有限,只能处理文本、声音和图文三类消息。根据官网消息接口说明制定相应的功能。
6. 附录代码
6.1 接口验证代码
1 <?php 2 define("TOKEN", "weixin"); //TOKEN值,此处填写你所设定的Token 3 $wechatObj = new wechat(); 4 $wechatObj->valid(); 5 class wechat { 6 public function valid() { 7 $echoStr = $_GET["echostr"]; 8 if($this->checkSignature()){ 9 echo $echoStr; 10 exit; 11 } 12 } 13 14 private function checkSignature() { 15 $signature = $_GET["signature"]; 16 $timestamp = $_GET["timestamp"]; 17 $nonce = $_GET["nonce"]; 18 $token = TOKEN; 19 $tmpArr = array($token, $timestamp, $nonce); 20 sort($tmpArr); 21 $tmpStr = implode( $tmpArr ); 22 $tmpStr = sha1( $tmpStr ); 23 if( $tmpStr == $signature ) { 24 return true; 25 } else { 26 return false; 27 } 28 } 29 } 30 ?>
6.2 功能测试代码
1 <?php 2 $wechatObj = new wechat(); 3 $wechatObj->responseMsg(); 4 class wechat { 5 public function responseMsg() { 6 7 //---------- 接 收 数 据 ---------- // 8 9 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取POST数据 10 11 //用SimpleXML解析POST过来的XML数据 12 $postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA); 13 14 $fromUsername = $postObj->FromUserName; //获取发送方帐号(OpenID) 15 $toUsername = $postObj->ToUserName; //获取接收方账号 16 $keyword = trim($postObj->Content); //获取消息内容 17 $time = time(); //获取当前时间戳 18 19 20 //---------- 返 回 数 据 ---------- // 21 22 //返回消息模板 23 $textTpl = "<xml> 24 <ToUserName><![CDATA[%s]]></ToUserName> 25 <FromUserName><![CDATA[%s]]></FromUserName> 26 <CreateTime>%s</CreateTime> 27 <MsgType><![CDATA[%s]]></MsgType> 28 <Content><![CDATA[%s]]></Content> 29 <FuncFlag>0</FuncFlag> 30 </xml>"; 31 32 $msgType = "text"; //消息类型 33 $contentStr = 'welcome my account'; //返回消息内容 34 35 //格式化消息模板 36 $resultStr = sprintf($textTpl,$fromUsername,$toUsername, 37 $time,$msgType,$contentStr); 38 echo $resultStr; //输出结果 39 } 40 } 41 ?>