laravel接管公众号的消息系统时公众号无法转发消息的处理

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保护的中间件中,要排除消息的路由。

否则的话,公众号那边没法成功的把消息投递你的服务器的。

  1. 保证消息链接支持post
    设置url的时候,注意使用any,允许getpost两种方式的访问。
    // 接受微信服务器的消息
    Route::any('/wechat/message', ['as'=>'wechat.message', 'uses'=>'WechatMessageController@index']);
    
    或者,你在提交服务器配置的时候,使用GET,提交成功后。再改回POST也是可以的。因为后期的消息推送也只有post请求。
  2. csrf中排除该路由。
    csrf的排除是具体的链接wechat/message,下面是我的代码
    class VerifyCsrfToken extends Middleware
    {
        /**
         * The URIs that should be excluded from CSRF verification.
         *
         * @var array
         */
        protected $except = [
            'wechat/message'
        ];
    }
    
    注意,排除的时候,wechat/messagewechat/message/*是不一样的。
    wechat/message/*不包含当前的url。

四、发送消息

这是我使用EasyWeChatlaravel扩展的发送,普通文本消息。
代码如下:

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。消息了。
这样写的,是任何操作,都会回复该消息。无论是关注,还是点击,还是给公众号发消息。

插件官方文档,如有更多需求,请移步官方文档学习使用。

原文地址:https://www.cnblogs.com/hxsen/p/12930534.html