admin/addon/wechat/shop/controller/Fans.php

304 lines
11 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 成都云之牛科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.cdcloudshop.com
* =========================================================
*/
namespace addon\wechat\shop\controller;
use addon\wechat\model\Wechat as WechatModel;
use addon\wechat\model\Fans as FansModel;
/**
* 微信粉丝控制器
*/
class Fans extends BaseWechat
{
/**
* 粉丝列表
* @return \multitype
*/
public function lists()
{
$fans_model = new FansModel();
if (request()->isAjax()) {
$page = input('page', 1);
$limit = input('page_size', PAGE_LIST_ROWS);
$is_subscribe = input('is_subscribe', '');//关注
$nickname = input('nickname', '');//粉丝名称
$start_time = input('start_time', '');
$end_time = input('end_time', '');
$condition[] = ['site_id', '=', $this->site_id];
if ($is_subscribe !== '') {
$condition[] = ['is_subscribe', "=", $is_subscribe];
}
if ($nickname != '') {
$condition[] = ['nickname', 'like', '%' . $nickname . '%'];
}
if (!empty($start_time) && empty($end_time)) {
$condition[] = ["subscribe_time", ">=", date_to_time($start_time)];
} elseif (empty($start_time) && !empty($end_time)) {
$condition[] = ["subscribe_time", "<=", date_to_time($end_time)];
} elseif (!empty($start_time) && !empty($end_time)) {
$condition[] = ['subscribe_time', 'between', [date_to_time($start_time), date_to_time($end_time)]];
}
$fans_list = $fans_model->getFansPageList($condition, $page, $limit);
return $fans_list;
}
$tag_list = $fans_model->getFansTagList();
$this->assign('tag_list', $tag_list['data']);
return $this->fetch('fans/lists', [], $this->replace);
}
/**
* 更新粉丝信息
*/
public function syncWechatFans()
{
$page_index = input('page', 0);
$page_size = input('limit', PAGE_LIST_ROWS);
$wechat_model = new WechatModel($this->site_id);
if ($page_index == 0) {
//建立连接同时获取所有用户openid 拉去粉丝信息列表(一次拉取调用最多拉取10000个关注者的OpenID可以通过多次拉取的方式来满足需求。)
$openid_list = [];
$is_continue = true;
$next_openid = null;
do {
$item_result = $wechat_model->user($next_openid);
if ($item_result["code"] < 0)
return $item_result;
if(empty($item_result['data']['data'])){
return success(0, '公众号暂无粉丝');
}
$next_openid = $item_result["data"]["next_openid"];
$openid_item = $item_result["data"]['data']["openid"];
if (empty($openid_item)) {
$is_continue = false;
} else {
$is_continue = false;
foreach ($openid_item as $k => $v) {
$openid_list[] = $v;
}
}
} while ($is_continue);
//将粉丝列表存入session
session('wechat_openid_list', $openid_list);
$total = count($openid_list);
if ($openid_list % $page_size == 0) {
$page_count = $total / $page_size;
} else {
$page_count = (int)($total / $page_size) + 1;
}
$data = array(
'total' => $total,
'page_count' => $page_count,
);
return success(0, '', $data);
} else {
//对应页数更新用户粉丝信息
$openid_list = session('wechat_openid_list');
if (empty($openid_list)) {
return error();
}
$start = ($page_index - 1) * $page_size;
$page_fans_openid_list = array_slice($openid_list, $start, $page_size);
if (empty($page_fans_openid_list)) {
return error();
}
$fans_model = new FansModel();
$result = $wechat_model->selectUser($page_fans_openid_list);
if ($result['data'] && $result['data']['user_info_list']) {
foreach ($result['data']['user_info_list'] as $k => $v) {
$nickname_decode = preg_replace('/[\x{10000}-\x{10FFFF}]/u', '', $v['nickname']);
$nickname = preg_replace_callback('/./u',
function (array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
},
$v['nickname']);
$add_data = [
'site_id' => $this->site_id,
'nickname' => $nickname,
'nickname_decode' => $nickname_decode,
'headimgurl' => $v['headimgurl'],
'sex' => $v['sex'],
'language' => $v['language'],
'country' => $v['country'],
'province' => $v['province'],
'city' => $v['city'],
'openid' => $v['openid'],
'unionid' => $v['unionid'] ?? '',
'groupid' => '',
'is_subscribe' => 1,
'remark' => $v['remark'],
'subscribe_time' => $v['subscribe_time'] ?? 0,
'subscribe_scene' => $v['subscribe_scene'] ?? 0,
'unsubscribe_time' => $v['unsubscribe_time'] ?? 0,
'update_date' => time()
];
$info = $fans_model->getFansInfo(['openid' => $v['openid'], 'site_id' => $this->site_id], 'openid');
if (!empty($info['data'])) {
$fans_model->editFans($add_data, [['openid', '=', $v['openid']], ['site_id', '=', $this->site_id]]);
} else {
$fans_model->addFans($add_data);
}
}
}
return $result;
}
}
/**
* 微信粉丝标签
*/
public function fansTagList()
{
if (request()->isAjax()) {
$fans_model = new FansModel();
$page = input('page', 1);
$limit = input('limit', PAGE_LIST_ROWS);
$condition = [];
$list = $fans_model->getFansTagPageList($condition, $page, $limit);
return $list;
} else {
return $this->fetch('fans/fans_tag_list');
}
}
/**
* 为微信粉丝批量打标签
*/
public function batchtagging()
{
if (request()->isAjax()) {
$fans_model = new FansModel();
$tagids = input('tag_id', '');
$openids = input('openid', '');
if (!empty($openids)) {
$tag_id_list = explode(',', $tagids);
$openid_list = explode(',', $openids);
$data = [
'tag_id_list' => $tag_id_list,
'openid_list' => $openid_list
];
$res = $fans_model->batchtagging($data);
return $res;
}
}
}
/**
* 为微信粉丝打标签
*/
public function fansTagging()
{
if (request()->isAjax()) {
$fans_model = new FansModel();
$openid = input('openid', '');
$tagid_list = input('tagid_list', '');
$cancel_tagid_list = input('cancel_tagid_list', '');
if (!empty($openid)) {
$tagid_list_arr = !empty($tagid_list) ? explode(',', $tagid_list) : [];
$cancel_tagid_list_arr = !empty($cancel_tagid_list) ? explode(',', $cancel_tagid_list) : [];
$data = [
'tag_id_list' => $tagid_list_arr,
'openid_list' => [$openid]
];
$res = $fans_model->batchtagging($data);//批量增加标签
$data['tag_id_list'] = $cancel_tagid_list_arr;
$fans_model->batchUnTagging($data);//批量减少标签
return $res;
}
}
}
/**
* 添加标签
* @return multitype:string
*/
public function addFansTag()
{
if (request()->isAjax()) {
$fans_model = new FansModel();
$tag_name = input('tag_name', '');
if (!empty($tag_name)) {
$data = [
'tag_name' => $tag_name,
];
$data["tags"] = time();
$data["tag_id"] = time();
$res = $fans_model->addFansTag($data);
return $res;
}
}
}
/**
* 编辑标签
*/
public function editFansTag()
{
if (request()->isAjax()) {
$fans_model = new FansModel();
$id = input('id', '');
$tag_name = input('tag_name', '');
if (!empty($tag_name)) {
$data = [
'tag_name' => $tag_name,
];
$condition = array(
["id", "=", $id]
);
$res = $fans_model->editFansTag($data, $condition);
return $res;
} else {
return error("", "标签名称不可为空!");
}
}
}
/**
* 删除标签
*/
public function deleteFansTag()
{
if (request()->isAjax()) {
$fans_model = new FansModel();
$id = input('id', '');
$condition = [
['id', "=", $id],
];
$res = $fans_model->deleteFansTag($condition);
return $res;
}
}
/**
* 同步粉丝标签
*/
public function syncFansTag()
{
if (request()->isAjax()) {
$fans_model = new FansModel();
$res = $fans_model->syncFansTag();
return $res;
}
}
}