完整的微信公众平台开发2
来源:互联网 发布:c语言调用funcos 编辑:程序博客网 时间:2024/04/27 23:17
24天前写了这个系列的第一篇,后面老大要求用php,后来就改学php。这20几天进步缓慢,但还是进步了些,这里把学到的“干货”,奉献给大家,有兴趣的朋友扫描下面的二维码关注我的学习,求指导,求批评。
微信的基本流程,实例解析自动回复,是今天我想整理的。后面的连接数据库,百度地图API调用,大转盘等,都在施工中。求关注,求督促。
微信和公众平台的交流是以xml为载体,采用一问一答的方式进行。把这句话记清楚,因为很重要。下面开始第一个实例“被关注时自动回复”的解释。(....注意我用的是解释,原创属于"青龙老贼",对于只想和用户进行简单交流的朋友,其实把编辑模式用熟练了,基本的业务就OK了)。
我们需要一个自己的微信公众号和一个SAE开发平台。还有对xml和php有一定的了解。在下面的文档中有非常详细的介绍,在此感谢青龙老哥的分享。
http://download.csdn.net/detail/bailin710258/6325203
认真看完这两篇文档,相信大家一定已经实现了,被关注时自动回复文字的功能。在这里我只理清下思路:
1、接口的配置:
在开发模式界面下载wx_sample-->解压后上传到自己的服务器-->更改TOKEN的值。接口配置中的参数
url: 你的服务器/wx_sample.php
Token:token的值。
配置完成了wx_sample.php可以情清空(不是删除)为什么要这样做呢?我们来看这个文件的代码
<?php/** * wechat php test *///define your tokendefine("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();$wechatObj->valid();class wechatCallbackapiTest{//验证签名和接口public function valid() {//获得由get方法传来的表单中name属性为‘echostr’的值,并将其赋值给变量$echoStr $echoStr = $_GET["echostr"];//随机字符串 //valid signature , option if($this->checkSignature()){//验证通过原样返回 echo $echoStr; exit; } }//回复信息 public function responseMsg() {//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post dataif (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>"; if(!empty( $keyword )) { $msgType = "text"; $contentStr = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } }private function checkSignature(){ $signature = $_GET["signature"];//加密签名 $timestamp = $_GET["timestamp"];//时间戳 $nonce = $_GET["nonce"];//随机数 $token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr);//排序$tmpStr = implode( $tmpArr );//拼接$tmpStr = sha1( $tmpStr );//验证,如果成功,则返回所计算的 SHA-1 散列,如果失败,则返回 false。if( $tmpStr == $signature ){return true;}else{return false;}}}?>
由以上代码可知,当你在微信公众平台,填上url和token并提交后,平台就会向url所在的地址发个get请求,其中包括了时间戳、随机数等参数。你的服务器等到这些参数后会结合token进行验证,验证通过则原样返回$echoStr(随机字符串)这个参数,反之则什么都不返回。所以掌握原理后我们只姚这几行代码就能通验证
2、消息的自动回复。
首先得重复下句话:微信和公众平台的交流是以xml为载体,采用一问一答的方式进行。当普通微信用户向公众账号发消息时,微信服务器将以xml的形式通过POST方法将该消息发送到填写的URL上。具体的格式和讲解,见文档。再次感谢青龙老哥无私的分享。下面我对文本消息做个整理。
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml>
接发流程是这样的 微信消息《--》微信服务器《--》你的服务器。微信服务器和你服务器之间的较量是通过xml进行的,所以你服务器接收和发送微信的过程就是已经解析和封装xml的过程。成为开发者后,在自己的服务端加上下面两个文件就能实现”被关注时自动回复“,详解见注释
<?php//此类包含用到的微信信息的xml格式$textType="<xml><ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>"; ?>回复信息的类
<?php//装载信息模板include_once("message_type.php");//解析微信服务器发送来的xml信息$messageStr = $GLOBALS["HTTP_RAW_POST_DATA"];if(!empty($messageStr)){ //生成信息对象 $messageObj = simplexml_load_string($messageStr,'SimpleXMLElement',LIBXML_NOCDATA); //提取有用信息 $fromUsername = $messageObj->FromUserName; $toUsername = $messageObj->ToUserName; $form_MsgType = $messageObj->MsgType;//从微信服务器获得的信息类型 //事件信息 if($form_MsgType=="event"){ //获取事件类型 $from_Event = $messageObj->Event; //被关注事件 if($from_Event=="subscribe"){ //拼装个xml格式的信息用于回复 //方法-: 调用模板(message_type.php)用函数拼装,注意收信方和发信方交换了 $msgType="text"; $contentStr="谢谢你的关注!"; $responseStr = sprintf($textType,$fromUsername,$toUsername,time(),$msgType,$contentStr); echo $responseStr; exit; //方法二 也可以自己直接拼装个xml 以后的图文信息这两种方法也适合 } } }else{echo ""; exit;}?>
- 完整的微信公众平台开发2
- 微信公众平台完整开发教程
- 微信公众平台完整开发教程
- 微信公众平台完整开发教程 by ZTalk
- 微信公众平台的基本开发
- 开发微信公众平台的基本功能
- 微信公众平台的开发
- 微信公众平台开发入门教程2
- 微信公众平台开发 获得公众号的access_token
- 微信公众平台开发
- 微信公众平台开发
- 微信公众平台开发
- 微信公众平台开发
- 微信公众平台开发
- 微信公众平台开发
- 微信公众平台开发
- 微信公众平台开发
- 微信公众平台开发
- 7-framework--详解 8 Android平台开发-WIFI 驱动移植 -- 详细 9 Android WIFI 驱动移植
- 基于annotation的表单验证
- freemarker 使用教程笔记
- 瞬时响应:网站的高性能架构
- 学习笔记-B树,B+树及数据库索引
- 完整的微信公众平台开发2
- 使用DevStack快速部署OpenStack环境
- Ubuntu下Wine使用教程
- input文本框默认提示
- Java关键字this的用法总结
- STL for_each 和函数对象(function object) 使用详解
- 浅谈CSRF攻击方式
- 详述Linux ftp命令的使用方法
- uva 10790 How Many Points of Intersection?