博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
教程三:Wechat库的使用
阅读量:5341 次
发布时间:2019-06-15

本文共 2797 字,大约阅读时间需要 9 分钟。

上一篇教程中我们提供了wechat的php的库,

这里我们简要介绍一个这个库的源码和使用.
这个库的主文件为`Wechat.php`,
其余的几个文件都是为这个文件服务的,
提供加解密,消息拼接等功能.
`Wechat.php`中的一个主要类为`Wechat`,
这个类提供了接收到各种微信消息的回调函数,
例如用户关注本公众号的时候会调用到`Wechat`类的`onSubscribe`函数,
我们就可以继承`Wechat`类,然后复写`onSubscribe`函数,实现自己的回复了.
我们在使用`Wechat`这个类的时候,需要继承`Wechat`实现自己的子类,
以便使用这个类提供的各种消息回调函数.
然后创建这个子类的实例,用于对request请求的处理.
例如:

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

 

在创建`TestWechat`实例过程中会调用父类`Wechat`的构造函数,

这里完成了token的验证,以及请求数据的解析和暂存.
下面是对Wechat构造函数的说明.

 

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();}

 

之后会调用run()函数,

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

 

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;  }}

 

转载于:https://www.cnblogs.com/52geek/p/6247297.html

你可能感兴趣的文章
OpenCV的配置
查看>>
spring Cache + Redis 开发数据字典以及自定义标签
查看>>
成功连上数据库顿感世界美好许多
查看>>
编程注意2
查看>>
《C++ Primer Plus》第12章 类和动态内存分配 学习笔记
查看>>
kosaraju求强连通分量
查看>>
golang里面检测对象是否实现了接口的方法
查看>>
freeswitch编译
查看>>
Validate Binary Search Tree
查看>>
Largest Divisible Subset
查看>>
win8改win7笔记
查看>>
MYSQL 数据导入导出LOAD DATA AND OUTFILE
查看>>
mysql中两表更新时产生的奇葩问题,产生死锁!
查看>>
Python正则表达式
查看>>
celery使用
查看>>
如何在win2003下安装sql2008[多次安装sql2008失败者必看]
查看>>
[C++]C++学习笔记(四)
查看>>
Vue 不睡觉教程1-从最土开始
查看>>
IT技术栈、JAVA技术栈、游戏开发技术栈
查看>>
浏览器百度点击第二页时仍然跳转到第一页
查看>>