功能需求:
实现一个如下的查询方法,在微信中直接发送关键字查询
概要
配置config文件
复制以下代码生成config.php文件,修改其中的数据库账号密码信息,修改你的appid和appsecret,将它保存你服务器的根目录
<?php
$conn = @mysql_connect("localhost","数据库账号","数据库密码") or die ("数据库连接错误!");//填写你的账号,密码
if(!$conn)
{
die("mysql conn failed");
}
else{
mysql_query("set names uft-8");
mysql_select_db("数据库名称",$conn);//填写你的数据库名称
if(!$conn)
{
die("database selected failed");
}
}
define('appid','wx9...');//你自己的appid
define('appsecret','e28...');//你自己的appsecret
?>
其中数据库名称如下,然后账号密码是我们在第一篇文章中介绍的。
生成数据库文件
下面我们学会将我们现有的xls表格数据导入到我们的数据库中,可看以下动画
- 基本操作是
- 将xls/xlsx变成csv文件
- 使用Notepad++打开csv文件更改编码为utf-8
- 在数据库中导入csv文件
- 更改表名为合适的名称比如我的是cx_score
- 保存后记得再次查看是否更改成功
- 如果仍旧看不懂我说的,可以参考 mysql导入excel数据
生成查询代码
我们首先先去验证上述操作是否成功
- 操作是 ->1. 新建一个cxtest.php,写入以下代码
<?php
include("../config.php");
$sql="select * from cs_score"; //可以把cs_score改成你自己取的名字
$query=mysql_query($sql);
echo '< pre>';
while($row=mysql_fetch_array($query))
{
print_r($row);
}
?>
->2.在你服务器新建一个文件夹,如我的是shuju,如图 ![chaxun4](/img/blog/jc5-cx-file.JPG)
->3. 在浏览器中输入你的域名/shuju/cxtest.php,如我的是http://hi.wxhand.cn/shuju/cxtest.php,如图所示 ![chaxun5](/img/blog/jc5-cx-show.JPG)
->4.如果有问题请检查是否是config.php,数据库信息那里是否正确。
下面我们去设置查询代码
<?php
//
// 响应用户消息
// 查询系统:by 助梦者
//
define("TOKEN", "weixin"); //token自己改
include "../config.php";
$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET['echostr'])) {
$wechatObj->responseMsg();
}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"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if($tmpStr == $signature){
return true;
}else{
return false;
}
}
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$RX_TYPE = trim($postObj->MsgType);
//用户发送的消息类型判断
switch ($RX_TYPE)
{
case "text":
$result = $this->receiveText($postObj);
break;
case "image":
$result = $this->receiveImage($postObj);
break;
case "voice":
$result = $this->receiveVoice($postObj);
break;
case "video":
$result = $this->receiveVideo($postObj);
break;
default:
$result = "unknow msg type: ".$RX_TYPE;
break;
}
echo $result;
}else {
echo "";
exit;
}
}
private function receiveText($object)
{
$openid=$object->FromUserName;
$keyword= $object->Content;
//$key='分数'; //这里设置查询方式的关键字,如我设置的是:分数
preg_match('/分数(.*)/',$keyword, $match);
$cx = $match[1];
$sql="select * from cs_score where name='{$cx}' "; //这里cx_score可以改成你自己的表名,name改成你要设置的字段名
$result2 = mysql_query($sql);
$row = mysql_fetch_assoc($result2);
if(empty($row)){
$content = array();
$content[] = array("Title"=>"⚠亲,没有查到相关信息!请检查所查对象是否存在!也有可能你的信息。",
"Description"=>"",
"PicUrl"=>"",
"Url" =>"");
$content[] = array("Title"=>"【查询格式】\n分数+姓名,如【分数小明】", //显示的内容可以修改
"Description"=>"",
"PicUrl"=>"",
"Url" =>"");
$content[] = array("Title"=>"👉🏫 欢迎推荐给你的好友哦",
"Description"=>"",
"PicUrl"=>"",
"Url" =>"");
$result = $this->transmitNews($object, $content);
}
else{
/*
id name score
*/
$sql="select * from cs_score where name='{$cx}' ";
$query=mysql_query($sql);
$content = array();
$content[] = array("Title"=>"📝亲,你查询的信息如下所示!",
"Description"=>"",
"PicUrl"=>"",
"Url" =>"");
while($row2=mysql_fetch_array($query)){
$name=$row2['name']; //姓名
$score=$row2['score']; //姓名
/*
$bj=$row2['bj']; //班级...你们可以按照这个格式自己添加
*/
$xs="【信息如下】\n姓名:".$name."\n分数:".$score;
$content[] = array("Title"=>$xs,
"Description"=>"",
"PicUrl"=>"",
"Url" =>"");
}
$content[] = array("Title"=>"👉🏫感谢使用", //显示的内容可以修改
"Description"=>"",
"PicUrl"=>"",
"Url" =>"");
$result = $this->transmitNews($object, $content);
}
return $result;
}
/*
* 回复文本消息
*/
private function transmitText($object, $content)
{
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);
return $result;
}
/*
* 回复图文消息
*/
private function transmitNews($object, $arr_item)
{
if(!is_array($arr_item))
return;
$itemTpl = " <item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
";
$item_str = "";
foreach ($arr_item as $item)
$item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);
$newsTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<Content><![CDATA[]]></Content>
<ArticleCount>%s</ArticleCount>
<Articles>
$item_str</Articles>
</xml>";
$result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($arr_item));
return $result;
}
}
?>
最终效果
如果仍然有疑问,联系
___