确短信发送
This commit is contained in:
parent
060fb1ae5c
commit
c9589602eb
|
|
@ -9,7 +9,20 @@ class IndexController
|
||||||
{
|
{
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
return '哈啰';
|
|
||||||
|
$url = 'http://192.168.1.31/market/admin/coupon/grant';
|
||||||
|
$res = http_post($url, [
|
||||||
|
'userId' => 1,
|
||||||
|
'couponId' => 1,
|
||||||
|
'num' => 1,
|
||||||
|
'shopId' => 1,
|
||||||
|
]);
|
||||||
|
p($res);
|
||||||
|
|
||||||
|
|
||||||
|
// $data = \app\model\MessagePushTask::send_push_msg();
|
||||||
|
// $data = \app\model\MessagePushTask::send_sms_msg();
|
||||||
|
return json($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function view(Request $request)
|
public function view(Request $request)
|
||||||
|
|
|
||||||
|
|
@ -51,3 +51,48 @@ function uniqueMultidimensionalArray($array, $k = 'user_id') {
|
||||||
// 重新索引数组(从0开始的连续数字键)
|
// 重新索引数组(从0开始的连续数字键)
|
||||||
return array_values($unique);
|
return array_values($unique);
|
||||||
}
|
}
|
||||||
|
if(!function_exists('http_post')) {
|
||||||
|
function http_post($url, $data, $headers = [], $timeout = 30, $contentType = 'application/json')
|
||||||
|
{
|
||||||
|
// 初始化cURL
|
||||||
|
$ch = curl_init();
|
||||||
|
|
||||||
|
// 处理请求数据
|
||||||
|
if ($contentType === 'application/json') {
|
||||||
|
$data = json_encode($data);
|
||||||
|
} elseif (is_array($data)) {
|
||||||
|
$data = http_build_query($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置请求头
|
||||||
|
$defaultHeaders = [
|
||||||
|
"Content-Type: $contentType",
|
||||||
|
"Content-Length: " . strlen($data)
|
||||||
|
];
|
||||||
|
$headers = array_merge($defaultHeaders, $headers);
|
||||||
|
|
||||||
|
// 设置cURL选项
|
||||||
|
curl_setopt($ch, CURLOPT_URL, $url);
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_POST, true);
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
||||||
|
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
|
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
||||||
|
|
||||||
|
// 执行请求
|
||||||
|
$response = curl_exec($ch);
|
||||||
|
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||||
|
$error = curl_error($ch);
|
||||||
|
|
||||||
|
// 关闭cURL
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
// 处理错误
|
||||||
|
if ($response === false) {
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -9,10 +9,12 @@ use EasyWeChat\Factory;
|
||||||
|
|
||||||
class MessagePushTask
|
class MessagePushTask
|
||||||
{
|
{
|
||||||
public static function send_msg()
|
|
||||||
|
// 推送模版消息
|
||||||
|
public static function send_push_msg()
|
||||||
{
|
{
|
||||||
// 查询任务
|
// 查询模版任务
|
||||||
$event_list = Db::name('tb_push_event')->where(['status' => 0])->select();
|
$event_list = Db::name('tb_push_event')->where(['status' => 0, 'push_type' => 1])->select()->toArray();
|
||||||
if($event_list) {
|
if($event_list) {
|
||||||
try {
|
try {
|
||||||
Db::startTrans();
|
Db::startTrans();
|
||||||
|
|
@ -23,23 +25,30 @@ class MessagePushTask
|
||||||
foreach ($res as $rk => &$rv) {
|
foreach ($res as $rk => &$rv) {
|
||||||
if(empty($rv['open_id'])) {
|
if(empty($rv['open_id'])) {
|
||||||
unset($res[$rk]);
|
unset($res[$rk]);
|
||||||
|
}else {
|
||||||
|
$rv['push_event_id'] = $event['id'];
|
||||||
|
$rv['template_id'] = $event['template_id'];
|
||||||
|
$rv['keyword1'] = $event['keyword1'];
|
||||||
|
$rv['keyword2'] = $event['keyword2'];
|
||||||
|
$rv['keyword3'] = $event['keyword3'];
|
||||||
|
$rv['keyword4'] = $event['keyword4'];
|
||||||
|
$rv['keyword5'] = $event['keyword5'];
|
||||||
}
|
}
|
||||||
$rv['push_event_id'] = $event['id'];
|
|
||||||
$rv['template_id'] = $event['template_id'];
|
|
||||||
$rv['keyword1'] = $event['keyword1'];
|
|
||||||
$rv['keyword2'] = $event['keyword2'];
|
|
||||||
$rv['keyword3'] = $event['keyword3'];
|
|
||||||
$rv['keyword4'] = $event['keyword4'];
|
|
||||||
$rv['keyword5'] = $event['keyword5'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$user_list = uniqueMultidimensionalArray($res);
|
$user_list = uniqueMultidimensionalArray($res);
|
||||||
// 需要接收推送的用户 准备发送
|
// 需要接收推送的用户 准备发送
|
||||||
foreach ($user_list as $k => $user) {
|
foreach ($user_list as $k => $user) {
|
||||||
|
$data = [
|
||||||
|
'thing2' => $user['keyword1'],
|
||||||
|
'amount3' => $user['keyword2'],
|
||||||
|
'time6' => $user['keyword3'],
|
||||||
|
];
|
||||||
$user_push_list_res_id = Db::name('tb_user_push_event')->insertGetId([
|
$user_push_list_res_id = Db::name('tb_user_push_event')->insertGetId([
|
||||||
'push_event_id' => $user['push_event_id'],
|
'push_event_id' => $user['push_event_id'],
|
||||||
'user_id' => $user['user_id'],
|
'user_id' => $user['user_id'],
|
||||||
'create_time' => date("Y-m-d H:i:s"),
|
'create_time' => date("Y-m-d H:i:s"),
|
||||||
|
'content' => json_encode($data),
|
||||||
]);
|
]);
|
||||||
if($user_push_list_res_id) {
|
if($user_push_list_res_id) {
|
||||||
$app = Factory::officialAccount([
|
$app = Factory::officialAccount([
|
||||||
|
|
@ -47,11 +56,7 @@ class MessagePushTask
|
||||||
'secret' => config('cons.secret'),
|
'secret' => config('cons.secret'),
|
||||||
'response_type' => 'array',
|
'response_type' => 'array',
|
||||||
]);
|
]);
|
||||||
$data = [
|
|
||||||
'thing2' => $user['keyword1'],
|
|
||||||
'amount3' => $user['keyword2'],
|
|
||||||
'time6' => $user['keyword3'],
|
|
||||||
];
|
|
||||||
// 正式推送
|
// 正式推送
|
||||||
$push = $app->template_message->send([
|
$push = $app->template_message->send([
|
||||||
'touser' => $user['open_id'],
|
'touser' => $user['open_id'],
|
||||||
|
|
@ -61,6 +66,11 @@ class MessagePushTask
|
||||||
Log::info('用户-' . $user['user_id'] . ' 推送模版ID:'. $user['template_id'] .' 内容:' . json_encode($data, 256) . ' 推送结果:' . json_encode($push));
|
Log::info('用户-' . $user['user_id'] . ' 推送模版ID:'. $user['template_id'] .' 内容:' . json_encode($data, 256) . ' 推送结果:' . json_encode($push));
|
||||||
if($push['errcode'] == 0) {
|
if($push['errcode'] == 0) {
|
||||||
Db::name('tb_user_push_event')->where(['id' => $user_push_list_res_id])->update(['update_time' => date("Y-m-d H:i:s"), 'status' => 1]);
|
Db::name('tb_user_push_event')->where(['id' => $user_push_list_res_id])->update(['update_time' => date("Y-m-d H:i:s"), 'status' => 1]);
|
||||||
|
// 送券
|
||||||
|
if(isset($event['coupon'])) {
|
||||||
|
$coupon = json_decode($event['coupon'], true);
|
||||||
|
self::sendUserCoupon($event['shop_id'], $user['user_id'], $coupon['id'], $coupon['num']);
|
||||||
|
}
|
||||||
}else {
|
}else {
|
||||||
Db::name('tb_user_push_event')->where(['id' => $user_push_list_res_id])->update(['update_time' => date("Y-m-d H:i:s"), 'status' => -1, 'error' => json_encode($push)]);
|
Db::name('tb_user_push_event')->where(['id' => $user_push_list_res_id])->update(['update_time' => date("Y-m-d H:i:s"), 'status' => -1, 'error' => json_encode($push)]);
|
||||||
}
|
}
|
||||||
|
|
@ -81,6 +91,117 @@ class MessagePushTask
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 推送短信消息
|
||||||
|
public static function send_sms_msg()
|
||||||
|
{
|
||||||
|
// 查询短信任务
|
||||||
|
$event_list = Db::name('tb_push_event')->where(['status' => 0, 'push_type' => 2])->select()->toArray();
|
||||||
|
if($event_list) {
|
||||||
|
try {
|
||||||
|
Db::startTrans();
|
||||||
|
foreach ($event_list as $k => $event) {
|
||||||
|
Db::name('tb_push_event')->where(['id' => $event['id']])->update(['status' => 1, 'start_time' => date('Y-m-d H:i:s')]);
|
||||||
|
$res = self::getPullInfoUser($event);
|
||||||
|
if($res) {
|
||||||
|
foreach ($res as $rk => &$rv) {
|
||||||
|
if(empty($rv['phone'])) {
|
||||||
|
unset($res[$rk]);
|
||||||
|
}else {
|
||||||
|
$rv['push_event_id'] = $event['id'];
|
||||||
|
$rv['sms_sign'] = $event['sms_sign'];
|
||||||
|
$rv['sms_code'] = $event['sms_code'];
|
||||||
|
$rv['sms_content'] = $event['sms_content'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$user_list = uniqueMultidimensionalArray($res);
|
||||||
|
// 需要接收推送的用户 准备发送
|
||||||
|
foreach ($user_list as $k => $user) {
|
||||||
|
// 查询商家短信余额
|
||||||
|
$sms_shop = Db::name('tb_shop_sms_money')->where(['shop_id' => $event['shop_id']])->find();
|
||||||
|
if (!$sms_shop) {
|
||||||
|
$sms_shop_res_id = Db::name('tb_shop_sms_money')->insertGetId([
|
||||||
|
'shop_id' => $user['push_event_id'],
|
||||||
|
'create_time' => date("Y-m-d H:i:s"),
|
||||||
|
]);
|
||||||
|
log::info('商户' . $event['shop_id'] . '不存在或余额不足,停止发送');
|
||||||
|
continue 2;
|
||||||
|
} else {
|
||||||
|
// 一条短信的价格
|
||||||
|
$one_sms_price = config('cons.sms_price');
|
||||||
|
if($sms_shop['money'] < $one_sms_price) {
|
||||||
|
log::info('商户' . $event['shop_id'] . '余额不足,停止发送');
|
||||||
|
continue 2;
|
||||||
|
}else {
|
||||||
|
$user_push_list_res_id = Db::name('tb_user_push_event')->insertGetId([
|
||||||
|
'push_event_id' => $user['push_event_id'],
|
||||||
|
'user_id' => $user['user_id'],
|
||||||
|
'create_time' => date("Y-m-d H:i:s"),
|
||||||
|
'content' => json_encode($user),
|
||||||
|
]);
|
||||||
|
if ($user_push_list_res_id) {
|
||||||
|
|
||||||
|
// 发送短信空位置
|
||||||
|
|
||||||
|
|
||||||
|
Log::info('用户-' . $user['user_id'] . ' 短信发送ID:' . $user['template_id'] . ' 内容:' . json_encode($data, 256) . ' 推送结果:' . json_encode($push));
|
||||||
|
if ($push['errcode'] == 0) {
|
||||||
|
Db::name('tb_user_push_event')->where(['id' => $user_push_list_res_id])->update(['update_time' => date("Y-m-d H:i:s"), 'status' => 1]);
|
||||||
|
// 加入明细
|
||||||
|
$tb_shop_sms_money = Db::name('tb_shop_sms_money_detail')->insertGetId([
|
||||||
|
'shop_id' => $event['shop_id'],
|
||||||
|
'type' => 2,
|
||||||
|
'money' => $one_sms_price,
|
||||||
|
'create_time' => date("Y-m-d H:i:s"),
|
||||||
|
]);
|
||||||
|
if($tb_shop_sms_money) {
|
||||||
|
// 扣掉余额
|
||||||
|
Db::name('tb_shop_sms_money')->where([
|
||||||
|
'shop_id' => $event['shop_id'],
|
||||||
|
])->dec('money', $one_sms_price)->update();
|
||||||
|
}
|
||||||
|
// 送券
|
||||||
|
if(isset($event['coupon'])) {
|
||||||
|
$coupon = json_decode($event['coupon'], true);
|
||||||
|
self::sendUserCoupon($event['shop_id'], $user['user_id'], $coupon['id'], $coupon['num']);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Db::name('tb_user_push_event')->where(['id' => $user_push_list_res_id])->update(['update_time' => date("Y-m-d H:i:s"), 'status' => -1, 'error' => json_encode($push)]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Db::name('tb_push_event')->where(['id' => $event['id']])->update(['status' => 2, 'send_time' => date('Y-m-d H:i:s')]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Db::commit();
|
||||||
|
}catch (\Exception $e) {
|
||||||
|
Log::info('执行出错--' . $e->getMessage());
|
||||||
|
Db::rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Log::info('没有推送任务可执行');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 找到可以接收订阅消息的用户
|
* 找到可以接收订阅消息的用户
|
||||||
* @param $type类型 1按次数发送 2自定义 3按标签
|
* @param $type类型 1按次数发送 2自定义 3按标签
|
||||||
|
|
@ -90,12 +211,15 @@ class MessagePushTask
|
||||||
{
|
{
|
||||||
$user_arr = [];
|
$user_arr = [];
|
||||||
switch ($event['type']) {
|
switch ($event['type']) {
|
||||||
|
// 按可接收次数发送(模版推送)/全部绑定手机用户(短信推送)
|
||||||
case 1;
|
case 1;
|
||||||
$user_arr = self::getPullInfoUserToNumber($event);
|
$user_arr = self::getPullInfoUserToNumber($event);
|
||||||
break;
|
break;
|
||||||
|
// 自定义
|
||||||
case 2;
|
case 2;
|
||||||
$user_arr = self::getPullInfoUserToCustom($event);
|
$user_arr = self::getPullInfoUserToCustom($event);
|
||||||
break;
|
break;
|
||||||
|
// 按标签
|
||||||
case 3;
|
case 3;
|
||||||
$user_arr = self::getPullInfoUserToLabel($event);
|
$user_arr = self::getPullInfoUserToLabel($event);
|
||||||
break;
|
break;
|
||||||
|
|
@ -108,13 +232,19 @@ class MessagePushTask
|
||||||
public static function getPullInfoUserToNumber($event)
|
public static function getPullInfoUserToNumber($event)
|
||||||
{
|
{
|
||||||
$user_num = [];
|
$user_num = [];
|
||||||
if($event['can_send_times'] > 0) {
|
if($event['push_type'] == 1 && $event['can_send_times'] > 0) {
|
||||||
$user_num = Db::name('tb_user_push_event_num')->alias('upen')->where('upen.num', '>=', $event['can_send_times'])
|
$user_num = Db::name('tb_user_push_event_num')->alias('upen')->where('upen.num', '>=', $event['can_send_times'])
|
||||||
->join('tb_user_info u', 'upen.user_id = u.id')
|
->join('tb_user_info u', 'upen.user_id = u.id')
|
||||||
->field('upen.user_id as user_id, upen.open_id as open_id')
|
->field('upen.user_id as user_id, upen.open_id as open_id')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
|
if($event['push_type'] == 2) {
|
||||||
|
$user_num = Db::name('tb_user_info')->where('phone', '<>', '')
|
||||||
|
->field('id as user_id, wechat_ac_open_id as open_id, phone')
|
||||||
|
->select()
|
||||||
|
->toArray();
|
||||||
|
}
|
||||||
return $user_num;
|
return $user_num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -131,21 +261,21 @@ class MessagePushTask
|
||||||
// 未知
|
// 未知
|
||||||
if($gender == 0) {
|
if($gender == 0) {
|
||||||
$gender_data_res = Db::name('tb_user_info')->whereNotIn('sex', [0,1])
|
$gender_data_res = Db::name('tb_user_info')->whereNotIn('sex', [0,1])
|
||||||
->field('id as user_id, wechat_ac_open_id as open_id')
|
->field('id as user_id, wechat_ac_open_id as open_id, phone')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
// 男
|
// 男
|
||||||
if($gender == 1) {
|
if($gender == 1) {
|
||||||
$gender_data_res = Db::name('tb_user_info')->where('sex', 1)
|
$gender_data_res = Db::name('tb_user_info')->where('sex', 1)
|
||||||
->field('id as user_id, wechat_ac_open_id as open_id')
|
->field('id as user_id, wechat_ac_open_id as open_id, phone')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
// 女
|
// 女
|
||||||
if($gender == 2) {
|
if($gender == 2) {
|
||||||
$gender_data_res = Db::name('tb_user_info')->where('sex', 0)
|
$gender_data_res = Db::name('tb_user_info')->where('sex', 0)
|
||||||
->field('id as user_id, wechat_ac_open_id as open_id')
|
->field('id as user_id, wechat_ac_open_id as open_id, phone')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
|
|
@ -174,7 +304,7 @@ class MessagePushTask
|
||||||
->leftJoin('tb_order_info o', 'u.id = o.user_id')
|
->leftJoin('tb_order_info o', 'u.id = o.user_id')
|
||||||
->where('o.user_id', 'null')
|
->where('o.user_id', 'null')
|
||||||
->distinct()
|
->distinct()
|
||||||
->field('u.id as user_id, u.wechat_ac_open_id as open_id')
|
->field('u.id as user_id, u.wechat_ac_open_id as open_id, u.phone as phone')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
|
|
@ -189,7 +319,7 @@ class MessagePushTask
|
||||||
// 筛选出订单数量为1的用户
|
// 筛选出订单数量为1的用户
|
||||||
->having('COUNT(o.id) = 1')
|
->having('COUNT(o.id) = 1')
|
||||||
// 选择需要的用户字段,同时查询订单数量(可选)
|
// 选择需要的用户字段,同时查询订单数量(可选)
|
||||||
->field('u.id as user_id, u.wechat_ac_open_id as open_id')
|
->field('u.id as user_id, u.wechat_ac_open_id as open_id, u.phone as phone')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
|
|
@ -203,7 +333,7 @@ class MessagePushTask
|
||||||
->group('u.id')
|
->group('u.id')
|
||||||
// 筛选出订单数量为1的用户
|
// 筛选出订单数量为1的用户
|
||||||
->having('COUNT(o.id) BETWEEN 2 AND 5')
|
->having('COUNT(o.id) BETWEEN 2 AND 5')
|
||||||
->field('u.id as user_id, u.wechat_ac_open_id as open_id')
|
->field('u.id as user_id, u.wechat_ac_open_id as open_id, u.phone as phone')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
|
|
@ -217,7 +347,7 @@ class MessagePushTask
|
||||||
->group('u.id')
|
->group('u.id')
|
||||||
// 筛选出订单数量为1的用户
|
// 筛选出订单数量为1的用户
|
||||||
->having('COUNT(o.id) >= 5')
|
->having('COUNT(o.id) >= 5')
|
||||||
->field('u.id as user_id, u.wechat_ac_open_id as open_id')
|
->field('u.id as user_id, u.wechat_ac_open_id as open_id, u.phone as phone')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
|
|
@ -246,7 +376,7 @@ class MessagePushTask
|
||||||
->join('tb_order_info o', 'u.id = o.user_id')
|
->join('tb_order_info o', 'u.id = o.user_id')
|
||||||
->where('o.create_time', '>=', date('Y-m-d 00:00:00'))
|
->where('o.create_time', '>=', date('Y-m-d 00:00:00'))
|
||||||
->where('o.create_time', '<=', date('Y-m-d 23:59:59'))
|
->where('o.create_time', '<=', date('Y-m-d 23:59:59'))
|
||||||
->field('u.id as user_id, u.wechat_ac_open_id as open_id')
|
->field('u.id as user_id, u.wechat_ac_open_id as open_id, u.phone as phone')
|
||||||
->distinct()
|
->distinct()
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
|
|
@ -258,7 +388,7 @@ class MessagePushTask
|
||||||
->join('tb_order_info o', 'u.id = o.user_id')
|
->join('tb_order_info o', 'u.id = o.user_id')
|
||||||
->where('o.create_time', '>=', date('Y-m-d 00:00:00', strtotime('-1 day')))
|
->where('o.create_time', '>=', date('Y-m-d 00:00:00', strtotime('-1 day')))
|
||||||
->where('o.create_time', '<=', date('Y-m-d 23:59:59', strtotime('-1 day')))
|
->where('o.create_time', '<=', date('Y-m-d 23:59:59', strtotime('-1 day')))
|
||||||
->field('u.id as user_id, u.wechat_ac_open_id as open_id')
|
->field('u.id as user_id, u.wechat_ac_open_id as open_id, u.phone as phone')
|
||||||
->distinct()
|
->distinct()
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
|
|
@ -272,7 +402,7 @@ class MessagePushTask
|
||||||
->leftJoin('tb_order_info o', 'u.id = o.user_id')
|
->leftJoin('tb_order_info o', 'u.id = o.user_id')
|
||||||
->where('o.create_time', '>=', $twoWeeksAgo)
|
->where('o.create_time', '>=', $twoWeeksAgo)
|
||||||
->where('o.id', 'null')
|
->where('o.id', 'null')
|
||||||
->field('u.id as user_id, u.wechat_ac_open_id as open_id')
|
->field('u.id as user_id, u.wechat_ac_open_id as open_id, u.phone as phone')
|
||||||
->distinct()
|
->distinct()
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
|
|
@ -289,7 +419,7 @@ class MessagePushTask
|
||||||
->group('u.id')
|
->group('u.id')
|
||||||
// 筛选最后下单时间在30天前到15天前之间的用户
|
// 筛选最后下单时间在30天前到15天前之间的用户
|
||||||
->having('MAX(o.create_time) >="'. $startTime .'" AND MAX(o.create_time) <= "' . $endTime . '"')
|
->having('MAX(o.create_time) >="'. $startTime .'" AND MAX(o.create_time) <= "' . $endTime . '"')
|
||||||
->field('u.id as user_id, u.wechat_ac_open_id as open_id')
|
->field('u.id as user_id, u.wechat_ac_open_id as open_id, u.phone as phone')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
|
|
@ -305,7 +435,7 @@ class MessagePushTask
|
||||||
// 筛选最后下单时间在1个月前及更早
|
// 筛选最后下单时间在1个月前及更早
|
||||||
->having('MAX(o.create_time) <= "' . $oneMonthAgo . '"')
|
->having('MAX(o.create_time) <= "' . $oneMonthAgo . '"')
|
||||||
// ->field('u.id as user_id, u.wechat_ac_open_id as open_id, MAX(o.create_time) as last_order_time')
|
// ->field('u.id as user_id, u.wechat_ac_open_id as open_id, MAX(o.create_time) as last_order_time')
|
||||||
->field('u.id as user_id, u.wechat_ac_open_id as open_id')
|
->field('u.id as user_id, u.wechat_ac_open_id as open_id, u.phone as phone')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
|
|
@ -329,21 +459,52 @@ class MessagePushTask
|
||||||
// 非会员
|
// 非会员
|
||||||
if($vip == 0) {
|
if($vip == 0) {
|
||||||
$vip_data_res = Db::name('tb_user_info')->whereNotIn('is_vip', 0)
|
$vip_data_res = Db::name('tb_user_info')->whereNotIn('is_vip', 0)
|
||||||
->field('id as user_id, wechat_ac_open_id as open_id')
|
->field('id as user_id, wechat_ac_open_id as open_id,phone')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
// 会员
|
// 会员
|
||||||
if($vip == 1) {
|
if($vip == 1) {
|
||||||
$vip_data_res = Db::name('tb_user_info')->where('is_vip', 1)
|
if($event['push_type'] == 1) {
|
||||||
->field('id as user_id, wechat_ac_open_id as open_id')
|
$vip_data_res = Db::name('tb_user_info')->where('is_vip', 1)
|
||||||
->select()
|
->field('id as user_id, wechat_ac_open_id as open_id,phone')
|
||||||
->toArray();
|
->select()
|
||||||
|
->toArray();
|
||||||
|
}
|
||||||
|
// 推送类型为短信推送
|
||||||
|
if($event['push_type'] == 2) {
|
||||||
|
// 全部会员
|
||||||
|
if($event['vip_lavel'] == 0) {
|
||||||
|
$vip_data_res = Db::name('tb_user_info')->where('is_vip', 1)
|
||||||
|
->field('id as user_id, wechat_ac_open_id as open_id,phone')
|
||||||
|
->select()
|
||||||
|
->toArray();
|
||||||
|
}
|
||||||
|
// 仅限等级
|
||||||
|
if($event['vip_lavel'] == 1) {
|
||||||
|
$vip_data_res = Db::name('tb_user_info')->where(['is_vip' => 1, 'member_level_id' => $event['vip_lavel_id']])
|
||||||
|
->field('id as user_id, wechat_ac_open_id as open_id,phone')
|
||||||
|
->select()
|
||||||
|
->toArray();
|
||||||
|
}
|
||||||
|
// 以上等级
|
||||||
|
if($event['vip_lavel'] == 2) {
|
||||||
|
// 找到会员详情
|
||||||
|
$vip_config_info = Db::name('tb_member_level_config')->where(['id' => $event['vip_lavel_id']])->find();
|
||||||
|
if($vip_config_info) {
|
||||||
|
$vip_config_info = Db::name('tb_member_level_config')->where('experience_value', '>', $vip_config_info['experience_value'])->column('id');
|
||||||
|
if($vip_config_info) {
|
||||||
|
$vip_data_res = Db::name('tb_user_info')->where(['is_vip' => 1])->whereIn('member_level_id', $vip_config_info)
|
||||||
|
->field('id as user_id, wechat_ac_open_id as open_id,phone')
|
||||||
|
->select()
|
||||||
|
->toArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($vip_data_arr) {
|
if($vip_data_arr) {
|
||||||
$vip_data_arr = array_merge($vip_data_arr, $vip_data_res);
|
$vip_data_arr = array_merge($vip_data_arr, $vip_data_res);
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
$vip_data_arr = $vip_data_res;
|
$vip_data_arr = $vip_data_res;
|
||||||
}
|
}
|
||||||
|
|
@ -372,7 +533,7 @@ class MessagePushTask
|
||||||
// 已绑定
|
// 已绑定
|
||||||
if($telphone == 1) {
|
if($telphone == 1) {
|
||||||
$telphone_data_res = Db::name('tb_user_info')->where('phone', '<>', '')
|
$telphone_data_res = Db::name('tb_user_info')->where('phone', '<>', '')
|
||||||
->field('id as user_id, wechat_ac_open_id as open_id')
|
->field('id as user_id, wechat_ac_open_id as open_id, phone')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
|
|
@ -401,7 +562,7 @@ class MessagePushTask
|
||||||
->column('user_id');
|
->column('user_id');
|
||||||
if($label) {
|
if($label) {
|
||||||
$data_arr = Db::name('tb_user_info')->whereIn('id', $label)
|
$data_arr = Db::name('tb_user_info')->whereIn('id', $label)
|
||||||
->field('id as user_id, wechat_ac_open_id as open_id')
|
->field('id as user_id, wechat_ac_open_id as open_id, phone')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
|
|
@ -410,23 +571,27 @@ class MessagePushTask
|
||||||
|
|
||||||
|
|
||||||
// 给用户送送优惠券
|
// 给用户送送优惠券
|
||||||
public static function sendUserCoupon(int | array $user_id, $coupon_id, $number = 1)
|
public static function sendUserCoupon($shop_id, int | array $user_id, $coupon_id, $number = 1)
|
||||||
{
|
{
|
||||||
try {
|
if ($number === null || $number <= 0) {
|
||||||
Db::startTrans();
|
Log::info('推送用户送券发放数量不能小于0');
|
||||||
if(is_int($user_id)) {
|
|
||||||
|
|
||||||
}elseif (is_array($user_id)) {
|
|
||||||
|
|
||||||
}
|
|
||||||
Db::commit();
|
|
||||||
return true;
|
|
||||||
}catch (\Exception $e) {
|
|
||||||
Db::rollback();
|
|
||||||
Log::info('用户送券异常-->' . $e->getMessage());
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
$url = 'http://192.168.1.31/market/admin/coupon/grant';
|
||||||
|
$res = http_post($url, [
|
||||||
|
'userId' => $user_id,
|
||||||
|
'couponId' => $coupon_id,
|
||||||
|
'num' => $number,
|
||||||
|
'shopId' => $shop_id,
|
||||||
|
]);
|
||||||
|
Log::info('发券:' . $res);
|
||||||
|
$res = json_decode($res, true);
|
||||||
|
if($res['code'] == 200) {
|
||||||
|
Log::info('userId:' . $user_id . ' couponId:' . $coupon_id . ' shopId:' . $shop_id . '发券成功');
|
||||||
|
}else {
|
||||||
|
Log::info('userId:' . $user_id . ' couponId:' . $coupon_id . ' shopId:' . $shop_id . '发券失败' . ' 信息:' . $res['msg']);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,4 +5,5 @@
|
||||||
return [
|
return [
|
||||||
'app_id' => 'wx1fb600d0f5ea6279', // 银收客czg
|
'app_id' => 'wx1fb600d0f5ea6279', // 银收客czg
|
||||||
'secret' => 'b4c0534c9b5e6c84a7fe5c2078dff876',
|
'secret' => 'b4c0534c9b5e6c84a7fe5c2078dff876',
|
||||||
|
'sms_price' => 0.055, // 短信发送价格
|
||||||
];
|
];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue