php实现基于微信公众平台开发SDK(demo)扩展的方法
发布:smiling 来源: PHP粉丝网 添加日期:2021-05-04 15:27:12 浏览: 评论:0
这篇文章主要介绍了php实现基于微信公众平台开发SDK(demo)扩展的方法,包括处理文本消息、天气、翻译、聊天信息及自定义菜单等,需要的朋友可以参考下
本文实例讲述了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?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"];
- $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程序设计有所帮助。
Tags: php微信公众平台 SDK demo
相关文章
- ·微信公众平台模拟登录之验证码获取(2014-08-27)
- ·微信公众平台智能机器人PHP开发示例(2014-08-27)
- ·微信公众平台的开发接口简单例子(2014-09-21)
- ·微信公众平台开发关注/取消关注事件例子(2014-09-22)
- ·基于微信公众平台开发SDK(demo)扩展例子(2014-09-22)
- ·删除粉丝表中抓取错误的数据-微信公众平台开发(2014-09-22)
- ·开发微信公众平台接口参数调试-判断用户行为(2014-09-22)
- ·微信公众平台网页获取用户OpenID方法(2015-04-08)
- ·PHP实现微信公众平台音乐点播(2020-10-29)
- ·php微信公众平台开发类实例(2021-05-19)
- ·php QQ第三方登陆SDK程序代码(2014-08-27)
- ·php版微信JS-SDK地理位置取街景实例(2018-10-30)
- ·php版本微信js-sdk支付接口类例子(2018-10-30)
- ·PHP如何实现阿里云短信sdk灵活应用在项目中的方法(2021-11-25)
- ·微信公众平台DEMO(PHP)(2019-07-30)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)