一、前期准备
1、搭建服务器,创建应用,配置域名,
2、申请公众号,开启开发者模式,进入公众平台测试账号,修改接口配置信息,URL和上面服务器的域名相同,Token自己随便设置。然后下面有测试号二维码,用手机扫一扫就可以关注进行测试。
3、在开发者工具页面进入开发者文档,一切准备就绪。
二、在本地建一个文件夹,名字为1,在这个文件夹下,从服务器的svn仓库把代码checkout下来,新建index.php文件,开始写代码了。
<?php $WechatObj = new wechatCallbackapiTest($appID,$appsecret); if (!isset($_GET[‘echostr‘])) { $WechatObj ->action(); }else{ $WechatObj ->valid(); } class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){ echo $echoStr; exit; } } //加密签名,检验该请求是否来源于微信 private function checkSignature(){ $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr); if($tmpStr == $signature){ return true; }else{ return false; } } //微信操作 public function action(){ echo ‘helloworld‘; } }
三、以上代码是必须的,接下来就可以看着开发文档一步步进行啦。
1、实现公众号自动回复。
//自动回复 public function response_msg(){ $poststr = $GLOBALS[‘HTTP_RAW_POST_DATA‘];//接收用户信息 $postobj = simplexml_load_string($poststr,‘SimpleXMLElement‘,LIBXML_NOCDATA);//将xml转换为对象 $fromusername = $postobj ->FromUserName;//消息发送方 $tousername = $postobj ->ToUserName;//消息接收方 $type = $postobj ->MsgType;//消息类型 $event = $postobj ->Event;//事件 $event_key = $postobj ->Event_Key; $mid = $postobj ->MediaId;//媒体消息id $link = $postobj ->Url;//链接消息地址 $latitude = $postobj ->Location_X;//位置的经度 $longitude = $postobj ->Location_Y;//纬度 $keyword = trim($postobj ->Content);//用户发送的关键字,去除多余空格 $time = time();//消息接收时间 //文本模板 $textTpl = " <xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>";
if($type == ‘text‘){ switch ($keyword) { case ‘早上好‘: $content = ‘早安,又是美好的一天!‘;break; case ‘晚安‘: $content = ‘美好的一天过去了,晚安,你和世界!‘;break; default: $content = ‘熊孩子,你好呀!‘;break; } }elseif($type == ‘event‘){ switch ($event) { case ‘subscribe‘: $content = ‘欢迎关注,带你进入奇妙有趣的微信公众号开发之旅‘;break; case ‘unsubscribe‘: $content = ‘欢迎再次关注!‘;break; } }else{ switch ($type) { case ‘image‘: $content = ‘image‘.$mid;break; case ‘voice‘: $content = ‘voice‘.$mid;break; case ‘music‘: $content = ‘music‘.$mid;break; case ‘video‘: $content = ‘video‘.$mid;break; case ‘location‘: $content = $latitude.‘,‘.$longitude;break; case ‘link‘: $content = $link;break; } } $result = printf($textTpl,$fromusername,$tousername,$time,$content); echo $result; }
2、上面公众号自动回复的全是文本消息,下面看看还有些什么类型的消息。