本例是作者初次尝试微信公众平台开发之作,实现传统的关键字请求响应功能。即:用户发关键字,公众号通过关键字进行检索, 在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. PDF 补丁丁 0.4.3.1518 测试版发布:书签编辑器新增升级书签功能、优化PDF文档阅览器

    新的 PDF 补丁丁测试版上线啦! 新版本增加了升级书签的功能(见工具栏的“←”按钮),可以方便地将下级书签升级为上级书签. 另外,新版本还增强了书签编辑器功能中的 PDF阅读器,从之前的单页阅读模式 ...

  2. myeclipse启动tomcat会出现 a java exception has occured错误 的解决方法

    在浏览器中可以打开tomcat,结果在myeclipse启动tomcat会出现 a java exception has occured错误 ,之后出现一个Classloader.class的文件,关 ...

  3. speechSynthesis

    /* $timeout.cancel(timer); */window.speechSynthesis.onvoiceschanged = function(e) { voices = speechS ...

  4. 基于httpClient的https的无秘钥登陆

    HttpClient package com.mediaforce.crawl.util; import java.util.ArrayList; import java.util.HashMap; ...

  5. (转)PhoneGap工作原理及需改进的地方

    原文:http://mobile.51cto.com/web-330900.htm PhoneGap工作原理及需改进的地方 2012-04-18 16:42 佚名 网络整理 字号:T | T 目前开发 ...

  6. 2016 - 1- 24 大文件下载 关于NSOutStream 的使用补充

    // // ViewController.m // 大文件下载 // // Created by Mac on 16/1/24. // Copyright © 2016年 Mac. All right ...

  7. 北京网赛I题 hiho1391 (树状数组、区间覆盖最大值问题)

    题目链接:http://hihocoder.com/problemset/problem/1391 题意:A国和B国向对方分别投射N枚和M枚导弹(发射时间,飞行时间,伤害值),同时两国各自都有防御系统 ...

  8. vim编辑下Python2.0自动补全

    Python自动补全有vim编辑下和python交互模式下,下面分别介绍如何在这2种情况下实现Tab键自动补全. 一.vim python自动补全插件:pydiction 可以实现下面python代码 ...

  9. 看啦这么就别人的博客 我也来写一篇! Object转换其他类型

    package com.sinitek.framework.util; import java.math.BigDecimal;import java.sql.Timestamp;import jav ...

  10. H5 认识canvas

    不同于SVG,HTML中的元素canvas只支持一种原生的图形绘制:矩形.所有其他的图形的绘制都至少需要生成一条路径.不过,我们拥有众多路径生成的方法让复杂图形的绘制成为了可能. canvas提供了三 ...