教程三:Wechat库的使用

Posted MATLAB基于模型的设计

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了教程三: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>
复制代码

 

以上是关于教程三:Wechat库的使用的主要内容,如果未能解决你的问题,请参考以下文章

VIM 代码片段插件 ultisnips 使用教程

微信多开超简单教程

pbootcms对接微信扫码登录代码核心片段和步骤(前后端)

微信小程序开发之代码提示插件(VSCode)

使用 Pygments 检测代码片段的编程语言

如何在android库的片段中添加按钮和textView