• 技术文章 >后端开发 >php教程

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

    2016-05-30 14:59:27原创243
    本文实例讲述了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('');
        $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程序设计有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:PHP中数据类型转换的三种方式_PHP 下一篇:php简单实现多字节字符串翻转的方法_PHP
    PHP编程就业班

    相关文章推荐

    • PHP中如何读取CSV内容并存入一个数组中• 无数据库的详细域名查询程序PHP版(5)_PHP教程• 在线短消息收发的程序,不用数据库_PHP教程• PHP详细彻底学习Smarty_php技巧• [视频教程]PHP100视频教程57:PHP备份数据库原理和方法

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网