Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
L

LaneWeChat

> 编程语言
Open source

微信PHP快速开发框架!将微信的各个功能进行了封装,只需要简单的调用方法和传递参数即可。

1.4K stars0 likes2 views
WebsiteGitHub

About

微信PHP快速开发框架!将微信的各个功能进行了封装,只需要简单的调用方法和传递参数即可。

框架名称:LaneWeChat

框架简介:这是一个为快速开发微信应用而生的PHP框架。将微信的开发者功能根据文档进行了封装。为了快速开发的目的,开发者完全不需要要知道具体是如何实现的,只需要简单的调用方法即可

开发语言:PHP

版本要求:原则PHP5.3以上

版本规避:若版本低于PHP5.3,则删除本框架所有页面开头“namespace”的行、删除本框架中所有的“use LaneWeChat”开头的行,删除“LaneWeChat\Core”,修改Autoloader::NAMESPACE_PREFIX='',修改curl.lib.php的\Exception为Exception即可。

命名空间:本框架的命名空间均为LaneWeChat开头。

开源协议:Do What The Fuck You Want To Public License

开发者博客:http://www.lanecn.com

文档地址:http://lanewechat.lanecn.com/

更新日志:

2016-05-05 1.5.4

    1、接收数据方式由HTTP_RAW_POST_DATA替换为php://input. HTTP_RAW_POST_DATA在PHP5.6以后就不再推荐使用.

2016-04-26 1.5.4

    1、新增生成个性化菜单方法Menu::setPersonalMenuJson($menuListJson)

    2、新增生成默认菜单方法Menu::setMenuJson($menuListJson),与原生成默认菜单函数Menu::setMenu($menuList),此函数参数是json字符串
    
    3、新增Environment类, isSae($appname,$accesskey)方法判断所在环境是否是SAE平台。

    4、外部类调用的入口,一定是getAccessToken(),所以进入此方法后调用Environment::isSae($appname,$accesskey)判断平台属性,若不是SAE,逻辑不变原用户不受影响,否则根据SAE环境执行不同的获取token的方法。

    5、新增AccessToken::_getSae()方法,在SAE平台上根据条件的不同,选择从memcache/文件/数据库中读取access_token.

    6、新增AccessToken::_getFromMemcache()方法,在SAE平台上从memcache中读取access_token。

    7、新增AccessToken::_getFromFile()方法,从文件中读取access_token。
        1) 在获取access_token的过程中需要调用私有方法_existsToken(),_expriseToken()
        2) 此方法在其他平台上的可写目录中可以正常执行,因为SAE平台不支持本地创建/写文件,可通过改写此方法在SAE的storage中创建/读/写文件,
        个人感觉任何缓存、中间临时交换数据的需求都是不适合使用Storage和KVDB存储的,所以没有添加相关的方法实现(有什么理解不对的请指出)。

    8、改写WechatRequest::eventQrsceneSubscribe方法,用户在扫描带参数二维码之后,可根据所带参数实现对用户自动分组的功能

1、修复主动响应的BUG,感谢 晨露微凉<[email protected]> 反馈。

2015-10-21 1.5.3

    1、文件上传根据PHP版本增加了CURLFile()类。自PHP5.5以后,废弃了“@文件名”的方式上传文件

2015-06-29 1.5.2

    1、在主动发消息模块(responseinitiative.lib.php)pic_url 和 url赋值反了。

2015-04-29 1.5.1

    1、新增获取微信服务器IP列表接口。如果需要安全性校验,可以每次判断请求的来源IP。

    2、新增接收消息类型:小视频

    3、新增 模板消息-设置行业 和 模板消息-获取模板ID

    4、高级群发接口-根据分组群发 新增参数is_to_all,使用is_to_all为true且成功群发,会使得此次群发进入历史消息列表。

    5、新增 高级群发接口-预览接口【订阅号与服务号认证后均可用】 和 高级群发接口-查询群发消息发送状态【订阅号与服务号认证后均可用】

    6、新增 客服帐号管理-获取所有客服账号列表/添加客服账号/修改客服账号/删除客服账号/设置客服头像

    7、新增 自动回复-获取自动回复 接口

2014-12-04 1.4.2

    1、解决CURL的GET调用在php5.3以下时出现errno=60(CA证书无效)的BUG。(解决人:大志<[email protected]>)

    2、文档、注释优化。(zhulin3141)

    3、实战演练 - 添加微信自定义菜单 文档场景描述错误

2014-11-05:1.4版本

    兼容性:
        设置菜单Menu::setMenu($menuList)参数结构和返回值重写,不向下兼容。
    根目录下新增lanewechat.php:
        在项目用需要使用本SDK的地方,只需要include 'lanewechat/lanewechat.php',然后可以直接ClassName::method()调用即可。

    安全性升级:
        因为SSL爆出高危漏洞,公众平台在2014.11.30起,将关闭SSLv2,SSLv3版本的支持。根据官方实例,LaneWeChat的CURL类中也将使用curl_setopt($curl, CURLOPT_SSLVERSION, 1)

    新增消息体签名加解密验证(EncodingAESKey),默认为空,为空时微信公众号平台会自动生成。也可以开发者自行手动指定。

    新增语音消息识别

    新增高级群发接口:
        1 上传图文消息素材
        2 根据分组进行群发,可发送图文消息,文本消息,图片消息,语音消息,视频消息。
        3 根据OpenID列表群发,,可发送图文消息,文本消息,图片消息,语音消息,视频消息。
        4 删除群发
        5 事件推送群发结果

    新增模板消息接口:
        1、主动推送给用户模板消息的接口
        2、被动接收微信服务器发送的关于主动推送模板消息的结果通知。

    用户管理接口:
        1、新增设置备注名。开发者可以通过该接口对指定用户设置备注名,该接口暂时开放给微信认证的服务号。

    网页授权接口:
        注意:此access_token与基础支持的access_token不同。
        1、新增刷新access_token。由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token拥有较长的有效期(7天、30天、60天、90天),当refresh_token失效的后,需要用户重新授权。
        2、新增scope为snsapi_userinfo的模式下(会在网页弹出一个授权框),拉取用户信息的接口。
        3、新增检验授权凭证(access_token)是否有效接口

    新增多客服功能:
        1、新增将消息转发到多客服接口:在接收到用户发送的消息时,调用ResponsePassive::forwardToCustomService($fromusername, $tousername),微信服务器在收到这条消息时,会把这次发送的消息转到多客服系统。用户被客服接入以后,客服关闭会话以前,处于会话过程中,用户发送的消息均会被直接转发至客服系统。
        2、新增获取客服聊天记录接口:在需要时,开发者可以通过获取客服聊天记录接口,获取多客服的会话记录,包括客服和用户会话的所有消息记录和会话的创建、关闭等操作记录。利用此接口可以开发如“消息记录”、“工作监控”、“客服绩效考核”等功能。

    自定义菜单:
        警告:设置菜单Menu::setMenu($menuList)参数结构和返回值重写,自1.4版本起不向下兼容。
        注意:所有新增的菜单类型,仅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用户,旧版本微信用户点击后将没有回应,开发者也不能正常接收到事件推送。
        1、新增“scancode_push:扫码推事件”类型菜单
            用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。
        2、新增“scancode_waitmsg:扫码推事件且弹出‘消息接收中’提示框”类型菜单
            用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框,随后可能会收到开发者下发的消息。
        3、新增“pic_sysphoto:弹出系统拍照发图”类型菜单
            用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。
        4、新增“pic_photo_or_album:弹出拍照或者相册发图”类型菜单
            用户点击按钮后,微信客户端将弹出选择器供用户选择“拍照”或者“从手机相册选择”。用户选择后即走其他两种流程。
        5、新增“pic_weixin:弹出微信相册发图器”类型菜单
            用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。
        6、新增“location_select:弹出地理位置选择器”类型菜单
            用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。
        7、新增了以上6种菜单类型、view(点击跳转链接)的菜单类型的被动响应的支持。默认讲点击菜单的事件推送数据发送文本消息返回给用户。开发者请自行修改。

    新增语义理解接口
        1、如输入“查一下明天从北京到上海的南航机票”,类型为“flight,hotel”,则返回机票信息。

    新增推广支持:
        1、新增获取二维码接口。二维码分临时二维码和永久二维码。第一步先获取ticket,第二部是拿ticket获取二维码图片。二维码可以保存为文件,也可以展示预览。
        2、新增长链接转短链接接口。

    新增实例示范:
        1、被动响应用户 - 发送图文消息
        2、群发图文消息
        3、推送模板消息
        4、添加自定义菜单
        5、页面展示二维码

    关于获取用户信息的新亮点 - unionId:
        获取用户信息是根据openId获取,同一个微信用户对于不同的公众号,是不同的openId。那问题就来了,如果你有多个公众号,想要共享一份用户数据,可是同一个用户在不同的公众号是不同的openId,我们无法判断是否是同一个用户,现在微信引入了UnionId的概念。
        如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。
        在绑定了公众号后,我们根据openId获取用户信息的时候,会新增一个字段“unionid”,只要是同一个用户,在不同的公众号用不同的openId获取用户信息的时候unionid是相同的。
        此功能不需要新增/修改代码,只需要在微信开放平台绑定公众号就可以了。仍旧使用获取用户信息接口UserManage::getUserInfo($openId);

