加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP微信API接口类

发布时间:2020-12-12 21:41:12 所属栏目:PHP教程 来源:网络整理
导读:本文实例为大家分享了PHP微信接口类,供大家参考,具体内容如下 //define your token //定义TOKEN秘钥 define("TOKEN","weixin"); //实例化微信对象 $wechatObj = new wechatCallbackapiTest(); //验证成功后注释valid方法 //$wechatObj-valid(); //开启自动

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

//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,$contentStr);
          echo $resultStr;
        }elseif($keyword == 1){
          $msgType = "text";
          $contentStr = "1.匪警:110n2.火警:119n3.急救:120";
          $resultStr = sprintf($textTpl,$contentStr);
          echo $resultStr;
        }elseif($keyword == 2){
          $msgType = "text";
          $contentStr = "1.中国移动:10086n2.中国联通:10010";
          $resultStr = sprintf($textTpl,$contentStr);
          echo $resultStr;
        }
      }else{
        echo "不能不说话";
      }
    }
    ////////////////////////////////////////////////////////////////////////////////////
    //接受图片信息
    if($msgType == "image"){
        //如果发送文本信息
        $msgType = "text";
        //回复内容
        $contentStr = "你发送的是图片文件";
        //格式化字符串
        $resultStr = sprintf($textTpl,$contentStr);
        //将xml信息返回给客户端
        echo $resultStr;
    }
    ////////////////////////////////////////////////////////////////////////////////////
    if($msgType == "voice"){
        //如果发送文本信息
        $msgType = "text";
        //回复内容
        $contentStr = "你发送的是语音文件";
        //格式化字符串
        $resultStr = sprintf($textTpl,$contentStr);
        //将xml信息返回给客户端
        echo $resultStr;
    }
    ////////////////////////////////////////////////////////////////////////////////////
    if($msgType == "video"){
        //如果发送文本信息
        $msgType = "text";
        //回复内容
        $contentStr = "你发送的是视频文件";
        //格式化字符串
        $resultStr = sprintf($textTpl,$contentStr);
        //将xml信息返回给客户端
        echo $resultStr;
    }
    ////////////////////////////////////////////////////////////////////////////////////
    if($msgType == "shortvideo"){
        //如果发送文本信息
        $msgType = "text";
        //回复内容
        $contentStr = "你发送的是小视频文件";
        //格式化字符串
        $resultStr = sprintf($textTpl,$contentStr);
        //将xml信息返回给客户端
        echo $resultStr;
    }
    ////////////////////////////////////////////////////////////////////////////////////
    if($msgType == "location"){
        //如果发送文本信息
        $msgType = "text";
        //回复内容
        $contentStr = "你发送的是地理位置文件";
        //格式化字符串
        $resultStr = sprintf($textTpl,$contentStr);
        //将xml信息返回给客户端
        echo $resultStr;
    }
    ////////////////////////////////////////////////////////////////////////////////////
    if($msgType == "link"){
        //如果发送文本信息
        $msgType = "text";
        //回复内容
        $contentStr = "你发送的是连接文件";
        //格式化字符串
        $resultStr = sprintf($textTpl,$contentStr);
        //将xml信息返回给客户端
        echo $resultStr;
    }
    ////////////////////////////////////////////////////////////////////////////////////
    /*
    //判断用户发送关键词是否为空      

    if(!empty( $keyword ))
    {
      //如果发送文本信息
      $msgType = "text";
      //回复内容
      $contentStr = "大家好,我是hero";
      //格式化字符串
      $resultStr = sprintf($textTpl,$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;
}

}
}

?>

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读