微信开发学习日记(八):7步看懂weiphp插件机制,核心目标是响应微信请求
又经过了几个小时的梳理、回顾,截至目前,终于对weiphp这个框架的机制搞明白了些。想要完全明白,自然还需要大把的时间。
第1步:
配置微信公众号,http://weiphp.jiutianniao.com/ ... .html
从上面这个配置可以看出,微信请求呗weiphp的入口文件index.php接收了,可能会被/home/weixin/index/这个action响应。
第2步:
index.php入口文件,校验了是否是微信请求。
/**
* 微信接入验证
* 在入口进行验证而不是放到框架里验证,主要是解决验证URL超时的问题
*/
if (! empty ( $_GET ['echostr'] ) && ! empty ( $_GET ["signature"] ) && ! empty ( $_GET ["nonce"] )) {
}
第3步:
入口已经验证过了,即不是“第一次” ,请求会被分发到home模块的WeixinController的index这个方法。
第4步:
在index方法中, 首先获得的就是token、openid、粉丝等信息。
最关键的处理是,回复数据。
// 回复数据
$this->reply ( $data, $weixin );
第5步:
在reply函数中, 就是寻找合适的插件进行消息响应。
涉及到的问题有,安装了哪些插件、哪些启用了、哪些有权限。
准备了可用插件之后, 根据消息的类型,事件、地理位置、订阅,寻找合适的插件,比如如果有location事件,插件就执行对应的回调方法。
还有的情况是,消息。
根据关键字,回复消息。
这个时候,问题就变成了 插件定位问题。
a.通过插件标识名、插件名或者自定义关键词来定位处理的插件
b.通过精准关键词来定位处理的插件 token=0是插件安装时初始化的模糊关键词,所有公众号都可以用
c.通过模糊关键词来定位处理的插件
d.最终也无法定位到插件,终止操作
疑问:通过代码,发现location等事件,有很多插件都会处理这个事件。而消息,只会找到一个插件。是这么个情况么?
第6步:
插件的weixinmodel。
/**
* Vote模型
*/
class WeixinAddonModel extends WeixinModel {
function reply($dataArr, $keywordArr = array()) {
}
微信插件,基本都会有个WeixinModel类,如果有必要,会响应微信的请求。
第7步:
URL响应问题。
这个地方一直有疑惑,如果所谓的插件机制,就是根据用户发送到关键词,让不同的类-插件去响应,这也太没有“含金量” 了吧。难道微信的核心玩法就是这个东东么?
class VoteController extends AddonsController {
}
每个插件,可能会有Controller,响应URL请求。比如,后台管理和前台管理(不会直接和微信进行交互) ,会有一些管理方法,设置信息之类的。
另外,有些在weixinModel的reply 方法中,可能包含了插件内部定义的url,这个感觉才真的很有价值。
总结:weiphp这个微信框架,简要总结起来就4点。
1.weiphp基于Thinkphp和Onethink。疑问的是,weiphp有没有对Thinkphp和Onethink的核心代码有改动。如果有改动的话,更多的应该是对Onethink改动。
2.weiphp的核心入口,就是index.php和/home/weixin/index方法,验证和响应微信请求。
3. 插件机制,感觉就是根据关键字找插件,让插件响应请求。
4.后台管理系统、用户端的前端管理、插件机制,都是为了微信框架的核心目标“响应微信请求”。
这才是最最关键的地方呀。
微信开发学习日记(八):7步看懂weiphp插件机制,核心目标是响应微信请求的更多相关文章
- 微信开发学习日记(六):weiphp框架
最近重点在看weiphp这个开源的第三方微信公众平台框架. 在网上找微信资料,找到了这个.很早之前,就初步学习了Thinkphp和Onethink2个开源框架,当看到weiphp是用这2个框架开发的时 ...
- 微信开发学习日记(七):开源微商城wemall
最近嘛,不是在调研PHP和微信的行情么. 发现,微商城是非常火爆的一个领域,既然业务有搞头,那么技术这一块也有很多选择. 网上发现了wemall这个开源的PHP实现的微商城. 下载了开源版本,PHP后 ...
- 微信开发学习日记(五):weiphp开源框架的bug,公众号权限编辑问题
最近在研究weiphp,总体感觉还行,bug据说还挺多. 这不,我就遇到一个比较严重影响使用的.感觉不太应该出现这么严重的bug啊. weiphp的微信公众号等级,权限增加和编辑bug,看不到权限列表 ...
- C#开发学习人工智能的第一步
前言 作为一个软件开发者,我们除了要学会复制,黏贴,还要学会调用API和优秀的开源类库. 也许,有人说C#做不了人工智能,如果你相信了,那只能说明你的思想还是狭隘的. 做不了人工智能的不是C#这种语言 ...
- 小白也能看懂的插件化DroidPlugin原理(二)-- 反射机制和Hook入门
前言:在上一篇博文<小白也能看懂的插件化DroidPlugin原理(一)-- 动态代理>中详细介绍了 DroidPlugin 原理中涉及到的动态代理模式,看完上篇博文后你就会发现原来动态代 ...
- 小白也能看懂的插件化DroidPlugin原理(三)-- 如何拦截startActivity方法
前言:在前两篇文章中分别介绍了动态代理.反射机制和Hook机制,如果对这些还不太了解的童鞋建议先去参考一下前两篇文章.经过了前面两篇文章的铺垫,终于可以玩点真刀实弹的了,本篇将会通过 Hook 掉 s ...
- Force.com微信开发系列(八)生成带参数的二维码
为了满足用户渠道推广分析的需要,公众平台提供了生成带二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送.目前有两种类型的二维码,分别是临时二维码和永久二维码 ...
- python之-微信开发学习
微信公众平台技术文档https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432# 注意,最好以python3 运行,中文 ...
- android开发学习——facebook第三方登录,看了你不会后悔
给APP用原生android进行facebook第三方登录. 我们做一件事情,首先得了解其原理,这样才不会迷茫,才知道自己做到什么程度了,心里才会有底. 所以,第一步,了解第三方登录的原理:下面贴一些 ...
随机推荐
- 【BZOJ 1036】【ZJOI 2008】树的统计 树链剖分模板题
sth神犇的模板: //bzoj1036 题目:一个n个点的树每个点有一个权值,支持修改单点权值,求某两点路径上的点权和或最大点权. #include <cstdio> using nam ...
- 在windows 环境下对于 git 服务器的安装和使用
前言: 虽然说在团队开发的时候会有版本控制服务器,但是个人自己开发的时候,有的时候也需要有个版本控制下,比如,你改好了一个小的功能,然后在这个功能上继续扩展,结果扩展不成功,于是回到这个小功能上去.当 ...
- Java编程思想学习(十三) java I/O
Java中使用流来处理程序的输入和输出操作,流是一个抽象的概念,封装了程序数据于输入输出设备交换的底层细节.JavaIO中又将流分为字节流和字符流,字节流主要用于处理诸如图像,音频视频等二进制格式数据 ...
- 2-SAT开坑
Reference:http://blog.csdn.net/jarjingx/article/details/8521690 其中伍昱的ppt不错. 2SAT最裸的模型: 一国有n个党派,每个党派在 ...
- Erlang第二课 ---- bit串
Erlang是被设计来用在电信设备中的,这意味着需要处理大量的二进制数据.也正因为如此,Erlang把binary和binary string提升到了一个相当高的位置,提供了极为丰富的操作机制.当然, ...
- Android基础类之BaseAdapter
转:http://www.cnblogs.com/mandroid/archive/2011/04/05/2005525.html Android基础类之BaseAdapter BaseAdapter ...
- configure new linux
vim http://www.cnblogs.com/wswang/p/5088078.html zsh sh -c "$(curl -fsSL https://raw.github. ...
- 增强型for循环,用于遍历数组元素
/** * */ package com.cn.u4; /** * @author Administrator *增强型for */ public class ZhengQiangFor { publ ...
- POJ2823Sliding Window
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 49919 Accepted: 14391 ...
- Intent和Intent Filter Context
http://www.android-doc.com/reference/android/content/Intent.html An intent is an abstract descriptio ...