php实现基于微信公众平台开发SDK(demo)扩展的方法_php教程-查字典教程网
php实现基于微信公众平台开发SDK(demo)扩展的方法
php实现基于微信公众平台开发SDK(demo)扩展的方法
发布时间:2016-12-29 来源:查字典编辑
摘要:本文实例讲述了php实现基于微信公众平台开发SDK(demo)扩展的方法。分享给大家供大家参考。具体分析如下:该扩展基于官方的微信公众平台S...

本文实例讲述了php实现基于微信公众平台开发SDK(demo)扩展的方法。分享给大家供大家参考。具体分析如下:

该扩展基于官方的微信公众平台SDK,这里只做了简单地封装,实现了一些基本的功能(如天气查询,翻译,自动聊天机器人,自定义菜单接口)仅供学习之用.代码如下:

复制代码 代码如下: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".$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".$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"];

$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;

}

}

}

希望本文所述对大家的php程序设计有所帮助。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新php教程学习
    热门php教程学习
    编程开发子分类