使用 EasyWechat 同步微信粉丝到数据库
16

这篇文章方法写的有些纠结,也有些问题,权当交流用,我测试同步180个粉丝的数据,完成队列任务的时间是53秒。如果社区的大牛们有更好的方法,请赐教。

如果对接多公众号还有疑问,这里有传送门:

Laravel 使用 EasyWechat 管理多公众号

需要同步的控制器,例如:

WechatManageController.php

写入方法:

//WechatConfigHandlers 写法查看上面的链接
public function fans_sync(WechatConfigHandlers $wechat, $account)
{
    $app = $this->wechat->app($account);
    $fans = $app->user->list()['data']['openid'];
    $job = $this->dispatch(new WechatFansSync($fans));
    if ($job) {
            return redirect()->to('/wechat/fans/list/')->with('success', '同步成功');
    }
}

创建一个队列任务:

php artisan make:job WechatFansSync

然后在队列任务文件里加入以下代码:

protected $fans;

public function __construct($fans)
{
        $this->fans = $fans;
}

public function handle(WechatConfigHandlers $wechat, $account)
    {
        $app = $wechat->app($account);
        foreach ($this->fans as $fan) {
            $wefan = WechatFans::where('openid',$fan)->first();
            if (! $wefan) {
                $user = $app->user->get($fan);
                $create_data = WechatFans::create([
                    'aid' => $account,
                    'openid' => $user['openid'],
                    'name' => $user['nickname'],
                    'nickname' => $user['nickname'],
                    'avatar' => $user['headimgurl'],
                    'sex' => $user['sex'],
                    'subscribe_time' => $user['subscribe_time'],
                    'city' => $user['city'],
                    'province' => $user['province'],
                    'country' => $user['country'],
                    'remark' => $user['remark'],
                    'tagid_list' => $user['tagid_list'],
                    'subscribe_scene' => $user['subscribe_scene'],
                    'qr_scene' => $user['qr_scene'],
                    'qr_scene_str' => $user['qr_scene_str'],
                    'groupid' => $user['groupid'],
                    'subscribe' => $user['subscribe'],
                ]);
                if ($create_data) {
                    \Log::info('Sync Username:'.$user['openid']);
                }
            }
        }
    }

public function failed()
{
        dump('failed');
}

上面的方法写完以后,运行:

php artisan work:listen

完成队列任务,建议配合 Laravel 的Horizon使用效果更佳。别忘了写路由

Route::get('/wechat/fans_sync', 'WechatManageController@fans_sync');
本帖由系统于 2个月前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 6
很好
4个月前

nice

4个月前
Destiny

基本上都是这个思路,只是写法有些不一样。

2个月前
Johnson16

@Destiny 你的思路可以分享一下吗?

2个月前
Destiny

@Johnson16 就是写个定时任务每天人少的时候去执行。。。。

2个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!