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)按照提示发送位置。公众平台会根据用户发送的内容和位置,将返回结果显示在用户微信中。
易搜项目附件【微信公众号开发易搜项目源码】