首页 > 语言 > PHP > 正文

PHP微信API接口类

2024-05-04 23:49:17
字体:
来源:转载
供稿:网友

本文实例为大家分享了PHP微信接口类,供大家参考,具体内容如下

<?php/** * wechat php test */ //define your token//定义TOKEN秘钥define("TOKEN", "weixin"); //实例化微信对象$wechatObj = new wechatCallbackapiTest();//验证成功后注释valid方法//$wechatObj->valid();//开启自动回复功能$wechatObj->responseMsg();  //定义类文件class wechatCallbackapiTest{  //实现valid验证方法:实现对接微信公众平台  public function valid()  {    //接受随机字符串    $echoStr = $_GET["echostr"];     //valid signature , option    //进行用户数字签名验证    if($this->checkSignature()){      //如果成功,则返回接受到的随机字符串      echo $echoStr;      //退出      exit;    }  }  //定义自动回复功能  public function responseMsg()  {    //get post data, May be due to the different environments    //接受用户端发送过来的xml数据    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];     //extract post data    //判断xml数据是否为空    if (!empty($postStr)){        /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,          the best way is to check the validity of xml by yourself */        libxml_disable_entity_loader(true);        //通过simplexml进行xml解析        $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);        //接受微信的手机端        $fromUsername = $postObj->FromUserName;        //微信公众平台        $toUsername = $postObj->ToUserName;        //接受用户发送的关键词        $keyword = trim($postObj->Content);        //1.接受用户消息类型        $msgType = $postObj -> MsgType;        //时间戳        $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($msgType == 'text'){          if(!empty( $keyword ))          {            /*这是一个实例              //如果发送文本信息              $msgType = "text";              //回复内容              if($keyword == "李楠"){                $contentStr = "叫我干嘛";              }else{                $contentStr = "叫我干嘛";              }              //格式化xml模板,参数与上面的模板是一一对应的.fromUsername和头Username是相反的,只写带%s的              $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);               //将xml信息返回给客户端              echo $resultStr;            */            if($keyword == "?" || $keyword == "?"){              $msgType = "text";              $contentStr = "1.特种服务号码/n2.通讯服务号码";              $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);              echo $resultStr;            }elseif($keyword == 1){              $msgType = "text";              $contentStr = "1.匪警:110/n2.火警:119/n3.急救:120";              $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);              echo $resultStr;            }elseif($keyword == 2){              $msgType = "text";              $contentStr = "1.中国移动:10086/n2.中国联通:10010";              $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);              echo $resultStr;            }          }else{            echo "不能不说话";          }        }        ////////////////////////////////////////////////////////////////////////////////////        //接受图片信息        if($msgType == "image"){            //如果发送文本信息            $msgType = "text";            //回复内容            $contentStr = "你发送的是图片文件";            //格式化字符串            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);            //将xml信息返回给客户端            echo $resultStr;        }        ////////////////////////////////////////////////////////////////////////////////////        if($msgType == "voice"){            //如果发送文本信息            $msgType = "text";            //回复内容            $contentStr = "你发送的是语音文件";            //格式化字符串            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);            //将xml信息返回给客户端            echo $resultStr;        }        ////////////////////////////////////////////////////////////////////////////////////        if($msgType == "video"){            //如果发送文本信息            $msgType = "text";            //回复内容            $contentStr = "你发送的是视频文件";            //格式化字符串            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);            //将xml信息返回给客户端            echo $resultStr;        }        ////////////////////////////////////////////////////////////////////////////////////        if($msgType == "shortvideo"){            //如果发送文本信息            $msgType = "text";            //回复内容            $contentStr = "你发送的是小视频文件";            //格式化字符串            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);            //将xml信息返回给客户端            echo $resultStr;        }        ////////////////////////////////////////////////////////////////////////////////////        if($msgType == "location"){            //如果发送文本信息            $msgType = "text";            //回复内容            $contentStr = "你发送的是地理位置文件";            //格式化字符串            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);            //将xml信息返回给客户端            echo $resultStr;        }        ////////////////////////////////////////////////////////////////////////////////////        if($msgType == "link"){            //如果发送文本信息            $msgType = "text";            //回复内容            $contentStr = "你发送的是连接文件";            //格式化字符串            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);            //将xml信息返回给客户端            echo $resultStr;        }        ////////////////////////////////////////////////////////////////////////////////////        /*        //判断用户发送关键词是否为空                       if(!empty( $keyword ))        {          //如果发送文本信息          $msgType = "text";          //回复内容          $contentStr = "大家好,我是hero";          //格式化字符串          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);          //将xml信息返回给客户端          echo $resultStr;        }else{          echo "Input something...";        }        */    }else {      echo "";      exit;    }  }       private function checkSignature()  {    // you must define TOKEN by yourself    //判断是否定义了TOKEN,如果没有就抛出一个异常    if (!defined("TOKEN")) {      throw new Exception('TOKEN is not defined!');    }         $signature = $_GET["signature"];//接受微信加密签名    $timestamp = $_GET["timestamp"];//接受时间戳    $nonce = $_GET["nonce"];//接受随机数             $token = TOKEN;//把TOKEN常量赋值给$token    //把相关参数组装成数组    $tmpArr = array($token, $timestamp, $nonce);    // use SORT_STRING rule    //排序    sort($tmpArr, SORT_STRING);    //把排序后的数组转换成字符串    $tmpStr = implode( $tmpArr );    //通过哈希算法加密    $tmpStr = sha1( $tmpStr );    //与加密签名进行对比    if( $tmpStr == $signature ){      //相同返回true      return true;    }else{      //不同返回false      return false;    }  }} ?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到PHP教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选