微信公众号开发入门

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

<?php
// 微信易搜功能描述:
/**
 * 1. 发送内容,在数据库中获取当前用户的位置,判断是否成功,如果成功,通过百度地图接口,返回数据展示给用户,并存储内容
 * 如果失败,存储用户内容,提示用户发送位置
 * 2. 发送位置,在数据库中获取当前用户的内容,判断是否成功,如果成功,通过百度地图接口,返回数据展示给用户,并存储位置
 * 如果失败,存储用户位置,提示用户发送内容。
 */
@header("Content-type: text/html; charset=utf-8");
//define your token
define("TOKEN", "hussar");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->run();
//$wechatObj->valid();
class wechatCallbackapiTest
{
	public function valid()
	{
		$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 data
		if (!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 yourself
		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);
		// use SORT_STRING rule
		sort($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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值