2014-10-14:1.2.2版本。新增自动载入函数

2014-08-17:1.2版本。新增自定义菜单功能、新增多媒体上传下载功能。

2014-08-07:1.0版本

文档目录:

1、常识普及。

2、如何安装。

3、初出茅庐。

4、流程分析。

5、牛刀小试。

6、函数详解。

7、实例示范。

常识普及:

一、微信公众账号分两种,一种是订阅号,一种是服务号。

1、订阅号是被动响应用户消息功能,并且每天推送一条消息。

2、服务号是300元/每年认证,被动响应用户消息,主动给用户发送消息,自定义菜单按钮,网页授权等功能,并且每月推送一条消息。

3、订阅号适合消息类,新闻类应用,常常需要推送文章给用户的;服务号适合自助查询等。

4、订阅号被认证后也享用自定义菜单等功能,仍旧是300元/每年

二、专业术语:

1、OpenId:微信服务器并不会告诉公众号用户的微信ID,即使是你的关注者也不行,为了解决开发中唯一标识的问题,微信使用了OpenId,所谓的OpenId,就是用户和微信公众号之间的一种唯一关系。一个用户在一个公众号面前,享用唯一的OpenId,不会和别人重复。换言之,同一个用户在另一个公众号面前,是拥有另一个OpenId的。再直白些就是$openId = md5('用户微信ID+公众号ID')

2、Access_Token:此项只有认证号的功能才会使用的到,Access_token是一个授权标识,即一个授权验证码,一个标识10分钟内有效,10分钟的有效期内公众号的多个关注者可以使用同一个Access_Token。在使用主动给指定用户发送消息、自定义菜单、用户管理和用户组管理等功能的时候,每次操作需要给微信服务器以参数的形式附带Access_token。

3、Access_Token网页版:本Access_Token网页版授权时会使用到,和2中的Access_Toekn是不同的东西,不过使用我们的LaneWeChat微信快速开发框架是不需要了解这些的。Access_Token网页版是说在用户打开你的公众号提供的网页的时候,你的网页需要获取用户的OpenId、昵称、头像等信息的时候授权用的。同时,本Access_Token网页版有两种用法,一种是打开网页后弹出一个授权框,让用户点击是否授权,界面像主流的开放平台授权界面(比如QQ登陆某网站,支付宝账号登陆某网站等);另一种是不需要弹出授权框仍旧可以获取用户信息,用法可以在实例中看到。

如何安装:

