Package Data | |
---|---|
Maintainer Username: | hsinlu |
Maintainer Contact: | hsinlu@live.com (hsinlu) |
Package Create Date: | 2015-11-12 |
Package Last Update: | 2015-11-12 |
Home Page: | |
Language: | PHP |
License: | Unknown |
Last Refreshed: | 2025-02-21 15:00:49 |
Package Statistics | |
---|---|
Total Downloads: | 14 |
Monthly Downloads: | 0 |
Daily Downloads: | 0 |
Total Stars: | 3 |
Total Watchers: | 4 |
Total Forks: | 4 |
Total Open Issues: | 0 |
基于 laravel5.1 开发的微信公众平台 SDK,支持管理多个微信应用,旨在于提供简洁优雅的开发体验。
暂不推荐于生产环境
以下是所支持的功能列表,根据微信官方文档分类、命名,其中打勾的为已完成功能,其他为开发中状态。
PHP 版本 >=5.5.9
json_encode
时,需要设置JSON_UNESCAPED_UNICODE
json_encode(['group' => [ 'id' => $groupid, 'name' => '我的家人' ],], JSON_UNESCAPED_UNICODE);
composer require "hsinlu/laravel-wechat"
Hsin\Wechat\WechatServiceProvider
添加到laravel项目 config/app.php
中'providers' => [
// ...
// wechat
Hsin\Wechat\WechatServiceProvider::class,
],
Hsin\Wechat\Http\Middleware\CheckWechatSignature
配置到laravel项目 app/Http/Kernel.php
中/**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
// ...
// wechat
'wechat.signature' => \Hsin\Wechat\Http\Middleware\CheckWechatSignature::class,
];
/wechat/*
请求路径加入到中间件 App\Http\Middleware\VerifyCsrfToken
排除列表class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'/wechat/*'
];
}
vendor:publish
将配置文件和其他资源文件拷贝到 laravel 项目对应的目录php artisan vendor:publish
在 config/wechat.php
中配置微信应用的相关参数,如果有多个应用,复制 apps
数组第一个应用配置并更改相关的配置项。
<?php
return [
// 应用的配置,支持多个应用
'apps' => [
// 应用的唯一标识 => 应用配置
'应用的唯一标识' => [
// 应用ID
'AppID' => '应用 ID',
// 应用密钥
'AppSecret' => '应用密钥',
// 令牌
'Token' => '令牌',
// 消息是否加密
'Encrypt' => false,
// 消息加解密密钥
'EncodingAESKey' => '消息加解密密钥',
],
],
];
通过 wechat()
方法生成默认的微信应用(默认为配置中的第一个),通过 wechat('应用的唯一标识')
生成其他微信应用。
SDK中提供了 wechat/access
路由供应用接入使用,如果您的域名是 http://hsinlu.com
,那么您在微信中配置的服务器地址则是 http://hsinlu.com/wechat/access
。
对于多个应用,配置的服务器地址则需要在 wechat/access
之上添加应用的唯一标识,如 http://hsinlu.com/wechat/access/wx1d3e8db24427e3a6
,SDK 在收到微信推送的消息时,会根据应用的唯一标识,来判断是哪个应用。
被动接收消息处理策略写在
app/Wechat/strategy.php
文件。
被动接收普通消息只需要绑定对应消息类别的处理程序,其中普通消息类别对应为:文本消息(text)、图片消息(image)、语音消息(voice)、视频消息(video)、小视频消息(shortvideo)、地理位置消息(location)、链接消息(link),下面代码以文本消息(text)为例:
wechat()->on('text', function($message) {
return 'Hello Wechat';
});
除了上面闭包形式的处理程序,您还可以设置单独的处理类,处理类需要包含 handle
方法。
<?php
namespace App\Wechat\Handlers;
class TextHandler
{
/**
* 处理微信发来的文本消息
*
* @param SimpleXMLElement $message
* @return void
*/
public function handle($message)
{
// 处理逻辑
}
}
事件消息与普通消息的处理方式相同,唯一不同的是事件消息的处理程序的键值为消息类型+事件类型组成,其中事件消息的类型为event
,事件类型包含以下几种:关注(subscribe)、取消关注(unsubscribe)、扫描带参数二维码事件(为关注时为subscribe,EventKey以qrscene_为前缀;已关注时为SCAN)、上报地理位置事件(LOCATION)、自定义菜单事件(CLICK)、点击菜单跳转链接时的事件(VIEW),下面以关注事件为例:
wechat()->on('event.subscribe', function($message) {
return '您已关注。';
});
与普通消息一样,除了闭包形式的处理程序外,您仍可以设置单独类作为处理程序,与普通消息一致,这里不再示例。
回复消息的类型为微信预定义的几种消息格式,分别为:回复文本消息(text)、回复图片消息(image)、回复语音消息(voice)、回复视频消息(video)、回复音乐消息(music)、回复图文消息(news),当然,SDK中已经对此类的消息做了封装,无需手动生成响应的XML。
Hsin\Wechat\Results\TextResult // 对应文本消息
Hsin\Wechat\Results\ImageResult // 对应图片消息
Hsin\Wechat\Results\VoiceResult // 对应语音消息
Hsin\Wechat\Results\VideoResult // 对应视频消息
Hsin\Wechat\Results\MusicResult // 对应音乐消息
Hsin\Wechat\Results\NewsResult // 对应图文消息
所有的消息结果类都继承抽象类Result,您也可以根据需要扩展消息的类型
所有的消息结果类构造函数接收一个包含消息类所需要的数据数组,以下以回复文本消息为例:
wechat()->on('text', function ($message) {
return wechat_result(TextResult::class, [
'fromUserName' => trim($message->ToUserName),
'toUserName' => trim($message->FromUserName),
'content' => '这是一条文本消息。',
]);
});
SDK中提供了
wechat_result
方法来帮助构建消息结果类,您仍可以使用new TextResult([])
形式构建。
请参见hsinlu/wechat