laravel接管公众号的消息系统
公众号没有转发消息的处理
一、插件包安装
这里使用的插件包是laravel-wechat
。安装方式如下。
composer require overtrue/laravel-wechat
二、令牌(Token)认证配置
配置后台的服务器地址的时候,需要认证token。除了按照要求配置token外,还要满足,公众号的token的认证。
认证的时候,也很简单。注意是返回echostr
的值就行了
我的服务器的消息地址是:
http://bridge.4s2sda.cn/wechat/message
我的认证函数的内容为:
class MessageController extends Controller
{
// 接受消息处理
public function index(){
return $_GET["echostr"];
}
}
这样,在你提交的时候,才能保存成功。认证完成后,就不需要这个代码了,可以改动index
主题了,完成消息的发送。
三、网站url配置
公众号在发送消息的时候,是以post的形式给你的xml数据。
所有你要到以下的两个点。
- 保证消息链接支持post
csrf
保护的中间件中,要排除消息的路由。
否则的话,公众号那边没法成功的把消息投递你的服务器的。
- 保证消息链接支持post
设置url的时候,注意使用any
,允许get
和post
两种方式的访问。
或者,你在提交服务器配置的时候,使用// 接受微信服务器的消息 Route::any('/wechat/message', ['as'=>'wechat.message', 'uses'=>'Wechat\MessageController@index']);
GET
,提交成功后。再改回POST
也是可以的。因为后期的消息推送也只有post
请求。 - 从
csrf
中排除该路由。
csrf
的排除是具体的链接wechat/message
,下面是我的代码
注意,排除的时候,class VerifyCsrfToken extends Middleware { /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ 'wechat/message' ]; }
wechat/message
和wechat/message/*
是不一样的。
wechat/message/*
不包含当前的url。
四、发送消息
这是我使用EasyWeChat
的laravel
扩展的发送,普通文本消息。
代码如下:
class MessageController extends Controller
{
// 接受消息处理
public function index(){
$officialAccount = \EasyWeChat::officialAccount(); // 公众号
$officialAccount->server->push(function ($message) {
$text = new Text('您好!overtrue。');
return $text;
});
return $officialAccount->server->serve();
}
}
此时,跟公众号有互动的时候,就会自动回复你您好!overtrue。
消息了。
这样写的,是任何操作,都会回复该消息。无论是关注,还是点击,还是给公众号发消息。
插件官方文档,如有更多需求,请移步官方文档学习使用。
网友评论