1、本框架以代码包的插件形式放在项目的目录中即可。调用时只需要include 'lanewechat/lanewechat.php'即可。如:
        <?php
        include 'lanewechat/lanewechat.php';
        //获取自定义菜单列表
        $menuList = Menu::getMenu();

2、配置项:打开根目录下的config.php,修改定义常量WECHAT_APPID,WECHAT_APPSECRET,WECHAT_URL。其中前两项可以在微信公众号官网的开发者页面中找到,而WECHAT_URL是你微信项目的URL,以http://开头

3、本框架的外部访问唯一入口为根目录下的wechat.php,本框架的内部调用唯一入口为根目录下的lanewechat.php。两者的区别是wechat.php是通过http://www.abc.com/lanewechat/wechat.php访问,是留给微信平台调用的入口。而lanewechat.php是我们项目内部调用时需要include 'lanewechat/lanewechat.php';

4、首次使用时,请打开根目录下的wechat.php,注释掉26行,并且打开注释第29行。

5、在微信开发者-填写服务器配置页面,填写URL为http://www.lanecn.com/wechat.php,保证该URL可以通过80端口正常访问(微信服务器目前只支持80端口),并且将Token填写为config.php中的WECHAT_TOKEN常量的内容(可以修改)。

6、微信服务器在第4步验证通过后,反向操作第4步,即注释掉第27行,打开注释第26行。至此,安装配置完成。

初出茅庐:

1、给你的微信公众号发送一条文本消息,比如hello world或者其他什么的。这个时候你应该会收到一条“收到文本”的服务器反馈的被动响应的消息。

2、这个时候你需要先为自己鼓掌。

流程分析:

1、我们给微信服务器发送了一条“hello world”的文本消息。

2、微信服务器收到我们的消息后,查找该公众账号所配置的服务器信息中的URL(如何安装部分 - 第5步)。

3、微信服务器向第二步获取的URL发送请求,参数是微信服务器自己拼接过的XML格式。

4、根目录下的wechat.php,引入了我们的配置文件和所需的类后,进入了类WeChat的方法run()。该类位于core/wechat.lib.php。微信的XML数据此时已经被解析为数组,变量名为$request。

5、然后,我们进入了类WechatRequest的方法switchType(),根据不同的消息类型,给予不同的响应。比如用户发送文本消息和关注事件,给出的返回应该是不同的。当然,你要给出同样的提示也不能说是错的。

6、在第5步中的方法中,是一个switch,根据消息类型(此时是文本类型,微信服务器给我的是text)选择了一个处理文本消息的方法,类WechatRequest中的方法text()。该方法的功能是发送文本消息,文本内容是“收到文本”。

7、此时,我们return了一个数据返回给了上层调用,层层return,就到了我们根目录的下的唯一入口文件wechat.php,此时我们返回的数据被echo出来了。

8、微信服务器拿到了输出的数据,微信服务器进行分析和处理,将文本发送给了用户的微信客户端。我们就在手机上看到了微信输出的“收到文本”。

9、流程结束,这就是发送“hello world”,然后返回给用户“收到文本”。

牛刀小试:

1、打开core/wechatrequest.php文件,讲方法text()中的变量修改为$content = '收到文本消息'.$request['content'];

2、保存并且上传到你的服务器。

3、在微信中打开你的公众号,输入文本消息“hello world”。见证奇迹的时刻到了。这个时候你的手机微信客户端中现实的是“收到文本消息hello world”。

函数详解:

