Laravel5.6 结合 EasyWechat4.0实现与微信对接

一、微信授权登录
1、 当微信菜单管理功能完成后,把项目部署上线。此处省略。。。
2、 在.env文件中配置token。

 WECHAT_OFFICIAL_ACCOUNT_TOKEN=mi//自定义

3、 在api.php中配置微信接口路由,代码如下:

Route::namespace('Wechat')->group(function(){
    $this->any('/wechat', 'WechatController@serve');
});

4、 参考EasyWechat官网,https://github.com/overtrue/laravel-wechat 在 app/Http/Kernel.php 中添加路由中间件:

protected $routeMiddleware = [
    'wechat.oauth' => \Overtrue\LaravelWeChat\Middleware\OAuthAuthenticate::class,
];

5、 在前端路由中添加此中间件:

Route::namespace('Wechat')->middleware('wechat.oauth', 'wechat')->group(function () {
    require 'wechat/shop.php';
});

6、 在Wechat控制器的serve方法中设置关注微信测试号,自动回复消息。代码如下:

$app = app('wechat.official_account');
$app->server->push(function($message){
   if($message['MsgType'] == 'event'){
        switch($message['Event']){
            case 'subscribe':
                return '欢迎关注';
                break;
        }
   }
});
return $app->server->serve();

7、这里以微信测试号为例,打开微信公众号测试平台,填写接口配置信息,配置接口地址和token,点击提交,配置成功即可。这时在浏览器中访问域名显示“请从微信端打开”,即为配置成功。
8、后台微信菜单管理设置菜单并填写菜单地址。
9、开启config/Wechat.php里面的OAuth配置。
10、在微信测试号页面找到 网页授权获取用户基本信息,修改里面的地址,如:wechat.holyzq.com(any路由地址)
11、下载并安装微信开发者工具,后期所有调试在此工具中进行。

测试:打开微信,扫描二维码,看到“欢迎关注”即为成功。

二、获取微信用户信息
1、在app\Http\Middleware\Wechat.php中,获取用户信息并存入/更新数据库,代码如下:

$original = session('wechat.oauth_user.default.original');
if (!$original) {
   return $next($request);
}
$openid = $original['openid'];
$customer = Customer::where('openid', $openid)->first();
if ($customer) {
   $customer->update($original);
} else {
   Customer::create($original);
}
session(['wechat.customer' => $customer]);
return $next($request);

2、 Customer模型中设置黑名单排除数据库中没有的字段(有时候有也需要排除掉)

protected $guarded = ['privilege'];

3、 在首页控制器中打印用户SESSION信息:return session()->all();,访问首页,看到用户信息即为成功。

三、微信自动回复消息
首先阅读easywechat文档消息一节:https://www.easywechat.com/docs/master/zh-CN/official-account/messages,把回复消息的模板格式搞清楚。

然后,我们就可以开始着手写代码了,代码参考如下:

use EasyWeChat\Kernel\Messages\News;
use EasyWeChat\Kernel\Messages\NewsItem;

public function serve()
{
    $app = app('wechat.official_account');
    $app->server->push(function ($message) {
        if ($message['MsgType'] == 'event') {
            switch ($message['Event']) {
                case 'subscribe': //设置关注事件类型
                    return '欢迎关注'; //回复关注提示语
                    break;

                //点击事件
                case 'CLICK':
                    switch ($message['EventKey']) {
                        case 'recommend':
                            return $this->is_recommend();
                            break;
                    }
                    break;
            }
        }

        //文本消息
        if ($message['MsgType'] == 'text') {
            switch ($message['Content']) {
                case '精选':
                case '推荐':
                case '精选推荐':
                case 'recommend':
                    return $this->is_recommend();
                    break;

                default:
                    return $this->default_msg();
            }
        }

        //语音消息
        if ($message['MsgType'] == 'voice') {
            switch ($message['Recognition']) {
                case '精选。':
                case '推荐。':
                case '精选推荐。':
                    return $this->is_recommend();
                    break;

                default:
                    return '您说的是:' . $message->Recognition . '?';
            }
        }
    });
    return $app->server->serve();
}

/**
 * 精选推荐
 * @return array
 */
private function is_recommend()
{
    $products = Product::where('is_recommend', 1)
        ->orderBy('created_at')
        ->take(6)
        ->get();

      //拼接自动回复的消息模板
    $news = [];
    foreach ($products as $p) {
        $items = [
            new NewsItem([
                'title' => $p->name,
                'description' => $p->description,
                'url' => 'http://wqqshop.holyzq.com' . '/product/' . $p->id,
                'image' => $p->image ? $p->image : '',
            ]),
        ];
        $news = new News($items);
    }
    return $news;
}


/**
 * 默认消息
 * @return string
 */
function default_msg()
{
    return '有趣的问题~';
}

猜你喜欢

转载自blog.csdn.net/weixin_43674113/article/details/84822700