1
This commit is contained in:
parent
b8949f0b9a
commit
2843a2b477
@ -52,6 +52,33 @@ CREATE TABLE `accounts` (
|
|||||||
KEY `channel_index` (`channel`),
|
KEY `channel_index` (`channel`),
|
||||||
KEY `gameid_index` (`gameid`)
|
KEY `gameid_index` (`gameid`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `subscribe`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `subscribe` (
|
||||||
|
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||||
|
`accountid` varchar(60) DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)',
|
||||||
|
`channel` int(11) NOT NULL COMMENT 'channel',
|
||||||
|
`gameid` int(11) NOT NULL COMMENT 'gameid',
|
||||||
|
`openid` varchar(50) NOT NULL COMMENT '平台',
|
||||||
|
`signorder` int(11) NOT NULL DEFAULT '0' COMMENT '是否订阅签到',
|
||||||
|
`boxorder` int(11) NOT NULL DEFAULT '0' COMMENT '是否订阅宝箱',
|
||||||
|
`diaorder` int(11) NOT NULL DEFAULT '0' COMMENT '是否订阅钻石',
|
||||||
|
`seaorder` int(11) NOT NULL DEFAULT '0' COMMENT '是否订阅赛季',
|
||||||
|
`signtime` int(11) NOT NULL DEFAULT '0' COMMENT '最后签到订阅时间',
|
||||||
|
`boxtime` int(11) NOT NULL DEFAULT '0' COMMENT '最后宝箱订阅时间',
|
||||||
|
`diatime` int(11) NOT NULL DEFAULT '0' COMMENT '最后钻石订阅时间',
|
||||||
|
`seatime` int(11) NOT NULL DEFAULT '0' COMMENT '最后赛季订阅时间',
|
||||||
|
PRIMARY KEY (`idx`),
|
||||||
|
UNIQUE KEY `accountid` (`accountid`),
|
||||||
|
UNIQUE KEY `channel_gameid_openid_index` (`channel`,`gameid`,`openid`),
|
||||||
|
KEY `openid_index` (`openid`),
|
||||||
|
KEY `channel_index` (`channel`),
|
||||||
|
KEY `gameid_index` (`gameid`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
|
||||||
|
30
sql/kefudb_n_migrate_200430_01.sql
Normal file
30
sql/kefudb_n_migrate_200430_01.sql
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
begin;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `subscribe`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `subscribe` (
|
||||||
|
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||||
|
`accountid` varchar(60) DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)',
|
||||||
|
`channel` int(11) NOT NULL COMMENT 'channel',
|
||||||
|
`gameid` int(11) NOT NULL COMMENT 'gameid',
|
||||||
|
`openid` varchar(50) NOT NULL COMMENT '平台',
|
||||||
|
`signorder` int(11) NOT NULL DEFAULT '0' COMMENT '是否订阅签到',
|
||||||
|
`boxorder` int(11) NOT NULL DEFAULT '0' COMMENT '是否订阅宝箱',
|
||||||
|
`diaorder` int(11) NOT NULL DEFAULT '0' COMMENT '是否订阅钻石',
|
||||||
|
`seaorder` int(11) NOT NULL DEFAULT '0' COMMENT '是否订阅赛季',
|
||||||
|
`signtime` int(11) NOT NULL DEFAULT '0' COMMENT '最后签到订阅时间',
|
||||||
|
`boxtime` int(11) NOT NULL DEFAULT '0' COMMENT '最后宝箱订阅时间',
|
||||||
|
`diatime` int(11) NOT NULL DEFAULT '0' COMMENT '最后钻石订阅时间',
|
||||||
|
`seatime` int(11) NOT NULL DEFAULT '0' COMMENT '最后赛季订阅时间',
|
||||||
|
PRIMARY KEY (`idx`),
|
||||||
|
UNIQUE KEY `accountid` (`accountid`),
|
||||||
|
UNIQUE KEY `channel_gameid_openid_index` (`channel`,`gameid`,`openid`),
|
||||||
|
KEY `openid_index` (`openid`),
|
||||||
|
KEY `channel_index` (`channel`),
|
||||||
|
KEY `gameid_index` (`gameid`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||||
|
|
||||||
|
insert into version (version) values(2020043001);
|
||||||
|
|
||||||
|
commit;
|
15
tools/nohup.out
Normal file
15
tools/nohup.out
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
start!
|
||||||
|
1588176000
|
||||||
|
1588176000
|
||||||
|
1588176000
|
||||||
|
1588176000
|
||||||
|
1588176000
|
||||||
|
1588176000
|
||||||
|
2020-04-30 08:00:1588204800
|
||||||
|
sendNotifySubscribe start
|
||||||
|
sendNotify end
|
||||||
|
1588262400
|
||||||
|
2020-04-30 09:00:1588208400
|
||||||
|
sendNotifySubscribe start
|
||||||
|
sendNotify end
|
||||||
|
1588262400
|
89
tools/subscribe_robot.py
Normal file
89
tools/subscribe_robot.py
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
import time
|
||||||
|
import datetime
|
||||||
|
import hashlib
|
||||||
|
import urllib.request
|
||||||
|
import tornado.ioloop
|
||||||
|
import tornado.web
|
||||||
|
|
||||||
|
def md5Sign(params, secret, timestamp, connstr = '&', secret_connstr = ':'):
|
||||||
|
params_str = ''
|
||||||
|
for key in sorted(params.keys()):
|
||||||
|
params_str = params_str + key + '=' + str(params[key]) + connstr
|
||||||
|
if params_str != '' and connstr != '':
|
||||||
|
params_str = params_str[0:-1]
|
||||||
|
str1 = params_str + secret_connstr + str(timestamp) + secret
|
||||||
|
try:
|
||||||
|
m5 = hashlib.md5()
|
||||||
|
m5.update(str1.encode('utf-8'))
|
||||||
|
return m5.hexdigest()
|
||||||
|
except Exception as e:
|
||||||
|
print('md5Sign error: ' + str(e), flush=True)
|
||||||
|
|
||||||
|
def getDaySeconds(time_val, incdays):
|
||||||
|
time_zone = 8
|
||||||
|
dayseconds = int((time_val + time_zone * 3600)/3600/24 + incdays) * 3600 * 24 - 3600 * time_zone;
|
||||||
|
print(dayseconds, flush=True)
|
||||||
|
return dayseconds
|
||||||
|
|
||||||
|
def sendNotify(conf, sendtime):
|
||||||
|
try:
|
||||||
|
print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%s"), flush=True)
|
||||||
|
print('sendNotifySubscribe start', flush=True)
|
||||||
|
params = {'key' : 'kingsome'}
|
||||||
|
secret = 'fc38349c5d084e920925e614c420be9f'
|
||||||
|
timestamp = time.time()
|
||||||
|
md5signstr = md5Sign(params, secret, timestamp)
|
||||||
|
url = conf['notify_url'] + '×tamp=' + str(timestamp) + '&sign=' + md5signstr
|
||||||
|
req = urllib.request.Request(url)
|
||||||
|
data = urllib.request.urlopen(req).read()
|
||||||
|
print('sendNotify end', flush=True)
|
||||||
|
except Exception as e:
|
||||||
|
print('sendNotiSubscribe error: ' + str(e), flush=True)
|
||||||
|
|
||||||
|
#进入下一次循环
|
||||||
|
tornado.ioloop.IOLoop.current().call_at(getDaySeconds(time.time(), 1) + sendtime,
|
||||||
|
lambda : sendNotify(conf, sendtime))
|
||||||
|
|
||||||
|
class SelfCheckingHandler(tornado.web.RequestHandler):
|
||||||
|
|
||||||
|
def get(self):
|
||||||
|
self.write(json.dumps({
|
||||||
|
'errcode': 0,
|
||||||
|
'errmsg': '',
|
||||||
|
'healthy': 1,
|
||||||
|
'max_rundelay': 10
|
||||||
|
},
|
||||||
|
separators=(',', ':')))
|
||||||
|
|
||||||
|
|
||||||
|
def make_app():
|
||||||
|
return tornado.web.Application([
|
||||||
|
(r"/webapp/index[\.]php", SelfCheckingHandler),
|
||||||
|
])
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print('start!', flush=True)
|
||||||
|
conf = json.loads(open('../config/subscribe_robot.json', 'r').read())
|
||||||
|
app = make_app()
|
||||||
|
app.listen(conf['listen_port'])
|
||||||
|
|
||||||
|
#sendNotify(conf, conf['signtime'])
|
||||||
|
|
||||||
|
|
||||||
|
tornado.ioloop.IOLoop.current().call_at(getDaySeconds(time.time(), 1) + conf['signtime'],
|
||||||
|
lambda : sendNotify(conf, conf['signtime']))
|
||||||
|
tornado.ioloop.IOLoop.current().call_at(getDaySeconds(time.time(), 1) + conf['boxtime'],
|
||||||
|
lambda : sendNotify(conf, conf['boxtime']))
|
||||||
|
tornado.ioloop.IOLoop.current().call_at(getDaySeconds(time.time(), 1) + conf['diamondtime1'],
|
||||||
|
lambda : sendNotify(conf, conf['diamondtime1']))
|
||||||
|
tornado.ioloop.IOLoop.current().call_at(getDaySeconds(time.time(), 1) + conf['diamondtime2'],
|
||||||
|
lambda : sendNotify(conf, conf['diamondtime2']))
|
||||||
|
tornado.ioloop.IOLoop.current().call_at(getDaySeconds(time.time(), 1) + conf['diamondtime3'],
|
||||||
|
lambda : sendNotify(conf, conf['diamondtime3']))
|
||||||
|
tornado.ioloop.IOLoop.current().call_at(getDaySeconds(time.time(), 1) + conf['seasontime'],
|
||||||
|
lambda : sendNotify(conf, conf['seasontime']))
|
||||||
|
tornado.ioloop.IOLoop.current().start()
|
@ -271,6 +271,7 @@ class KefuController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private function sendOneDBInfo($conn, &$media_conf)
|
private function sendOneDBInfo($conn, &$media_conf)
|
||||||
{
|
{
|
||||||
$last_idx = 0;
|
$last_idx = 0;
|
||||||
@ -410,8 +411,8 @@ class KefuController {
|
|||||||
return $access_token;
|
return $access_token;
|
||||||
}
|
}
|
||||||
$config_name = "../config/game$gameid/weixin/config.php";
|
$config_name = "../config/game$gameid/weixin/config.php";
|
||||||
@require $config_name;
|
require $config_name;
|
||||||
|
echo('zzz4');
|
||||||
$response = '';
|
$response = '';
|
||||||
if (!phpcommon\HttpClient::get('https://api.weixin.qq.com/cgi-bin/token',
|
if (!phpcommon\HttpClient::get('https://api.weixin.qq.com/cgi-bin/token',
|
||||||
array(
|
array(
|
||||||
|
474
webapp/controller/SubscribeController.class.php
Normal file
474
webapp/controller/SubscribeController.class.php
Normal file
@ -0,0 +1,474 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
include_once "endecrypt/wxBizMsgCrypt.php";
|
||||||
|
|
||||||
|
class SubscribeController {
|
||||||
|
|
||||||
|
protected function getRedis($accountid)
|
||||||
|
{
|
||||||
|
$redis_conf = getRedisConfig(crc32($accountid));
|
||||||
|
$r = new phpcommon\Redis(array(
|
||||||
|
'host' => $redis_conf['host'],
|
||||||
|
'port' => $redis_conf['port'],
|
||||||
|
'passwd' => $redis_conf['passwd']
|
||||||
|
));
|
||||||
|
return $r;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getMysql($accountid)
|
||||||
|
{
|
||||||
|
$mysql_conf = getMysqlConfig(crc32($accountid));
|
||||||
|
$conn = new phpcommon\Mysql(array(
|
||||||
|
'host' => $mysql_conf['host'],
|
||||||
|
'port' => $mysql_conf['port'],
|
||||||
|
'user' => $mysql_conf['user'],
|
||||||
|
'passwd' => $mysql_conf['passwd'],
|
||||||
|
'dbname' => 'kefudb' . $mysql_conf['instance_id']
|
||||||
|
));
|
||||||
|
return $conn;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function translateAttachments($config)
|
||||||
|
{
|
||||||
|
$attachments = '';
|
||||||
|
foreach ($config as $attachment) {
|
||||||
|
$attachments .= $attachment['item_id'] . ':' . $attachment['count'] . ';';
|
||||||
|
}
|
||||||
|
return $attachments;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getAccessToken($gameid)
|
||||||
|
{
|
||||||
|
$r = $this->getRedis($gameid);
|
||||||
|
$access_token = $r->get('kf_token:' . $gameid . ':');
|
||||||
|
if (!empty($access_token)) {
|
||||||
|
return $access_token;
|
||||||
|
}
|
||||||
|
$config_name = "../config/game$gameid/weixin/config.php";
|
||||||
|
require $config_name;
|
||||||
|
echo('zzz4');
|
||||||
|
$response = '';
|
||||||
|
if (!phpcommon\HttpClient::get('https://api.weixin.qq.com/cgi-bin/token',
|
||||||
|
array(
|
||||||
|
'grant_type' => 'client_credential',
|
||||||
|
'appid' => WEIXIN_APP_ID,
|
||||||
|
'secret' => WEIXIN_APP_SECRET
|
||||||
|
),
|
||||||
|
$response)) {
|
||||||
|
phpcommon\sendError(ERR_INTERNAL, '系统繁忙');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$respobj = json_decode($response, true);
|
||||||
|
if (isset($respobj['access_token'])) {
|
||||||
|
$r->set('kf_token:' . $gameid . ':', $respobj['access_token']);
|
||||||
|
$r->pexpire('kf_token:' . $gameid . ':', 1000 * ($respobj['expires_in'] - 60 * 1));
|
||||||
|
return $respobj['access_token'];
|
||||||
|
} else {
|
||||||
|
error_log('getAccessToken:' . $response);
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function sendOrderMsg($accountid, $data)
|
||||||
|
{
|
||||||
|
error_log($accountid);
|
||||||
|
try {
|
||||||
|
$gameid = phpcommon\extractGameId($accountid);
|
||||||
|
$access_token = $this->getAccessToken($gameid);
|
||||||
|
error_log($access_token);
|
||||||
|
$url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" . urlencode($access_token);
|
||||||
|
|
||||||
|
$response = '';
|
||||||
|
error_log('kefu_openid');
|
||||||
|
echo(json_encode($data));
|
||||||
|
error_log(json_encode($data, JSON_UNESCAPED_UNICODE));
|
||||||
|
if (!phpcommon\HttpClient::post($url,
|
||||||
|
json_encode($data, JSON_UNESCAPED_UNICODE),
|
||||||
|
$response)
|
||||||
|
) {
|
||||||
|
phpcommon\sendError(ERR_RETRY, '系统繁忙');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$ret_info = json_decode($response, true);
|
||||||
|
error_log(json_encode($response));
|
||||||
|
echo(json_encode($response));
|
||||||
|
if (isset($ret_info['errcode']) && ($ret_info['errcode'] == 40001 || $ret_info['errcode'] == 40003 || $ret_info['errcode'] == 41001)) {
|
||||||
|
if ($ret_info['errcode'] == 40003) {
|
||||||
|
//无效的openid,(更换appid appkey导致之前的openid失效)
|
||||||
|
//从db里删除这种过期的openid
|
||||||
|
$this->delOvertimeOpenid($accountid);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
error_log('重新获取access_token');
|
||||||
|
$r = $this->getRedis($gameid);
|
||||||
|
$r->del('kf_token:' . $gameid . ':');
|
||||||
|
$access_token = $this->getAccessToken($gameid);
|
||||||
|
$url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" . urlencode($access_token);
|
||||||
|
|
||||||
|
$response = '';
|
||||||
|
error_log(json_encode($data, JSON_UNESCAPED_UNICODE));
|
||||||
|
if (!phpcommon\HttpClient::post($url,
|
||||||
|
json_encode($data, JSON_UNESCAPED_UNICODE),
|
||||||
|
$response)
|
||||||
|
) {
|
||||||
|
phpcommon\sendError(ERR_RETRY, '系统繁忙');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
error_log('retry:' . $response);
|
||||||
|
$ret_info = json_decode($response, true);
|
||||||
|
}
|
||||||
|
return !empty($ret_info) && $ret_info['errcode'] == 0;
|
||||||
|
} catch (Exception $e) {
|
||||||
|
error_log($e->getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function sendOneDBInfo($conn)
|
||||||
|
{
|
||||||
|
$last_idx = 0;
|
||||||
|
$template_id = '';
|
||||||
|
$data = array();
|
||||||
|
$date = phpcommon\timestamp_to_datetime(time());
|
||||||
|
//通知签到
|
||||||
|
if (floor((time() - phpcommon\getdayseconds(time())) / 3600) == 8) {
|
||||||
|
while (true) {
|
||||||
|
$rows = $conn->execQuery('SELECT idx, accountid, openid, signtime ' .
|
||||||
|
' FROM subscribe WHERE signorder=1 AND idx > :last_idx LIMIT 0, 1000;',
|
||||||
|
array(
|
||||||
|
':last_idx' => $last_idx,
|
||||||
|
));
|
||||||
|
if (!$rows || count($rows) <= 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
foreach ($rows as $row) {
|
||||||
|
if ($row['idx'] > $last_idx) {
|
||||||
|
$last_idx = $row['idx'];
|
||||||
|
}
|
||||||
|
if (floor((time() - phpcommon\getdayseconds($row['signtime'])) / 3600) != 32) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$data = array(
|
||||||
|
'thing5' => array(
|
||||||
|
'value' => '连续签到,有机会获得永久时装'
|
||||||
|
),
|
||||||
|
'date4' => array(
|
||||||
|
'value' => $date
|
||||||
|
),
|
||||||
|
);
|
||||||
|
$template_id = 'lnZSKqeQPI6riyuH9FinutFBrbe6OE3W-7FjwVgoeo4';
|
||||||
|
$this->sendOrderMsg($row['accountid'],
|
||||||
|
array (
|
||||||
|
"touser" => $row['openid'],
|
||||||
|
"template_id" => $template_id,
|
||||||
|
"data" => $data
|
||||||
|
));
|
||||||
|
|
||||||
|
$ret = $conn->execScript('UPDATE subscribe SET ' .
|
||||||
|
' signorder=:signorder ' .
|
||||||
|
' WHERE accountid=:accountid; ',
|
||||||
|
array(
|
||||||
|
':accountid' => $row['accountid'],
|
||||||
|
':signorder' => 0
|
||||||
|
));
|
||||||
|
if (!$ret) {
|
||||||
|
die();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//通知宝箱
|
||||||
|
} else if (floor((time() - phpcommon\getdayseconds(time())) / 3600) == 14) {
|
||||||
|
while (true) {
|
||||||
|
$rows = $conn->execQuery('SELECT idx, accountid, openid, boxtime ' .
|
||||||
|
' FROM subscribe WHERE boxorder=1 AND idx > :last_idx LIMIT 0, 1000;',
|
||||||
|
array(
|
||||||
|
':last_idx' => $last_idx,
|
||||||
|
));
|
||||||
|
if (!$rows || count($rows) <= 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
foreach ($rows as $row) {
|
||||||
|
if ($row['idx'] > $last_idx) {
|
||||||
|
$last_idx = $row['idx'];
|
||||||
|
}
|
||||||
|
if (floor((time() - phpcommon\getdayseconds($row['boxtime'])) / 3600) != 38) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$data = array(
|
||||||
|
'thing1' => array(
|
||||||
|
'value' => '免费宝箱'
|
||||||
|
),
|
||||||
|
'thing4' => array(
|
||||||
|
'value' => '有机会获得钻石和限时时装'
|
||||||
|
),
|
||||||
|
'date2' => array(
|
||||||
|
'value' => $date
|
||||||
|
),
|
||||||
|
);
|
||||||
|
$template_id = 'di_iqZLOeUzpwIblhvn_HDygoVH34Fs9MwD-asOX6J8';
|
||||||
|
$this->sendOrderMsg($row['accountid'],
|
||||||
|
array (
|
||||||
|
"touser" => $row['openid'],
|
||||||
|
"template_id" => $template_id,
|
||||||
|
"data" => $data
|
||||||
|
));
|
||||||
|
|
||||||
|
$ret = $conn->execScript('UPDATE subscribe SET ' .
|
||||||
|
' boxorder=:boxorder ' .
|
||||||
|
' WHERE accountid=:accountid; ',
|
||||||
|
array(
|
||||||
|
':accountid' => $row['accountid'],
|
||||||
|
':boxorder' => 0
|
||||||
|
));
|
||||||
|
if (!$ret) {
|
||||||
|
die();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//通知钻石
|
||||||
|
} else if (floor((time() - phpcommon\getdayseconds(time())) / 3600) == 12
|
||||||
|
|| floor((time() - phpcommon\getdayseconds(time())) / 3600) == 9
|
||||||
|
|| floor((time() - phpcommon\getdayseconds(time())) / 3600) == 18) {
|
||||||
|
while (true) {
|
||||||
|
$rows = $conn->execQuery('SELECT idx, accountid, openid, diatime ' .
|
||||||
|
' FROM subscribe WHERE diaorder=1 AND idx > :last_idx LIMIT 0, 1000;',
|
||||||
|
array(
|
||||||
|
':last_idx' => $last_idx,
|
||||||
|
));
|
||||||
|
if (!$rows || count($rows) <= 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
foreach ($rows as $row) {
|
||||||
|
if ($row['idx'] > $last_idx) {
|
||||||
|
$last_idx = $row['idx'];
|
||||||
|
}
|
||||||
|
if (floor((time() - phpcommon\getdayseconds($row['diatime'])) / 3600) != 33
|
||||||
|
&& floor((time() - phpcommon\getdayseconds($row['diatime'])) / 3600) != 12
|
||||||
|
&& floor((time() - phpcommon\getdayseconds($row['diatime'])) / 3600) != 18) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$data = array(
|
||||||
|
'thing1' => array(
|
||||||
|
'value' => '幸运礼包'
|
||||||
|
),
|
||||||
|
'thing4' => array(
|
||||||
|
'value' => '领取物资,有几率开出锦鲤套装'
|
||||||
|
),
|
||||||
|
'date2' => array(
|
||||||
|
'value' => $date
|
||||||
|
),
|
||||||
|
);
|
||||||
|
$template_id = 'di_iqZLOeUzpwIblhvn_HMaFbcOcO_VvgPIFz-NhA9c';
|
||||||
|
$this->sendOrderMsg($row['accountid'],
|
||||||
|
array (
|
||||||
|
"touser" => $row['openid'],
|
||||||
|
"template_id" => $template_id,
|
||||||
|
"data" => $data
|
||||||
|
));
|
||||||
|
|
||||||
|
$ret = $conn->execScript('UPDATE subscribe SET ' .
|
||||||
|
' diaorder=:diaorder ' .
|
||||||
|
' WHERE accountid=:accountid; ',
|
||||||
|
array(
|
||||||
|
':accountid' => $row['accountid'],
|
||||||
|
':diaorder' => 0
|
||||||
|
));
|
||||||
|
if (!$ret) {
|
||||||
|
die();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//通知赛季
|
||||||
|
|
||||||
|
} else if (floor((time() - phpcommon\getdayseconds(phpcommon\getThisMonthFirstDaySeconds(time()) + 5 * 3600 * 24)) / 3600) == 17) {
|
||||||
|
$start = phpcommon\timestamp_to_date(phpcommon\getThisMonthFirstDaySeconds(time()) + 6 * 3600 * 24);
|
||||||
|
$end = phpcommon\timestamp_to_date(phpcommon\getNextMonthFirstDaySeconds(time()) + 5 * 3600 * 24);
|
||||||
|
while (true) {
|
||||||
|
$rows = $conn->execQuery('SELECT idx, accountid, openid, seatime ' .
|
||||||
|
' FROM subscribe WHERE seaorder=1 AND idx > :last_idx LIMIT 0, 1000;',
|
||||||
|
array(
|
||||||
|
':last_idx' => $last_idx,
|
||||||
|
));
|
||||||
|
if (!$rows || count($rows) <= 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
foreach ($rows as $row) {
|
||||||
|
if ($row['idx'] > $last_idx) {
|
||||||
|
$last_idx = $row['idx'];
|
||||||
|
}
|
||||||
|
$data = array(
|
||||||
|
'thing1' => array(
|
||||||
|
'value' => '新赛季即将开启'
|
||||||
|
),
|
||||||
|
'thing12' => array(
|
||||||
|
'value' => '新赛季新奖励, 更多惊喜等着您!'
|
||||||
|
),
|
||||||
|
'date6' => array(
|
||||||
|
'value' => $start
|
||||||
|
),
|
||||||
|
'date7' => array(
|
||||||
|
'value' => $end
|
||||||
|
),
|
||||||
|
);
|
||||||
|
$template_id = 'VEZDV0GJxAtouMq2imy3Ykqof3x1dd-hR59dO7osEUU';
|
||||||
|
$this->sendOrderMsg($row['accountid'],
|
||||||
|
array (
|
||||||
|
"touser" => $row['openid'],
|
||||||
|
"template_id" => $template_id,
|
||||||
|
"data" => $data
|
||||||
|
));
|
||||||
|
|
||||||
|
$ret = $conn->execScript('UPDATE subscribe SET ' .
|
||||||
|
' diaorder=:diaorder ' .
|
||||||
|
' WHERE accountid=:accountid; ',
|
||||||
|
array(
|
||||||
|
':accountid' => $row['accountid'],
|
||||||
|
':diaorder' => 0
|
||||||
|
));
|
||||||
|
if (!$ret) {
|
||||||
|
die();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function notifyAllUser()
|
||||||
|
{
|
||||||
|
error_log('notifyAllUser');
|
||||||
|
set_time_limit(1800);
|
||||||
|
$media_conf = array();
|
||||||
|
$dbconfs = require('../config/kefu.mysql.cluster.php');
|
||||||
|
foreach($dbconfs as $dbconf) {
|
||||||
|
$conn = new phpcommon\Mysql(array(
|
||||||
|
'host' => $dbconf['host'],
|
||||||
|
'port' => $dbconf['port'],
|
||||||
|
'user' => $dbconf['user'],
|
||||||
|
'passwd' => $dbconf['passwd'],
|
||||||
|
'dbname' => 'kefudb' . $dbconf['instance_id']
|
||||||
|
));
|
||||||
|
$this->sendOneDBInfo($conn);
|
||||||
|
}
|
||||||
|
echo json_encode(array(
|
||||||
|
'errcode' => 0,
|
||||||
|
'errmsg' => '',
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function sendOrder()
|
||||||
|
{
|
||||||
|
$account_id = $_REQUEST['account_id'];
|
||||||
|
$accept = $_REQUEST['accept'];
|
||||||
|
$type = $_REQUEST['type'];
|
||||||
|
$conn = $this->getMysql($account_id);
|
||||||
|
if (!$conn) {
|
||||||
|
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$row = $conn->execQueryOne('SELECT * ' .
|
||||||
|
' FROM subscribe WHERE accountid=:accountid;',
|
||||||
|
array(
|
||||||
|
':accountid' => $account_id,
|
||||||
|
));
|
||||||
|
if (!$row) {
|
||||||
|
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
$signorder = $row['signorder'];
|
||||||
|
$boxorder = $row['boxorder'];
|
||||||
|
$diaorder = $row['diaorder'];
|
||||||
|
$seaorder = $row['seaorder'];
|
||||||
|
$signtime = $row['signtime'];
|
||||||
|
$boxtime = $row['boxtime'];
|
||||||
|
$diatime = $row['diatime'];
|
||||||
|
$seatime = $row['seatime'];
|
||||||
|
if ($type == 1) {
|
||||||
|
$signorder = $accept;
|
||||||
|
$signtime = time();
|
||||||
|
} else if ($type == 2){
|
||||||
|
$boxorder = $accept;
|
||||||
|
$boxtime = time();
|
||||||
|
} else if ($type == 3){
|
||||||
|
$diaorder = $accept;
|
||||||
|
$diatime = time();
|
||||||
|
} else if ($type == 4){
|
||||||
|
$seaorder = $accept;
|
||||||
|
$seatime = time();
|
||||||
|
}
|
||||||
|
$ret = $conn->execScript('UPDATE subscribe SET signtime=:signtime, boxtime=:boxtime, diatime=:diatime, seatime=:seatime, signorder=:signorder, boxorder=:boxorder, diaorder=:diaorder, seaorder=:seaorder ' .
|
||||||
|
' WHERE accountid=:accountid; ',
|
||||||
|
array(
|
||||||
|
':accountid' => $account_id,
|
||||||
|
':signtime' => $signtime,
|
||||||
|
':boxtime' => $boxtime,
|
||||||
|
':diatime' => $diatime,
|
||||||
|
':seatime' => $seatime,
|
||||||
|
':signorder' => $signorder,
|
||||||
|
':boxorder' => $boxorder,
|
||||||
|
':diaorder' => $diaorder,
|
||||||
|
':seaorder' => $seaorder,
|
||||||
|
));
|
||||||
|
if (!$ret) {
|
||||||
|
die();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo json_encode(array(
|
||||||
|
'errcode' => 0,
|
||||||
|
'errmsg' => '',
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getOrderInfo()
|
||||||
|
{
|
||||||
|
$account_id = $_REQUEST['account_id'];
|
||||||
|
$conn = $this->getMysql($account_id);
|
||||||
|
if (!$conn) {
|
||||||
|
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$row = $conn->execQueryOne('SELECT * FROM subscribe WHERE accountid=:accountid;',
|
||||||
|
array(
|
||||||
|
':accountid' => $account_id,
|
||||||
|
));
|
||||||
|
if (!$row) {
|
||||||
|
$ret = $conn->execScript('INSERT INTO subscribe(accountid, channel, gameid, openid, signorder, boxorder, diaorder, seaorder, signtime, boxtime, diatime, seatime) ' .
|
||||||
|
' VALUES(:accountid, :channel, :gameid, :openid, 0, 0, 0, 0, 0, 0, 0, 0) ' .
|
||||||
|
' ON DUPLICATE KEY UPDATE accountid=:accountid, channel=:channel, gameid=:gameid, openid=:openid, signorder=0, boxorder=0, diaorder=0, seaorder=0, signtime=0, boxtime=0, diatime=0, seatime=0;',
|
||||||
|
array(
|
||||||
|
':accountid' => $account_id,
|
||||||
|
':channel' => phpcommon\extractChannel($account_id),
|
||||||
|
':gameid' => phpcommon\extractGameId($account_id),
|
||||||
|
':openid' => phpcommon\extractOpenId($account_id),
|
||||||
|
));
|
||||||
|
if (!$ret) {
|
||||||
|
die();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
echo json_encode(array(
|
||||||
|
'errcode' => 0,
|
||||||
|
'errmsg' => '',
|
||||||
|
'signorder' => 0,
|
||||||
|
'boxorder' => 0,
|
||||||
|
'diaorder' => 0,
|
||||||
|
'seaorder' => 0,
|
||||||
|
));
|
||||||
|
} else {
|
||||||
|
echo json_encode(array(
|
||||||
|
'errcode' => 0,
|
||||||
|
'errmsg' => '',
|
||||||
|
'signorder' => $row['signorder'],
|
||||||
|
'boxorder' => $row['boxorder'],
|
||||||
|
'diaorder' => $row['diaorder'],
|
||||||
|
'seaorder' => $row['seaorder'],
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user