【微信第三方平台】授权实现及所使用的框架解析_pur_e的博客-程序员宅基地

技术标签: 第三方平台  Symfony  授权  微信  中介者  php  

       又好久没有写博客,最近主要做了两件事。一个是安卓SDK自动打包、加固、热更新的研究,一个是微信第三方平台的授权。第一个虽然有一定的成果,但还没有完善,后续会将过程和技术记录一下,现在先整理下微信第三方平台的授权。

一、语言-PHP

       有幸使用了世界上最好的语言,对于一个年长的程序员来说,语言的语法、函数、变量、特性、面向对象等其实就是在使用中渐渐熟悉,也没有太多研究的价值。不过公司项目的PHP有一个前人留下的通用框架,使用起来蛮方便的,就仔细翻了一下源码。

二、框架

1、The EventDispatcher Component——Symfony

       框架中使用了一个事件分发框架EventDispatcher,这是Symfony中的一个子框架,可以单独使用,设计使用了中介者模式,可以减少模块间的耦合度,同时加强系统的可扩展性。

源码地址:EventDispatcher
框架介绍:The EventDispatcher Component

2、中介者模式

       这个设计模式网上一搜资料一堆,简单来说,就是将网状的耦合结构变成一个星形的松散结构。举个例子好理解一下:
       现实中的同学相互联系,要组织个同学会,有可能A去叫B、B又去通知C,A不知道C已经被通知又可能再通知一次等等,画成图则如下:
这里写图片描述
很明显,这是一个耦合网状结构,哪一个人少了都有可能导致其他人通知不到,而且再往结构中加人时,设计会麻烦、易错。而中介者模式则设立一个中介者,所有交互都通过它来做。如上面的例子,所有同学都加入一个QQ群,则这个QQ群就是一个中介者,通知只要发在QQ群中,则所有同学都会被通知到。画成图表示如下:
这里写图片描述
中介者模式就是这样一个星形结构,在结构中加人时,设计简单、清晰,扩展性高,耦合度低。

2.1 中介者模式优点

  • 一对多变成一对一,结构清晰
  • 相对独立,耦合度低,便于复用,扩展性好

2.2 中介者模式缺点

  • 中介者本身处于核心位置,压力大,且稳定性要求高
  • 中介者处理设计需要无瓶颈

2.3 适用场景

       之前也接触过这个设计模式,不过工作中用到的很少,刚好EventDispatcher这个框架用的是中介者模式,可以学习一下。

3、EventDispatcher框架

3.1 使用

       这个框架使用起来很简单:

  • A listener (PHP object) tells a central dispatcher object that it wants to listen to the kernel.response event;
  • 在dispatcher中注册一个监听者,告知想要监听kernel.response这个事件
  • At some point, the Symfony kernel tells the dispatcher object to dispatch the kernel.response event, passing with it an Event object that has access to the Response object;
  • 在需要的位置,告知dispatcher去触发kernel.response这个事件,同时传递事件对象,这个对象包含想要传递的数据
  • The dispatcher notifies (i.e. calls a method on) all listeners of the kernel.response event, allowing each of them to make modifications to the Response object.
  • dispatcher去通知所有监听kernel.response事件的监听者,这些监听者都可以对事件对象包含的数据进行修改

       这样,就将模块间相互调用转换为了事件触发,实现了模块解耦,结构也变得清晰,当然,由于没有了直接调用,源码阅读起来就麻烦多了^_^,这也是解耦的通病。

3.2 实现

       上文有源码的链接,代码比较简单,只有几个文件,就不具体分析了。

4、PHP框架

       上面是公司框架用到的一个子框架,现在分析下主PHP框架。其实从总体来看,主要实现了几个模块:输入、输出、配置、功能。如下图:
这里写图片描述
       然后就是其中具体的实现细节了,不过由于是公司正在使用的代码,不做分析。

三、微信第三方授权

       微信有官方的授权文档说明:授权流程技术说明,文档里说得很详细,不过有的地方没有提,还有的地方容易出错,这里记录一下。

  1. 第三方平台审核成功后,微信每十分钟会推送component_verify_ticket,注意配置白名单IP,收到后需要解密;
  2. 推送信息是用的POST原始数据,需要使用$encryptMsg = file_get_contents ( 'php://input' );获取,不能使用$_POST
  3. component_access_token及后面的公众号authorizer_access_token、authorizer_refresh_token注意保存,每天获取这些信息的接口是有调用次数限制的,在快过期时再去刷新;
  4. 未全网发布的第三方平台,只有配置在测试公众号中的,才可以进行授权,其他公众号会报『系统错误』;
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pur_e/article/details/50903850

