热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于微信公众平台开发SDK(demo)扩展例子

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

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


文章链接:

随便收藏,请保留本文地址!

推荐阅读
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
author-avatar
谁的FrankyCH
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有