使用新浪云(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/ 登陆成功之后会跳转到安全设置页面,安全设置页面要填写的东西比较多,需要注意:安全设置里 ...
随机推荐
- js模拟类
ECMAScript6已经支持了class,但之前版本都不支持类,但是可以通过一些方法来模拟类. js中的类,既是重点,也是难点,很多时候都感觉模棱两可. 首先强调一下js中很重要的3个知识点:thi ...
- Oracle 差异增量和累计增量备份
网址: http://www.eygle.com/digest/2009/04/oracle_rman_incremental_backup.html 在rman增量备份中,有差异增量和累积增量的概念 ...
- 介绍开源的.net通信框架NetworkComms框架之五 心跳检测
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- IIS7配置asp网站
An error occurred on the server when processing the URL. Please contact the system administrator. If ...
- yii2-user
https://github.com/dektrium/yii2-user 安装 : composer require "dektrium/yii2-user:0.9.*@dev" ...
- Rhel6-torque作业调度系统配置文档
系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.121 server21.example.com 计算节点 192.1 ...
- web.xml的初始化参数
web.xml的初始化参数 ---------首先声明,这里所介绍的是web中context-param,init-param参数的初始化配置---------- ------------------ ...
- 使用python-openCV对摄像头捕捉的镜头进行二值化并打上文字
用CaptureFromCAM函数对图像进行提取: capture = cv.CaptureFromCAM(0) 读取直接的视频文件只需将语句改变为: capture = cv.VideoCaptur ...
- day11 堡垒机
项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒 ...
- hasLayout与BFC的触发条件
hasLayout与BFC是分别在IE和其他浏览器上的两个作用很相近的概念,在很多时候,我们需要触发它们去实现有些效果.例如清除浮动时需要触发hasLayout与BFC:很多自适应的两栏和三栏布局(两 ...