教程三: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>

时间: 2024-08-08 20:50:44

教程三:Wechat库的使用的相关文章

struts2 官方系列教程三:使用struts2 标签 tag

避免被爬,先贴上本帖地址:struts2 官方系列教程一:使用struts2 标签 tag http://www.cnblogs.com/linghaoxinpian/p/6901316.html 本教材假定你已完成了HelloWorld项目,你可以在 struts2 官方系列教程三:使用struts2 标签 tag 下载本章节的代码 在上一节教程中,我们在index.jsp中使用 url tag 创建了一个超链接hello.action 这节我们将探索struts2中其它tags Web应用程

jQuery 入门教程(三): Selectors

jQuery Selector 是jQuery库中非常重要的一个组成部分. jQuery Selector 用来选择某个HTML元素,其基本语句和CSS的选择器(Selector)是一样的,所有jQuery selector 都是以$()开始. 选择HTML标记 选择某个HTML元素的方法是直接使用该元素的标记名称,比如选择所有<p>元素 $("p") 下面的例子当用户点击一个按钮时,隐藏所有的<p>元素 $(document).ready(function()

PySide——Python图形化界面入门教程(三)

PySide——Python图形化界面入门教程(三) ——使用内建新号和槽 ——Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widgets,以及将他们布局的两种不同的方法.今天我们继续讨论Python/Qt应用响应用户触发的事件:信号和槽. 当用户执行一个动作——点击按钮,选择组合框的值,在文本框中打字——这个widget就会发出一个信号.这个信号自己什么都不做,它必须和槽连接起来才行.槽是一个接受信号的执行动作的对象. 连接内建P

Linux makefile教程之更新函数库文件十[转]

使用make更新函数库文件 ——————————— 函数库文件也就是对Object文件(程序编译的中间文件)的打包文件.在Unix下,一般是由命令"ar"来完成打包工作. 一.函数库文件的成员 一个函数库文件由多个文件组成.你可以以如下格式指定函数库文件及其组成: archive(member) 这个不是一个命令,而一个目标和依赖的定义.一般来说,这种用法基本上就是为了"ar"命令来服务的.如: foolib(hack.o) : hack.o ar cr fooli

electron教程(三): 使用ffi-napi引入C++的dll

我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 进程管理 electron教程(三): 使用ffi-napi引入C++的dll ? 引言 ? 这一篇将介绍如何在node.js+electron环境中, 使用node-ffi/ffi-napi调用C/C++编写的动态链接库(即dll), 实现调用C/C++代码. 本教程适用于electron 4.x-6.x版本. 如electron 4.2

Elasticsearch入门教程(三):Elasticsearch索引&amp;映射

原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79213163 索引概念简介 通常说的索引有两种词性,名称和动词. 动词索引indexing,索引一个文档,表示把一个文档存储到索引Index里,可以用来查询和检索,es采用倒排索引 名词索引index,

微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台

原文:微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 公众号第三方平台的开放,是为了让公众号运营者,在面向垂直行业需求时,可以一键登录授权给第三方的公众号运营平台,通过第三方开发者提供的公众号第三

Junit 4 Tutorials(Junit 4 教程) 三、Junit4 断言方法

Junit 4 断言方法允许检查测试方法的期望结果值和真实返回值.Junit的org.junit.Assert类提供了各种断言方法来写junit测试.这些方法被用来检查方法的真实结果值和期望值.下列一些有用的断言方法列表: Junit 4 Assert Methods Method Description assertNull(java.lang.Object object) 检查对象是否为空 assertNotNull(java.lang.Object object) 检查对象是否不为空 as

Swift中文教程(三)--流程控制

原文:Swift中文教程(三)--流程控制 Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环.条件控制语句和循环语句中,小括号是可选的,但花括号包住这个循环体是必须的: 1 let individualScores = [75, 43, 103, 87, 12] 2 var teamScore = 0 3 for score in individualScores { 4 if score > 50 { 5 teamScore += 3

Struts2.x教程(三) Struts2拦截器

一.Struts2拦截器介绍 Struts2拦截器是使用AOP实现的,主要是针对action对象进行拦截,可以在访问action的某个方法.字段之前或之后实施拦截. 可以为action配置多个拦截器,Struts2会将这一组拦截器按照一定顺序组织成一个拦截器栈.action可以直接引用某个拦截器栈来实现配置多个拦截器的目的. 对于继承struts_default的package中的action,都会默认引用name=defaultStack的拦截器栈(在struts_default中定义了Str