php微信公众平台开发类实例

5年以前  |  阅读数:296 次  |  编程语言:PHP 

本文实例讲述了php微信公众平台开发类。分享给大家供大家参考。具体分析如下:

ThinkWechat.php类文件如下:


    <?php
    class Wechat {
      /**
       * 微信推送过来的数据或响应数据
       * @var array
       */
      private $data = array();
      /**
       * 构造方法,用于实例化微信SDK
       * @param string $token 微信开放平台设置的TOKEN
       */
      public function __construct($token) {
        $this->auth($token) || exit;
        if(!empty($_GET['echostr'])){
          exit($_GET['echostr']);
        } else {
          try
          {
            $xml = file_get_contents("php://input");
            $xml = new SimpleXMLElement($xml);
            $xml || exit;
            foreach ($xml as $key => $value) {
              $this->data[$key] = strval($value);
            }
          }catch(Exception $e){
          }
        }
      }
      /**
       * 获取微信推送的数据
       * @return array 转换为数组后的数据
       */
      public function request(){
        return $this->data;
      }
      /**
       * * 响应微信发送的信息(自动回复)
       * @param string $to   接收用户名
       * @param string $from  发送者用户名
       * @param array $content 回复信息,文本信息为string类型
       * @param string $type  消息类型
       * @param string $flag  是否新标刚接受到的信息
       * @return string     XML字符串
       */
      public function response($content, $type = 'text', $flag = 0){
        /* 基础数据 */
        $this->data = array(
          'ToUserName'  => $this->data['FromUserName'],
          'FromUserName' => $this->data['ToUserName'],
          'CreateTime'  => time(),
          'MsgType'   => $type,
        );
        /* 添加类型数据 */
        $this->$type($content);
        /* 添加状态 */
        $this->data['FuncFlag'] = $flag;
        /* 转换数据为XML */
        $xml = new SimpleXMLElement('<xml></xml>');
        $this->data2xml($xml, $this->data);
        exit($xml->asXML());
      }
      /**
       * 回复文本信息
       * @param string $content 要回复的信息
       */
      private function text($content){
        $this->data['Content'] = $content;
      }
      /**
       * 回复音乐信息
       * @param string $content 要回复的音乐
       */
      private function music($music){
        list(
          $music['Title'], 
          $music['Description'], 
          $music['MusicUrl'], 
          $music['HQMusicUrl']
        ) = $music;
        $this->data['Music'] = $music;
      }
      /**
       * 回复图文信息
       * @param string $news 要回复的图文内容
       */
      private function news($news){
        $articles = array();
        foreach ($news as $key => $value) {
          list(
            $articles[$key]['Title'],
            $articles[$key]['Description'],
            $articles[$key]['PicUrl'],
            $articles[$key]['Url']
          ) = $value;
          if($key >= 9) { break; } //最多只允许10调新闻
        }
        $this->data['ArticleCount'] = count($articles);
        $this->data['Articles'] = $articles;
      }
      /**
       * 数据XML编码
       * @param object $xml XML对象
       * @param mixed $data 数据
       * @param string $item 数字索引时的节点名称
       * @return string
       */
      private function data2xml($xml, $data, $item = 'item') {
        foreach ($data as $key => $value) {
          /* 指定默认的数字key */
          is_numeric($key) && $key = $item;
          /* 添加子元素 */
          if(is_array($value) || is_object($value)){
            $child = $xml->addChild($key);
            $this->data2xml($child, $value, $item);
          } else {
            if(is_numeric($value)){
              $child = $xml->addChild($key, $value);
            } else {
              $child = $xml->addChild($key);
              $node = dom_import_simplexml($child);
              $node->appendChild($node->ownerDocument->createCDATASection($value));
            }
          }
        }
      }
      /**
       * 对数据进行签名认证,确保是微信发送的数据
       * @param string $token 微信开放平台设置的TOKEN
       * @return boolean    true-签名正确,false-签名错误
       */
      private function auth($token){
        if(empty($_GET['signature'])) return;
        /* 获取数据 */
        $data = array($_GET['timestamp'], $_GET['nonce'], $token);
        $sign = $_GET['signature'];
        /* 对数据进行字典排序 */
        sort($data,SORT_STRING);
        /* 生成签名 */
        $signature = sha1(implode($data));
        return $signature === $sign;
      }
    }

希望本文所述对大家的php程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例