使用新浪云(SAE)实现基于mySql和微信公众平台的关键字请求响应服务
本例是作者初次尝试微信公众平台开发之作,实现传统的关键字请求响应功能。即:用户发关键字,公众号通过关键字进行检索, 在mysql数据库中读取与关键字相关的信息,并返回给用户。本例在微信订阅号(开发者模式)上实现,目的是学习微信公众平台开发、验证SAE的功能,并研究SAE+微信公众平台的实用性及应用场景。因仅是进行技术学习的示例子,所以忽略公众号在非开发者模式下可以简单实现该功能的事实。
感谢方倍公作室的教程,让我一开始就站上一个高度:微信公众平台开发入门教程
应用比较简单,直接上代码了:
<?php define("TOKEN", "gettime"); //"gettime",公众号开发者模式需要的TOKEN
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
$wechatObj->valid();
}else{
$wechatObj->responseMsg();
} class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
header('content-type:text');
echo $echoStr;
exit;
}
} private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"]; $token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){
return true;
}else{
return false;
}
} private function getNote($noteID){
$mysql_server_name="SAE_MYSQL_HOST_M"; //数据库服务器名称
$mysql_server_port="SAE_MYSQL_PORT";
$mysql_username="SAE_MYSQL_USER"; // 连接数据库用户名
$mysql_password="SAE_MYSQL_PASS"; // 连接数据库密码
$mysql_database="SAE_MYSQL_DB"; $strReturn = "default"; // 连接到数据库
//$conn=mysql_connect($mysql_server_name.":".$mysql_server_port, $mysql_username,$mysql_password);
$conn = mysql_connect(SAE_MYSQL_HOST_M.":".SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); /*
if($conn){
$strReturn = "connected";
}
else{
$strReturn = "not connected";
}
*/ // 从表中提取信息的sql语句
$strsql=sprintf("SELECT concat(note_name,':',note_info) FROM `note_info` where note_id=%s",$noteID);
// 执行sql查询
$result=mysql_db_query(SAE_MYSQL_DB, $strsql, $conn);
//mysql_select_db(SAE_MYSQL_DB,$conn);
//$result=mysql_query($strsql, $conn);
// 获取查询结果 if($result){
$row = mysql_fetch_row($result);
if($row){
$strReturn = $row[0];
}
else{
$strReturn = sprintf("keyword<%s>not found",$noteID);
}
}
else{
$strReturn = "result empty";
} // 释放资源
mysql_free_result($result);
// 关闭连接
mysql_close($conn); return $strReturn;
} public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){
$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 = $this->getNote($keyword);
//$contentStr = $keyword;
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
else{
echo "error!";
exit;
}
}else{
echo "";
exit;
}
}
}
?>
代码核心功能是访问SAE的MySql服务。本例采用共享型数据库。通过关键字noteID检索表note_info。SQL语句展示的表名和字段:
$strsql=sprintf("SELECT concat(note_name,':',note_info) FROM `note_info` where note_id=%s",$noteID);
其中连接数据库部分花了大量时间,原因是对mysq、SAE的使用都不熟悉。注意下面两行代码,到现在还不大明白为什么注释掉的那一行不行。
//$conn=mysql_connect($mysql_server_name.":".$mysql_server_port, $mysql_username,$mysql_password);
$conn = mysql_connect(SAE_MYSQL_HOST_M.":".SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
除数据库访问部分外,大部分是微信平台规范性代码。该部分代码请引文作了详细解释。实际效果:
使用新浪云(SAE)实现基于mySql和微信公众平台的关键字请求响应服务的更多相关文章
- 新浪云SAE使用入门,教你如何发布自己的网站
新浪云sae是一个免费的web服务器,SAE的Web服务器采用分布式部署的方式,开发者将代码部署到SAE前端机后,会通过同步的方式,将代码部署到SAE所有的Web服务器.相当于在每一台Web服务器上都 ...
- 微信客户端+微信公众平台+新浪云SAE+Arduino+WS100(控制LED)
第一步:准备 1.智能手机微信客户端或微信电脑版 2.注册微信公众平台 https://mp.weixin.qq.com 3.注册新浪账号 http://www.sinacloud.com 4.拥有一 ...
- 微信客户端+微信公众平台+新浪云SAE+Arduino+WS100(控制LED)
第一步:准备 1.智能手机微信客户端或微信电脑版 2.注册微信公众平台 https://mp.weixin.qq.com 3.注册新浪账号 http://www.sinacloud.com 4.拥有一 ...
- 【公众号】微信第三方登录(静默授权和非静默授权)(具体代码:U盘 新浪云SAE)
一.微信联合登录是怎么登录的,有几种登录方式:微信联合登录和微信授权登录[授权登录(非静默授权)与静默授权] [主动授权]:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关 ...
- php连接mysql数据库(新浪云SAE)
新浪云提供了免费的创建服务器端应用的服务.网址为:https://www.sinacloud.com/ 在上面创建好应用,然后在本地使用记事本编写应用的代码如下: <?php echo &quo ...
- 在新浪云SAE中使用smarty引擎模版
在新浪云上使用smarty时会发现又这样的错误信息: “SAE_Fatal_error: Uncaught exception 'SmartyException' with message 'unab ...
- 新浪云SAE 关于部分函数不能使用的做法
例如:file_put_contents("test.txt","Hello World. Testing!"); 可以这样写: file_put_conten ...
- 开发微信公众平台--新建新浪云sae部署server
创建新浪云计算应用 申请账号 我们使用SAE新浪云计算平台作为server资源.而且申请PHP环境+MySQL数据库作为程序执行环境. 申请地址:百度搜sae ,使用新浪微博账号能够直接登录SAE,登 ...
- 01_搭建新浪云SAE
Step1:注册新浪云计算平台用新浪微博登陆新浪云计算平台,网址:http://sae.sina.com.cn/ 登陆成功之后会跳转到安全设置页面,安全设置页面要填写的东西比较多,需要注意:安全设置里 ...
随机推荐
- Python学习笔记之字符串
一.字符串格式化 >>> format="Hello,%s. %s enough for ya?" >>> values=('World','H ...
- 解决Selenium与firefox浏览器版本不兼容问题
因为在用java打开firefox浏览器的时候报错 org.openqa.selenium.firefox.NotConnectedException: Unable to connect to ho ...
- px和em
相同点: 都是长度单位 不同点: px是绝对单位,不支持IE的缩放,em是相对单位. px的值是固定的,指定是多少就是多少:em得值不是固定的,并且em会继承父级元素的字体大小 ps: 浏览器的默认字 ...
- 把DataTable中的数据拼接成XML时遇到的问题
错误信息:System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: Serve ...
- input框限制只能输入正整数,逻辑与和或运算
推荐下自己刚写的项目,请大家指正:童话之翼 有时需要限制文本框输入内容的类型,本节分享下正则表达式限制文本框只能输入数字.小数点.英文字母.汉字等代码. 例如,输入大于0的正整数 代码如下: < ...
- .gitignore
# Xcode # build/ *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *. ...
- 持续集成-sourcetree的安装、使用记录
1.参考 http://blog.sina.com.cn/s/blog_672143a30102vold.html 2.问题-安装sourcetree后,打开时提示下载但是连接不上相应链接 自行下载g ...
- TopCoder----卖柠檬
1. 题目描述 Problem Statement You are playing a game called Slime Tycoon.You will be selling Slimonade ...
- 使用Template控制Editor显示方式
@Html.EditorFor可以由Template决定显示 虽然都是EditorFor,页面上显示却不同,ReleaseDate是一个Jquery DatePicker: 怎么实现的呢?就是Temp ...
- Python::OS 模块 -- 简介
OS 模块简介 OS模块是Python标准库中的一个用于访问操作系统功能的模块,OS模块提供了一种可移植的方法使用操作系统的功能.使用OS模块中提供的接口,可以实现跨平台访问.但是在OS模块中的接口并 ...