本例是作者初次尝试微信公众平台开发之作,实现传统的关键字请求响应功能。即:用户发关键字,公众号通过关键字进行检索, 在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和微信公众平台的关键字请求响应服务的更多相关文章

  1. 新浪云SAE使用入门,教你如何发布自己的网站

    新浪云sae是一个免费的web服务器,SAE的Web服务器采用分布式部署的方式,开发者将代码部署到SAE前端机后,会通过同步的方式,将代码部署到SAE所有的Web服务器.相当于在每一台Web服务器上都 ...

  2. 微信客户端+微信公众平台+新浪云SAE+Arduino+WS100(控制LED)

    第一步:准备 1.智能手机微信客户端或微信电脑版 2.注册微信公众平台 https://mp.weixin.qq.com 3.注册新浪账号 http://www.sinacloud.com 4.拥有一 ...

  3. 微信客户端+微信公众平台+新浪云SAE+Arduino+WS100(控制LED)

    第一步:准备 1.智能手机微信客户端或微信电脑版 2.注册微信公众平台 https://mp.weixin.qq.com 3.注册新浪账号 http://www.sinacloud.com 4.拥有一 ...

  4. 【公众号】微信第三方登录(静默授权和非静默授权)(具体代码:U盘 新浪云SAE)

    一.微信联合登录是怎么登录的,有几种登录方式:微信联合登录和微信授权登录[授权登录(非静默授权)与静默授权] [主动授权]:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关 ...

  5. php连接mysql数据库(新浪云SAE)

    新浪云提供了免费的创建服务器端应用的服务.网址为:https://www.sinacloud.com/ 在上面创建好应用,然后在本地使用记事本编写应用的代码如下: <?php echo &quo ...

  6. 在新浪云SAE中使用smarty引擎模版

    在新浪云上使用smarty时会发现又这样的错误信息: “SAE_Fatal_error: Uncaught exception 'SmartyException' with message 'unab ...

  7. 新浪云SAE 关于部分函数不能使用的做法

    例如:file_put_contents("test.txt","Hello World. Testing!"); 可以这样写: file_put_conten ...

  8. 开发微信公众平台--新建新浪云sae部署server

    创建新浪云计算应用 申请账号 我们使用SAE新浪云计算平台作为server资源.而且申请PHP环境+MySQL数据库作为程序执行环境. 申请地址:百度搜sae ,使用新浪微博账号能够直接登录SAE,登 ...

  9. 01_搭建新浪云SAE

    Step1:注册新浪云计算平台用新浪微博登陆新浪云计算平台,网址:http://sae.sina.com.cn/ 登陆成功之后会跳转到安全设置页面,安全设置页面要填写的东西比较多,需要注意:安全设置里 ...

随机推荐

  1. C#窗体 WinForm 进程,线程

    一.进程 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动. 它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体. Process 类,用来操作进程. 命名空间:using Sys ...

  2. 三层交换单臂路由vlan间通信综合实验之降龙要点[转]

    单臂路由三层交换机提供vlan间的通信之菜鸟之降龙详解要点: 图示 PC:左到右依次设置IP172.16.10.1,    20.1,  30.1,   40,1  ,50,1  /24 网关10.2 ...

  3. 0517Scrum项目4.0

    一.任务看板: 二.任务认领情况: 冯铭杰:界面的设置和部分功能的实现: 梁毅乾:四则运算的功能实现以及代码的维护: 陈施恩:监督小组成员的工作进度,以及代码的编写: 张俊毅:四则运算的算术随机产生: ...

  4. ionic本质

    ionic本质一开发工具,ionic项目目录里在大堆东西,一堆插件(plugins),还有一堆npm包(node_modules),其实都是骗人的-( ̄▽ ̄-)~ 什么nodejs,npm只是为了解决 ...

  5. ubuntu下firefox浏览器flash player插件的安装

    自从装了双系统后,ubuntu下的音乐软件只能选择网页播放器了,这无疑是需要播放插件的,这个插件就是falsh player. 当初使用usb启动盘安装的,在安装的过程中还会报找不到CD-rom的错, ...

  6. bzero函数

    函数原型:void bzero(void *s,int n) 作用:bzero函数的作用是将s指针指向的地址的前n个字节清零. 头文件:#include <string.h> eg.

  7. 利用GCC编译器生成动态链接库和静态链接库

    转载请标明:http://www.cnblogs.com/winifred-tang94/ 1.编译过程 gcc –fPIC –c xxx.c 其中-fPIC是通知gcc编译器产生位置独立的目标代码. ...

  8. python with语句

    作用:处理异常或进行资源清理等工作,让代码更加简练. 基本格式:with  statement as statement: do somthing....... statement会有一个返回对象,这 ...

  9. python 笔记1:安装python;eclipse中安装配置pydev

    1  下载安装python. 官网:https://www.python.org/downloads/     根据自己的操作系统选择需要的版本下载并安装. 我的电脑操作系统windows xp的,只 ...

  10. Jmeter—7 测试中使用到的定时器和逻辑控制器

    1 测试中提交数据有延时1min,所以查询数据是否提交成功要设置定时器. 固定定时器页面:单位是毫秒 [dinghanhua] 2 集合点.Synchronizing Timer 集合点编辑:集合用户 ...