hsinlu / laravel-wechat
wechat sdk for laravel 5.1
Requires
- php: >=5.4.0
- hsinlu/wechat: ^0.0.2
- illuminate/support: 5.1.*
This package is not auto-updated.
Last update: 2024-12-21 19:31:54 UTC
README
基于 laravel5.1 开发的微信公众平台 SDK,支持管理多个微信应用,旨在于提供简洁优雅的开发体验。
暂不推荐于生产环境
功能
以下是所支持的功能列表,根据微信官方文档分类、命名,其中打勾的为已完成功能,其他为开发中状态。
- 微信接入
- 获取access_token
- 获取微信服务器IP地址
- 被动接收普通消息
- 被动接收事件消息
- 被动回复消息
- 客服消息(接口调用不成功)
- 多客服功能(接口调用不成功)
- 群发消息
- 模板消息(未测试)
- 获取自动回复规则
- 消息加解密
- 素材管理(添加永久素材,视频素材没实现)
- 用户管理
- 自定义菜单管理
- 二维码
- 长链接转短链接
- 数据统计
- 语义理解
- JS-SDK
- 微信小店
- 微信卡券
- 微信门店
- 微信智能接口
- 微信智能接口
- 摇一摇周边
- 微信连Wi-Fi
环境要求
PHP 版本 >=5.5.9
注意事项
- 所有发往微信的json数据,如果包含中文,在使用
json_encode
时,需要设置JSON_UNESCAPED_UNICODE
json_encode(['group' => [ 'id' => $groupid, 'name' => '我的家人' ],], JSON_UNESCAPED_UNICODE);
安装
使用composer安装
composer require "hsinlu/laravel-wechat"
配置laravel项目
- 将
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