基于微信公众平台开发SDK(demo)扩展例子
该扩展基于官方的微信公众平台SDK,这里只做了简单地封装,实现了一些基本的功能,如天气查询,翻译,自动聊天机器人,自定义菜单接口)仅供学习之用.代码如下:
<?php
define("TOKEN", "xingans");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();
class wechatCallbackapiTest {
//签名验证公共接口
public function valid() {
$echoStr = $_GET["echostr"];
if ($this->checkSignature()) {
echo $echoStr;
exit;
}
}
//主入口处理函数
public function responseMsg() {
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!emptyempty($postStr)) {
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$msgType = trim($postObj->MsgType);
switch ($msgType) {
case 'text':
$resultStr = $this->handleText($postObj);
break;
case 'event':
$resultStr = $this->handleEvent($postObj);
break;
default:
$resultStr = $this->handleDefault($postObj);
break;
}
echo $resultStr;
} else {
echo "Error";
exit;
}
}
//处理文本消息
private function handleText($obj) {
$keyword = trim($obj->Content);
if (preg_match('/天气/', $keyword)) {
$contentStr = $this->handleWeather($obj);
} elseif (preg_match('/翻译/', $keyword)) {
$contentStr = $this->handleTranslation($obj);
} else {
$contentStr = $this->handleChat($obj);
}
return $this->handleStr($obj, $contentStr);
}
//处理天气
private function handleWeather($obj) {
$keyword = mb_substr($obj->Content, -2, 2, 'utf-8');
$zone = mb_substr($obj->Content, 0, -2, 'utf-8');
if ($keyword == '天气' && !emptyempty($zone)) {
$zoneArr = json_decode(file_get_contents('http://api.k780.com:88/?app=weather.city&format=json') , true);
$zoneArr = $zoneArr['result'];
$cityId = '';
foreach ($zoneArr as $value) {
if ($zone == $value['citynm']) {
$cityId = $value['weaid'];
break;
}
}
if (!emptyempty($cityId)) {
$data = file_get_contents("http://api.k780.com:88/?app=weather.today&weaid=$cityId&appkey=10638&sign=3736578f099375665f9f141a6326b757&format=json");
$data = json_decode($data);
$contentStr = "今天是:" . $data->result->days . "," . $data->result->week . "," . $data->result->citynm . "天气:" . $data->result->weather . "n温度:" . $data->result->temperature . ",
" . $data->result->wind_direction . "," . $data->result->wind_power . ", 最低温度:" . $data->result->temp_low . ",最高温度:" . $data->result->temp_high;
} else {
$contentStr = '找不到输入的城市!';
}
} else {
$contentStr = '输入的查询格式不正确!';
}
return $contentStr;
}
//处理翻译
private function handleTranslation($obj) {
$keyword = mb_substr($obj->Content, 0, 2, 'utf-8');
$words = mb_substr($obj->Content, 2, 220, 'utf-8');
if ($keyword == '翻译' && !emptyempty($words)) {
$data = file_get_contents('http://fanyi.youdao.com/openapi.do?keyfrom=zfsblog&key=364295447&type=data&doctype=json&version=1.1&q=' . urlencode($words));
$data = json_decode($data, true);
switch ($data['errorCode']) {
case '0':
$contentStr = $data['translation'][0];
break;
case '20':
$contentStr = '要翻译的文本过长';
break;
case '30':
$contentStr = '无法进行有效的翻译';
break;
case '40':
$contentStr = '不支持的语言类型';
break;
case '50':
$contentStr = '无效的key';
break;
default:
$contentStr = 'Error';
break;
}
} else {
$contentStr = '输入的翻译格式不正确!';
}
return $contentStr;
}
//处理聊天信息
private function handleChat($obj) {
$keywords = $obj->Content;
$curlPost = array(
"chat" => $keywords
);
$ch = curl_init(); //初始化curl
curl_setopt($ch, CURLOPT_URL, 'http://www.xiaojo.com/bot/chata.php'); //抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0); //设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1); //post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($ch); //运行curl
curl_close($ch);
if (!emptyempty($data)) {
$contentStr = $data;
} else {
$ran = rand(1, 5);
switch ($ran) {
case 1:
$contentStr = "小九今天累了,明天再陪你聊天吧";
break;
case 2:
$contentStr = "小九睡觉喽~~";
break;
case 3:
$contentStr = "呼呼~~呼呼~~";
break;
case 4:
$contentStr = "你话好多啊,不跟你聊了";
break;
case 5:
$contentStr = "你话好多啊,不跟你聊了";
break;
}
}
return $contentStr;
}
//创建自定义菜单
public function createMenu($data, $token) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
//查询自定义菜单
function getMenu($token) {
$url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=$token";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //获取数据返回
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); //在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
return $output = curl_exec($ch);
}
//删除自定义菜单
public function deleteMenu($token) {
$url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" . $token;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
//处理事件消息
private function handleEvent($obj) {
$content = '';
switch ($obj->Event) {
case 'subscribe':
$content.= "welcome-欢迎关注该公众号号!";
break;
case 'unsubscribe':
$content.= "感谢您一直以来对该公众号的关注,再见!";
break;
default:
$content.= "";
break;
}
return $this->handleStr($obj, $content);
}
//处理回复消息字符串
private function handleStr($obj, $content = '', $flag = 0) {
$textTpl = "";
return sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time() , $content, $flag);
}
//签名验证函数
private function checkSignature() {
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
//开源代码phprm.com
$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;
}
}
}文章链接:http://www.phprm.com/develop/fs5926.html
随便收藏,请保留本文地址!