微信公众号开发入门

来源:互联网 发布:微商和淘宝的区别 编辑:程序博客网 时间:2024/05/02 02:10

1.    编写php文件添加自己处理逻辑

<?php// 微信易搜功能描述:/** * 1. 发送内容,在数据库中获取当前用户的位置,判断是否成功,如果成功,通过百度地图接口,返回数据展示给用户,并存储内容 * 如果失败,存储用户内容,提示用户发送位置 * 2. 发送位置,在数据库中获取当前用户的内容,判断是否成功,如果成功,通过百度地图接口,返回数据展示给用户,并存储位置 * 如果失败,存储用户位置,提示用户发送内容。 */@header("Content-type: text/html; charset=utf-8");//define your tokendefine("TOKEN", "hussar");$wechatObj = new wechatCallbackapiTest();$wechatObj->run();//$wechatObj->valid();class wechatCallbackapiTest{public function valid(){$echoStr = $_GET["echostr"];//valid signature , optionif($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)){/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */libxml_disable_entity_loader(true);$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(){// you must define TOKEN by yourselfif (!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);// use SORT_STRING rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}/** * 处理用户发送数据 */public function run(){$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];if(!empty($postStr)){libxml_disable_entity_loader(true);$postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);$fromuser = $postObj->FromUserName; // 消息发送人$touser = $postObj->ToUserName; // 消息接收人$msgType = $postObj->MsgType; // 消息类型switch ($msgType){case 'text' : // 文本内容    // 执行第一步判断$content = $postObj->Content;if(!empty($content)){$conn = $this->getDBConn();$rowSet = mysql_query("SELECT `id`,`address` FROM `yisou_userdata` WHERE wechatid='$fromuser' AND (address IS NULL or searchText IS NULL)");$row = mysql_fetch_assoc($rowSet);if(!empty($row) && !empty($row["address"])){$id = $row["id"];mysql_query("UPDATE yisou_userdata SET searchText = '$content' WHERE `id`='$id'");// 访问百度地图获取数据,返回图文数据$url='http://api.map.baidu.com/place/v2/search?query=%s&location=%s&radius=2000&output=xml&ak=yXe5c2FcNp6boiRNHeQmNmbhebps4KWA';$url = sprintf($url,$content,$row["address"]);$html = file_get_contents($url);$htmlObj = simplexml_load_string($html,'SimpleXMLElement',LIBXML_NOCDATA);$items = array();foreach ($htmlObj->results->result as $obj){array_push($items,$obj);}echo $this->responseMsgDescript($fromuser, $touser, $items);}else{// 存入数据库,等待位置输入$sql = "";if(empty($row)){// 新增$sql = "INSERT INTO `yisou_userdata` (`wechatid`,`searchText`) VALUES ('$fromuser','$content')";}else{// 修改$id = $row["id"];$sql = "UPDATE `yisou_userdata` SET `wechatid`='$fromuser', `searchText`='$content' WHERE `id`= '$id'";}mysql_query($sql);echo $this->responseMsgText($fromuser, $touser, "请发送位置".mysql_error());}}break;case 'location':// 发送位置 执行第二步判断$location_X = $postObj->Location_X;$location_Y = $postObj->Location_Y;$conn = $this->getDBConn();$rowSet = mysql_query("SELECT `id`,`searchText` FROM yisou_userdata WHERE wechatid='$fromuser' AND (address IS NULL or searchText IS NULL)");$row = mysql_fetch_array($rowSet);if(!empty($row) && !empty($row["searchText"])){$id = $row["id"];$address = $location_X.",".$location_Y;    mysql_query("UPDATE yisou_userdata SET address = '$address' WHERE `id`='$id'");// 访问百度地图获取数据,返回图文数据$url='http://api.map.baidu.com/place/v2/search?query=%s&location=%s&radius=2000&output=xml&ak=yXe5c2FcNp6boiRNHeQmNmbhebps4KWA';$url = sprintf($url,$row["searchText"],$address);$html = file_get_contents($url);$htmlObj = simplexml_load_string($html,'SimpleXMLElement',LIBXML_NOCDATA);$items = array();foreach ($htmlObj->results->result as $obj){array_push($items,$obj);}echo $this->responseMsgDescript($fromuser, $touser, $items);}else{// 存入数据库,等待位置输入$sql = "";$address = $location_X.",".$location_Y;if(empty($row)){// 新增$sql = "INSERT INTO `yisou_userdata` (`wechatid`,`address`) VALUES ('$fromuser','$address')";}else{// 修改$id = $row["id"];$sql = "UPDATE `yisou_userdata` SET `wechatid`='$fromuser', `address`='$address' WHERE `id`= '$id'";}mysql_query($sql);echo $this->responseMsgText($fromuser, $touser, "请发送内容,如美食,KTV".mysql_error());}break;}}}/** * 发送文本消息 */public function responseMsgText($fromuser,$touser,$content){$textTp = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";return sprintf($textTp,$fromuser,$touser,time(),$content);//echo $content;}/** * 发送图文消息 */public function responseMsgDescript($fromuser,$touser,$itemArr){$descriptTp = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>%d</ArticleCount><Articles>%s</Articles></xml>";$itemtemp = "<item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item>";$itemStr = "";$picUrl = "http://file.youboy.com/d/159/51/44/0/118370.jpg";$url = "";foreach($itemArr as $item){$itemStr = $itemStr.sprintf($itemtemp,$item->name,$item->address,$picUrl,$url);}return sprintf($descriptTp,$fromuser,$touser,time(),count($itemArr),$itemStr);}/** * 连接数据库 */public function getDBConn(){$conn = mysql_connect("127.0.0.1", "root", "1");if(!$conn){die("数据库连接失败!");exit();}mysql_select_db("wall");mysql_query("SET NAMES UTF8");return $conn;}}?>


2.    申请微信测试号https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

3.    按照微信接口文档,将外网服务器上的文件地址接入到微信公众平台中;

4.    手机微信关注公众平台,发送任意内容(美食,KTV)按照提示发送位置。公众平台会根据用户发送的内容和位置,将返回结果显示在用户微信中。

易搜项目附件【微信公众号开发易搜项目源码】

0 0