一、被动给用户发送消息。

    1、类简介:用户输入文本、图片、语音、音乐、视频等消息,以及关注、取消关注,上报地理位置等事件后,服务器被动给出应答。

    2、使用命名空间:use LaneWeChat\Core\ResponsePassive;

    3、参数:  $fromusername = "谁发给你的?(用户的openId)"  在变量$request['fromusername']中

             $tousername = "你的公众号Id";                 在变量$require['tousername']中

             $mediaId = "通过上传多媒体文件,得到的id。";

    4、发送文本
            ResponsePassive::text($fromusername, $tousername, '文本消息内容');

    5、发送图片
            ResponsePassive::image($fromusername, $tousername, $mediaId);

    6、发送语音
            ResponsePassive::voice($fromusername, $tousername, $mediaId);

    7、发送视频
            ResponsePassive::video($fromusername, $tousername, $mediaId, '视频标题', '视频描述');

    8、发送音乐
            ResponsePassive::music($fromusername, $tousername, '音乐标题', '音乐描述', '音乐链接', '高质量音乐链接,WIFI环境优先使用该链接播放音乐', '缩略图的媒体id,通过上传多媒体文件,得到的id');

    9、发送图文
        1)创建图文消息内容
            $tuwenList = array();
            $tuwenList[] = array('title'=>'标题1', 'description'=>'描述1', 'pic_url'=>'图片URL1', 'url'=>'点击跳转URL1');
            $tuwenList[] = array('title'=>'标题2', 'description'=>'描述2', 'pic_url'=>'图片URL2', 'url'=>'点击跳转URL2');
        2)构建图文消息格式
            $itemList = array();
            foreach($tuwenList as $tuwen){
                $itemList[] = ResponsePassive::newsItem($tuwen['title'], $tuwen['description'], $tuwen['pic_url'], $tuwen['url']);
            }
        3)发送图文消息
            ResponsePassive::news($fromusername, $tousername, $itemList);

二、AccessToken授权。

    1、类简介:除了被动相应用户之外,在主动给用户发送消息,用户组管理等高级操作,是需要AccessToken授权的,我们调用一个URL给微信服务器,微信服务器会返回给我们一个散列字符串,在高级操作的时候需要将此串以参数的形式发送。散列字符串10分钟内有效,过期需要重新获取,获取新的后之前的全部失效。

    2、使用命名空间:use LaneWeChat\Core\AccessToken;

    3、参数:无

    4、获取AccessToken
        AccessToken::getAccessToken(); 该调用会返回微信服务器散列后的AccessToken字符串。

    5、温馨提示

        如果暂且用不到此功能,请跳过。最后来看这里!

    6、功能补充
        有一个地方需要用户自行完善,根据介绍我们已经知道了,获取AccessToken只有10分钟的有效期,过期需要重新获取。因此,我们需要存储这个AccessToken。
        由于大家的存储方式各不相同,有Mysql的,有Redis的,有MongoDB的,还有Session的。所以这里我讲存储和读取给留空了。
        流程:AccessToken类,public方法只有一个,就是getAccessToken()。这个方法会调用一个私有方法_checkAccessToken()来检测AccessToken是否存在并且是否过期,如果不存在或过期,则调用私有方法_getAccessToken()
        完善步骤:
        1)、打开core/accesstoken.lib.php文件。
        2)、私有方法_getAccessToken()的倒数第二行(return是倒数第一行),在这个地方,请讲变量$accessTokenJson存储起来,变量$accessTokenJson是一个字符串。
        3)、私有方法_checkAccessToken()的第一行就是读取操作(有一行伪代码$accessToken = YourDatabase::get('access_token');),将刚才第二步的存储的东西给读出来,并且赋值给$accessToken。
        4)、在第二步的存储,第三部的读取的时候,请不要修改数据,仅仅完善一个读和存的操作就可以了。

三、主动给用户发送消息。

       1、类简介:主动向用户推送文本、图片、语音、音乐、视频等消息。

    2、使用命名空间:use LaneWeChat\Core\ResponseInitiative;

    3、参数  $tousername = "你的公众号Id";  在变量$require['tousername']中
            $mediaId = "通过上传多媒体文件,得到的id。";

    4、发送文本内容
        ResponseInitiative::text($tousername, '文本消息内容');

    5、发送图片
        ResponseInitiative::image($tousername, $mediaId);

    6、发送语音
        ResponseInitiative::voice($tousername, $mediaId);

    7、发送视频
        ResponseInitiative::video($tousername, $mediaId, '视频

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

PHP

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言