• 教程三:Wechat库的使用


    上一篇教程中我们提供了wechat的php的库,
    这里我们简要介绍一个这个库的源码和使用.

    这个库的主文件为`Wechat.php`,
    其余的几个文件都是为这个文件服务的,
    提供加解密,消息拼接等功能.

    `Wechat.php`中的一个主要类为`Wechat`,
    这个类提供了接收到各种微信消息的回调函数,
    例如用户关注本公众号的时候会调用到`Wechat`类的`onSubscribe`函数,
    我们就可以继承`Wechat`类,然后复写`onSubscribe`函数,实现自己的回复了.

    我们在使用`Wechat`这个类的时候,需要继承`Wechat`实现自己的子类,
    以便使用这个类提供的各种消息回调函数.
    然后创建这个子类的实例,用于对request请求的处理.

    例如:

    复制代码
    <font size="4">// 继承Wechat
    class TestWechat extends Wechat {
    }
    // step 1: 创建TestWechat类的实例
    $wechat = new TestWechat(array(
        'token' => 'weixin',
        'aeskey' => 'xxx',
        'appid' => 'wx5d1fb434a1652ae8',
        'debug' => true
        ));
    // setp 2: 检测消息
    $wechat->run();</font>
    复制代码

    在创建`TestWechat`实例过程中会调用父类`Wechat`的构造函数,
    这里完成了token的验证,以及请求数据的解析和暂存.
    下面是对Wechat构造函数的说明.

    复制代码
    <font size="4">public function __construct($config=array('token'=>'', 'aeskey'=>'', 'appid'=>'', 'debug' => FALSE)) {
      // 获取创建实例时传进来的阐述
      $token = $config['token'];
      $aeskey = $config['aeskey'];
      $appid = $config['appid'];
      $debug = $config['debug'];
    
      // 调用token验证函数,如果失败直接退出
      // 无论是验证token还是用户发送消息都会检测token,已提高程序的安全性
      if (!$this->validateSignature($token)) {
        exit('签名验证失败');
      }
    
      // 检测是否是单纯的token验证请求
      // 如果是   返回echostr并退出
      if ($this->isValidateIncomingConn()) {
        // 网址接入验证
        exit($_GET['echostr']);
      }
    
      // 如果是用户发送的信息请求,需要验证'HTTP_RAW_POST_DATA'数据
      if (!isset($GLOBALS['HTTP_RAW_POST_DATA'])) {
        exit('缺少数据');
      }
    
      $this->debug = $debug;
      set_error_handler(array(&$this, 'errorHandler'));
      // 设置错误处理函数,将错误通过文本消息回复显示
    
      // 检测消息是否加密
      if (isset($_GET['encrypt_type'])) {
        $this->encrypted = $_GET['encrypt_type'] == 'aes';
      }
    
      // 如果消息加密了,调用函数对消息进行解密
      if ($this->encrypted) {
        $this->msgCryptor = new wxBizMsgCrypt($token, $aeskey, $appid);
      }
    
      // 将请求消息储存起来备用
      $this->savePostData();
    }</font>
    复制代码

    之后会调用run()函数,
    run函数会检测微信服务器发送过来的消息类型,
    然后根据不同的类型,调用Wechat中的对应函数进行处理.
    因为我们使用的`TestWechat`集成了`Wechat`,
    我们只需要在`TestWechat`中复写一下用到的函数,
    就会在接收到相应的消息时调用到我们复写的函数.
    这也是我们再上一个帖子中复写`onText`函数的原因.

    复制代码
    <font size="4">public function run() {
      switch ($this->getRequest('msgtype')) {
        // 如果消息类型为 event
        case 'event':
          switch ($this->getRequest('event')) {
            // 订阅消息
            case 'subscribe':
              $this->onSubscribe();
              break;
            // 退订消息
            case 'unsubscribe':
              $this->onUnsubscribe();
              break;
            //
            case 'SCAN':
              $this->onScan();
              break;
    
            case 'LOCATION':
              $this->onEventLocation();
              break;
    
            case 'CLICK':
              $this->onClick();
              break;
    
          }
    
          break;
        // 文本消息
        case 'text':
          $this->onText();
          break;
        // 图片消息
        case 'image':
          $this->onImage();
          break;
        // 位置消息
        case 'location':
          $this->onLocation();
          break;
        // 链接消息
        case 'link':
          $this->onLink();
          break;
        // 语音消息
        case 'voice':
          $this->onVoice();
          break;
    
        default:
          $this->onUnknown();
          break;
    
      }
    }</font>
    复制代码
  • 相关阅读:
    MVC实现类似QQ的网页聊天功能-ajax(下)
    SQLServer中跨库复制数据
    MVC实现类似QQ的网页聊天功能-Ajax(上)
    好看的Select下拉框是如何制造的
    Vss服务端用户存在,但客户端登陆不进去
    Jquery-uploadify多文件上传插件使用介绍
    jQuery mouseover,mouseout事件多次执行的问题处理
    解决svn状态图标不显示的办法
    ASP.NET获取用户端的真实IP
    js中时间戳与日期转换-js日期操作
  • 原文地址:https://www.cnblogs.com/52geek/p/6247297.html
Copyright © 2020-2023  润新知