欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

php的微信公众平台开发接口类

程序员文章站 2022-05-03 22:13:37
responseMsg(); }else{ $wechatObj->valid(); } class wechatCallbackapiTest { //验证消息 public function valid() { $echoStr = $_GET["echostr"]; if($this->che... ......
<?php

define("token", "weixin");
$wechatobj = new wechatcallbackapitest();
if (!isset($_get['echostr'])) {
  $wechatobj->responsemsg();
}else{
  $wechatobj->valid();
}
class wechatcallbackapitest
{
  //验证消息
  public function valid()
  {
    $echostr = $_get["echostr"];
    if($this->checksignature()){
      echo $echostr;
      exit;
    }
  }
  //检查签名
  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;
    }
  }
  //响应消息
  public function responsemsg()
  {
    $poststr = $globals["http_raw_post_data"];
    if (!empty($poststr)){
      $this->logger("r ".$poststr);
      $postobj = simplexml_load_string($poststr, 'simplexmlelement', libxml_nocdata);
      $rx_type = trim($postobj->msgtype);
      switch ($rx_type)
      {
        case "event":
          $result = $this->receiveevent($postobj);
          break;
        case "text":
          $result = $this->receivetext($postobj);
          break;
        case "image":
          $result = $this->receiveimage($postobj);
          break;
        case "location":
          $result = $this->receivelocation($postobj);
          break;
        case "voice":
          $result = $this->receivevoice($postobj);
          break;
        case "video":
          $result = $this->receivevideo($postobj);
          break;
        case "link":
          $result = $this->receivelink($postobj);
          break;
        default:
          $result = "unknow msg type: ".$rx_type;
          break;
      }
      $this->logger("t ".$result);
      echo $result;
    }else {
      echo "";
      exit;
    }
  }
  //接收事件消息
  private function receiveevent($object)
  {
    $content = "";
    switch ($object->event)
    {
      case "subscribe":
        $content = "欢迎关注方倍工作室 ";
        $content .= (!empty($object->eventkey))?("\n来自二维码场景 ".str_replace("qrscene_","",$object->eventkey)):"";
        break;
      case "unsubscribe":
        $content = "取消关注";
        break;
      case "scan":
        $content = "扫描场景 ".$object->eventkey;
        break;
      case "click":
        switch ($object->eventkey)
        {
          case "company":
            $content = "方倍工作室提供互联网相关产品与服务。";
            break;
          default:
            $content = "点击菜单:".$object->eventkey;
            break;
        }
        break;
      case "location":
        $content = "上传位置:纬度 ".$object->latitude.";经度 ".$object->longitude;
        break;
      case "view":
        $content = "跳转链接 ".$object->eventkey;
        break;
      default:
        $content = "receive a new event: ".$object->event;
        break;
    }
    $result = $this->transmittext($object, $content);
    return $result;
  }
  //接收文本消息
  private function receivetext($object)
  {
    switch ($object->content)
    {
      case "文本":
        $content = "这是个文本消息";
        break;
      case "图文":
      case "单图文":
        $content = array();
        $content[] = array("title"=>"单图文标题",  "description"=>"单图文内容", "picurl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "url" =>"http://m.cnblogs.com/?u=txw1958");
        break;
      case "多图文":
        $content = array();
        $content[] = array("title"=>"多图文1标题", "description"=>"", "picurl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "url" =>"http://m.cnblogs.com/?u=txw1958");
        $content[] = array("title"=>"多图文2标题", "description"=>"", "picurl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "url" =>"http://m.cnblogs.com/?u=txw1958");
        $content[] = array("title"=>"多图文3标题", "description"=>"", "picurl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "url" =>"http://m.cnblogs.com/?u=txw1958");
        break;
      case "音乐":
        $content = array("title"=>"最炫民族风", "description"=>"歌手:凤凰传奇", "musicurl"=>"http://121.199.4.61/music/zxmzf.mp3", "hqmusicurl"=>"http://121.199.4.61/music/zxmzf.mp3");
        break;
      default:
        $content = date("y-m-d h:i:s",time());
        break;
    }
    if(is_array($content)){
      if (isset($content[0]['picurl'])){
        $result = $this->transmitnews($object, $content);
      }else if (isset($content['musicurl'])){
        $result = $this->transmitmusic($object, $content);
      }
    }else{
      $result = $this->transmittext($object, $content);
    }
    return $result;
  }
  private function receiveimage($object)
  {
    $content = array("mediaid"=>$object->mediaid);
    $result = $this->transmitimage($object, $content);
    return $result;
  }
  private function receivelocation($object)
  {
    $content = "你发送的是位置,纬度为:".$object->location_x.";经度为:".$object->location_y.";缩放级别为:".$object->scale.";位置为:".$object->label;
    $result = $this->transmittext($object, $content);
    return $result;
  }
  private function receivevoice($object)
  {
    if (isset($object->recognition) && !empty($object->recognition)){
      $content = "你刚才说的是:".$object->recognition;
      $result = $this->transmittext($object, $content);
    }else{
      $content = array("mediaid"=>$object->mediaid);
      $result = $this->transmitvoice($object, $content);
    }
    return $result;
  }
  private function receivevideo($object)
  {
    $content = array("mediaid"=>$object->mediaid, "thumbmediaid"=>$object->thumbmediaid, "title"=>"", "description"=>"");
    $result = $this->transmitvideo($object, $content);
    return $result;
  }
  private function receivelink($object)
  {
    $content = "你发送的是链接,标题为:".$object->title.";内容为:".$object->description.";链接地址为:".$object->url;
    $result = $this->transmittext($object, $content);
    return $result;
  }
  private function transmittext($object, $content)
  {
    $texttpl = "<xml>
<tousername><![cdata[%s]]></tousername>
<fromusername><![cdata[%s]]></fromusername>
<createtime>%s</createtime>
<msgtype><![cdata[text]]></msgtype>
<content><![cdata[%s]]></content>
</xml>";
    $result = sprintf($texttpl, $object->fromusername, $object->tousername, time(), $content);
    return $result;
  }
  private function transmitimage($object, $imagearray)
  {
    $itemtpl = "<image>
    <mediaid><![cdata[%s]]></mediaid>
</image>";
    $item_str = sprintf($itemtpl, $imagearray['mediaid']);
    $texttpl = "<xml>
<tousername><![cdata[%s]]></tousername>
<fromusername><![cdata[%s]]></fromusername>
<createtime>%s</createtime>
<msgtype><![cdata[image]]></msgtype>
$item_str
</xml>";
    $result = sprintf($texttpl, $object->fromusername, $object->tousername, time());
    return $result;
  }
  private function transmitvoice($object, $voicearray)
  {
    $itemtpl = "<voice>
    <mediaid><![cdata[%s]]></mediaid>
</voice>";
    $item_str = sprintf($itemtpl, $voicearray['mediaid']);
    $texttpl = "<xml>
<tousername><![cdata[%s]]></tousername>
<fromusername><![cdata[%s]]></fromusername>
<createtime>%s</createtime>
<msgtype><![cdata[voice]]></msgtype>
$item_str
</xml>";
    $result = sprintf($texttpl, $object->fromusername, $object->tousername, time());
    return $result;
  }
  private function transmitvideo($object, $videoarray)
  {
    $itemtpl = "<video>
    <mediaid><![cdata[%s]]></mediaid>
    <thumbmediaid><![cdata[%s]]></thumbmediaid>
    <title><![cdata[%s]]></title>
    <description><![cdata[%s]]></description>
</video>";
    $item_str = sprintf($itemtpl, $videoarray['mediaid'], $videoarray['thumbmediaid'], $videoarray['title'], $videoarray['description']);
    $texttpl = "<xml>
<tousername><![cdata[%s]]></tousername>
<fromusername><![cdata[%s]]></fromusername>
<createtime>%s</createtime>
<msgtype><![cdata[video]]></msgtype>
$item_str
</xml>";
    $result = sprintf($texttpl, $object->fromusername, $object->tousername, time());
    return $result;
  }
  private function transmitnews($object, $newsarray)
  {
    if(!is_array($newsarray)){
      return;
    }
    $itemtpl = "    <item>
        <title><![cdata[%s]]></title>
        <description><![cdata[%s]]></description>
        <picurl><![cdata[%s]]></picurl>
        <url><![cdata[%s]]></url>
    </item>
";
    $item_str = "";
    foreach ($newsarray as $item){
      $item_str .= sprintf($itemtpl, $item['title'], $item['description'], $item['picurl'], $item['url']);
    }
    $newstpl = "<xml>
<tousername><![cdata[%s]]></tousername>
<fromusername><![cdata[%s]]></fromusername>
<createtime>%s</createtime>
<msgtype><![cdata[news]]></msgtype>
<content><![cdata[]]></content>
<articlecount>%s</articlecount>
<articles>
$item_str</articles>
</xml>";
    $result = sprintf($newstpl, $object->fromusername, $object->tousername, time(), count($newsarray));
    return $result;
  }
  private function transmitmusic($object, $musicarray)
  {
    $itemtpl = "<music>
    <title><![cdata[%s]]></title>
    <description><![cdata[%s]]></description>
    <musicurl><![cdata[%s]]></musicurl>
    <hqmusicurl><![cdata[%s]]></hqmusicurl>
</music>";
    $item_str = sprintf($itemtpl, $musicarray['title'], $musicarray['description'], $musicarray['musicurl'], $musicarray['hqmusicurl']);
    $texttpl = "<xml>
<tousername><![cdata[%s]]></tousername>
<fromusername><![cdata[%s]]></fromusername>
<createtime>%s</createtime>
<msgtype><![cdata[music]]></msgtype>
$item_str
</xml>";
    $result = sprintf($texttpl, $object->fromusername, $object->tousername, time());
    return $result;
  }
  private function logger($log_content)
  {
    if(isset($_server['http_appname'])){   //sae
      sae_set_display_errors(false);
      sae_debug($log_content);
      sae_set_display_errors(true);
    }else if($_server['remote_addr'] != "127.0.0.1"){ //local
      $max_size = 10000;
      $log_filename = "log.xml";
      if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
      file_put_contents($log_filename, date('h:i:s')." ".$log_content."\r\n", file_append);
    }
  }
}
?>