美文网首页laravel
laravel使用easywechat手把手

laravel使用easywechat手把手

作者: 空气KQ | 来源:发表于2019-05-11 17:48 被阅读0次

    安装插件

    # Laravel < 5.8
    composer require "overtrue/laravel-wechat:~4.0"
    
    # Laravel >= 5.8
    composer require "overtrue/laravel-wechat:~5.0"
    

    push配置

    php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider"
    

    增加.env配置公众号设置

    WECHAT_OFFICIAL_ACCOUNT_APPID=wx78ae5bb2XXXX
    WECHAT_OFFICIAL_ACCOUNT_SECRET=214f1ce332XXXX
    WECHAT_OFFICIAL_ACCOUNT_TOKEN=yishXXX
    WECHAT_OFFICIAL_ACCOUNT_AES_KEY=6lwDoXXXXXFDFEEEEEEEEE
    

    过滤CSRF

    比如你的配置访问地址是
    http://www.heibaiketang.com/api/weixin/server
    那么就需要配置VerifyCsrfToken.php文件如下

    api/weixin/*
    

    定义路由

    一定要定义get,post,因为他们验证get,post消息

    Route::any('api/weixin/server', 'WeiXinController@server')->name('server');
    

    简单例子

    <?php
    
    namespace App\Http\Controllers\Api;
    
    use App\Services\weixin\ImageMessageHandler;
    use App\Services\weixin\TextMessageHandler;
    use EasyWeChat\Kernel\Messages\Message;
    use Illuminate\Http\Request;
    use App\Http\Controllers\Controller;
    use Log;
    use EasyWeChat\Factory;
    
    class WeiXinController extends BaseController
    {
        //微信接口服务
        //https://www.yishanseo.com/api/h5/weixin/server?echostr=1410480958785089387&nonce=134704537&signature=7e6f50565319edc86585d06df0fb8539df46f305&timestamp=1557556841
        public function server()
        {
            Log::info('request arrived.'); # 注意:Log 为 Laravel 组件,所以它记的日志去 Laravel 日志看,而不是 EasyWeChat 日志
            $config = config('wechat.official_account.default');
            $app = Factory::officialAccount($config);
           
           $app->server->push(function ($message) {
                // $message['FromUserName'] // 用户的 openid
                // $message['MsgType'] // 消息类型:event, text....
                switch ($message['MsgType']) {
                    case 'event':
                        return '收到事件消息';
                        break;
                    case 'text':
                        return '收到文字消息';
                        break;
                    case 'image':
                        return '收到图片消息';
                        break;
                    case 'voice':
                        return '收到语音消息';
                        break;
                    case 'video':
                        return '收到视频消息';
                        break;
                    case 'location':
                        return '收到坐标消息';
                        break;
                    case 'link':
                        return '收到链接消息';
                        break;
                    case 'file':
                        return '收到文件消息';
                    // ... 其它消息
                    default:
                        return '收到其它消息';
                        break;
                }
            });
            $response = $app->server->serve();
            return $response;
        }
    }
    

    上面为SDK写法,laravel写法还可以这样

    public function serve()
        {
            Log::info('request arrived.'); # 注意:Log 为 Laravel 组件,所以它记的日志去 Laravel 日志看,而不是 EasyWeChat 日志
    
            $app = app('wechat.official_account');
            $app->server->push(function($message){
                return "欢迎关注 overtrue!";
            });
    
            return $app->server->serve();
        }
    

    这样就搞定了。
    其他写法

    $officialAccount = EasyWeChat::officialAccount(); // 公众号
      $work = EasyWeChat::work(); // 企业微信
      $payment = EasyWeChat::payment(); // 微信支付
      $openPlatform = EasyWeChat::openPlatform(); // 开放平台
      $miniProgram = EasyWeChat::miniProgram(); // 小程序
      
      // 均支持传入配置账号名称
      EasyWeChat::officialAccount('foo'); // `foo` 为配置文件中的名称,默认为 `default`
      //...
    

    如果你有多个公众号,需要单独分开。那么修改下刚才那个配置引入

    第一种是$config修改就可以切换不同的公众号
    第二种就设置officialAccount(配置名字)
    

    把用户发过来消息服务单独文件出来

    比如我现在要单独文本和图片

     public function server()
        {
            Log::info('request arrived.'); # 注意:Log 为 Laravel 组件,所以它记的日志去 Laravel 日志看,而不是 EasyWeChat 日志
            $config = config('wechat.official_account.default');
            $app = Factory::officialAccount($config);
           $app->server->push(ImageMessageHandler::class, Message::IMAGE); // 图片消息
            $app->server->push(TextMessageHandler::class, Message::TEXT); // 文本消息
            $response = $app->server->serve();
            return $response;
        }
    

    文本

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 2019/5/11
     * Time: 14:56
     */
    
    namespace App\Services\weixin;
    
    use \EasyWeChat\Kernel\Contracts\EventHandlerInterface;
    class TextMessageHandler implements  EventHandlerInterface
    {
        public $message;
    
        public function handle($payload = null)
        {
            $this->message=$payload;
            // TODO: Implement handle() method.
            return $this->message['Content'].'TXT消息';
        }
    
    }
    

    以上所有的单独文件需要继承 \EasyWeChat\Kernel\Contracts\EventHandlerInterface;这个接口。
    实现方法handle(payload),payload表示传递过来的对象消息。
    每个消息必须返回的消息有

    ToUserName 接收方帐号(该公众号 ID)
    FromUserName 发送方帐号(OpenID, 代表用户的唯一标识)
    CreateTime 消息创建时间(时间戳)
    MsgId 消息 ID(64位整型)
    

    其他查看这个文档
    https://www.easywechat.com/docs/4.1/official-account/server

    相关文章

      网友评论

        本文标题:laravel使用easywechat手把手

        本文链接:https://www.haomeiwen.com/subject/bkvxaqtx.html