智能推荐

自编码器_Jason66661010的博客-程序员宅基地

自编码器文章目录自编码器简介特点应用结构分层训练方法香草自编码器栈式自编码器1.捆绑权重2.一次训练一个自编码器3.进行无监督预训练去噪自编码器简介神经网络就是一种特殊的自编码器,区别在于自编码器的输出和输入是相同的,是一个自监督的过程,通过训练自编码器,得到每一层中的权重参数,自然地我们就得到了输入x的不同的表示(每一层代表一种)这些就是特征,自动编码器就是一种尽可能复现原数据的神经网络。自编码器通过简单地学习将输入复制到输出来工作。这一任务(就是输入训练数据, 再输出训练数据的任务)听起来似乎微

POJ 1458:Common Subsequence【最长子序列】_林次次的博客-程序员宅基地

Common SubsequenceTime Limit : 2000/1000ms (Java/Other)   Memory Limit : 20000/10000K (Java/Other)Total Submission(s) : 1   Accepted Submission(s) : 1Problem DescriptionA subsequence of a give

【原创】objdump 的使用_weixin_34362790的博客-程序员宅基地

2019独角兽企业重金招聘Python工程师标准>>> ...

Object类-复数类的定义_第2关:object类练习-复数类的定义_cntakeshi的博客-程序员宅基地

声明复数类Complex,成员变量包括double类型的实部real和double类型的虚部im,请定义如下成员方法:两个构造方法:Complex(double real, double im);Complex(),该无参构造方法内部用 this(0,0) 调用前一个构造方法;定义方法:public Complex add(Object obj) 实现两个复数相加;定义方法:public Complex minus(Object obj) 实现两个复数相减;重写Object的toString方法

随便推点

标题与内容连接中间不显示边框布局_summer_my_sunshine的博客-程序员宅基地

标题与内容连接中间不显示边框布局:1.给最外层div加个宽度,包住标题和内容;2.标题用ul,li:给ul加下边框2px,高度30px,行高30px;给li加高度28px,行高28px;给选中li加上边框2px,下边框2px白色;<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <tit...

antd Select如何中止选中_混血哲谈的博客-程序员宅基地

https://segmentfault.com/q/1010000018556609通过From中的getValueFromEvent可以控制!import React from "react";import ReactDOM from "react-dom";import "antd/dist/antd.css";import "./index.css";import...

第四章 继承_weixin_34195364的博客-程序员宅基地

BankAccountsusing System;using Wrox.ProCSharp;using Wrox.ProCSharp.VenusBank;using Wrox.ProCSharp.JupiterBank;namespace Wrox.ProCSharp{ class MainEntryPoint { static voi...

XT.COM关于DKKS AMA直播回顾_XT_Exchange的博客-程序员宅基地

2021年11月15日16:00,XT.COM直播间又开播啦!本期做客直播间的嘉宾是来自DKKS的创始人Daikokuten、营销及传播负责人Eric以及开发负责人Otomo。错过直播的小伙伴一起跟着xt君来回顾一下此次直播主题AMA吧!(Q:XT.COMA:Daikokuten & Eric & Otomo)Q:Hi, everyone! Welcome to the XT AMA Channel. XT is honored to invite Daikok...

[Java基础]--Java程序编译和运行的过程_high2011的博客-程序员宅基地

原文链接:http://allenhk.iteye.com/blog/1866288Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程。       如下图,Java程序从源文件创建到程序运行要经过两大步骤:源文件由编译器编译成字节码(ByteCode)  字节码由java虚拟机解释运行。因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解...

ospf协议c语言编程版,ospfd ospf的C语言实现 - 下载 - 搜珍网_钱钱钱隆的博客-程序员宅基地

ospfd/Makefileospfd/makefile.winospfd/ose_ipnet_makefile.mkospfd/OSPF-MIB.txtospfd/OSPF-TRAP-MIB.txtospfd/ospfd.cospfd/ospfd.conf.sampleospfd/ospfd.hospfd/ospf_abr.cospfd/ospf_abr.hospfd/ospf_api.cosp...

推荐文章

热门文章

相关标签