- 27
- 0
我使用EasyWechat尝试开发了一个第三方平台,然后会帮助本地商户或公众号运营一些活动,如何在公众号授权对接后快速的将公众号粉丝数据同步到本地数据库方便运营?我先前的想法是用户有交互的时候再触发同步,目前是使用的手动方式和命令行方式,手动方式如下:
/**
* 同步
*/
public function sync()
{
$account = $this->request->param('account', 0, 'intval');
$account = AccountService::getDataById($account);
if (empty($account)) {
$this->error('参数错误');
}
//页码
$page = $this->request->param('page', 0, 'intval');
$page_size = 50;
//微信实例
$wechat = WechatService::applicationInit($account);
//先从缓存中读取
$fans = cache('wechat_fans_'.$account->id);
if (!$fans) {
echo '从腾讯拉取';
//从腾讯拉取第一页
$datas = $wechat->user->lists();
$total = ceil($datas['total'] / $datas['count']);
$fans = $datas['data']['openid'];
for ($i = 1; $i < $total; $i++) {
$datas = $wechat->user->lists($datas['next_openid']);
$lists = $datas['data']['openid'];
foreach ($lists as $k => $v) {
array_push($fans, $v);
}
}
//设置缓存
cache('wechat_fans_'.$account->id, $fans);
}
foreach ($fans as $k => $v) {
if ($k <= $page * $page_size) {
continue;
}
if ($k > ($page + 1) * $page_size) {
return $this->success('更新下一页', url($this->request->controller().'/sync', ['account' => $account->id, 'page' => $page + 1]));
}
echo '同步'.$k.'成功<br/>';
try {
UserService::syncDataByServer($account, $v);
} catch (\Exception $e) {
echo '同步'.$k.'出错<br/>';
continue;
}
}
//删除缓存
cache('wechat_fans_'.$account->id, null);
return $this->success('同步完成', url($this->request->controller().'/index', ['account' => $account->id]));
}
这种使用分页同步在浏览器执行的方式速度非常慢,大约几万粉丝都要跑很久,然后跟这个类似的我写了一个命令行方式,执行也很慢。
<php
namespace app\wechat\command;
use app\wechat\service\AccountService;
use app\wechat\service\WechatService;
use app\wechat\service\UserService;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\console\input\Option;
/**
* 同步用户命令
* Class SyncUser
* @package app\wechat\command
*/
class SyncUser extends Command
{
/**
* 命令行配置
*/
protected function configure()
{
//设置命令名称及描述
$this->setName('Wechat:SyncUser')
->addOption('account', 0, Option::VALUE_REQUIRED, '账号ID.')
->setDescription('同步公众号用户');
}
/**
* 命令
* @return int|null|void
*/
protected function execute(Input $input, Output $output)
{
ini_set('memory_limit', '1024M');
if (!$input->hasOption('account')) {
$output->writeln("请输入账号");
return null;
}
$account = $input->getOption('account');
$account = AccountService::getDataById($account);
if (!$account) {
$output->writeln("参数错误");
exit;
}
//微信实例
$wechat = WechatService::applicationInit($account);
//先从缓存中读取
$fans = cache('wechat_fans_'.$account->id);
if (!$fans) {
$output->writeln("从腾讯拉取粉丝");
//从腾讯拉取第一页
$datas = $wechat->user->lists();
$total = ceil($datas['total'] / $datas['count']);
$fans = $datas['data']['openid'];
for ($i = 1; $i < $total; $i++) {
$datas = $wechat->user->lists($datas['next_openid']);
$lists = $datas['data']['openid'];
foreach ($lists as $k => $v) {
array_push($fans, $v);
}
}
//设置缓存
cache('wechat_fans_'.$account->id, $fans);
}
foreach ($fans as $k => $v) {
try {
UserService::syncDataByServer($account, $v);
} catch (\Exception $e) {
$output->writeln("同步{$k}出错");
continue;
}
}
//删除缓存
cache('wechat_fans_'.$account->id, null);
$output->writeln("同步完成");
}
}
求教各位大神有没有比较好的方案。麻烦详细些,本人不是专业的程序员,太简略了看不懂。谢谢!
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
俄爱你ㄟ 普通会员 1楼
在对接公众号时,需要确保数据的同步性,可以使用关系型数据库,如MySQL、Oracle等。以下是一些基本步骤:
-
数据库迁移:首先,你需要将公众号的数据迁移到数据库中。这通常涉及到创建数据库表,然后将公众号的相关信息(如文章、图片、用户等)写入到相应的表中。
-
数据类型转换:在将数据迁移到数据库之前,需要将公众号的相关数据类型转换为数据库支持的数据类型。这可能涉及到对公众号文章、图片、用户等字段的类型进行转换。
-
数据验证:在将数据迁移到数据库之前,需要进行数据验证,确保数据的完整性、一致性、准确性和一致性。这可以通过设置SQL查询条件、编写数据验证脚本来实现。
-
数据同步:在将数据迁移到数据库之后,可以使用SQL语句进行数据同步。这通常涉及到创建一个触发器,当公众号的数据发生变化时,触发器会自动将数据同步到本地数据库中。
-
数据更新:在数据同步完成之后,可以使用SQL语句对本地数据库中的数据进行更新,以确保数据的实时性和准确性。
以上是一些基本的步骤,具体的实现方式可能需要根据你的数据库系统和公众号的具体情况进行调整。
-
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
