Ejemplo n.º 1
0
 function actionSendMsgToAwardUsers()
 {
     $uid_secs = self::getParam('uid_secs');
     $content = self::getParam('content');
     $desc = self::getParam('desc');
     $items = self::getParam('items');
     $task_num = self::getParam('num');
     error_log("====接受到奖励信息==" . json_encode($uid_secs));
     if (!$uid_secs) {
         return;
     }
     foreach ((array) $items as $value) {
         $tag = $value['tag'];
         $num = intval($value['num']);
         if ($tag == 'gem' && $num > 100000) {
             echo "error, 元宝不能大于100000";
             exit;
         }
     }
     $key = uniqid();
     $msg = array('key' => $key, 'time' => app()->now, 'content' => $content, 'type' => 'system');
     //福利号总服务器地址
     $all_config = (include_once ROOT . "/admin/view/public_const_config.php");
     //设置作废福利号接口
     $server_url = $all_config['server_api_url'] . "?action=setRepeal&mod=admin";
     $DEBUG = true;
     foreach ((array) $uid_secs as $uid => $sec) {
         //if( $uid != 3879133 )continue;//temp
         //error_log("send[$uid][$sec]");
         //check 是否合服 改变UID
         $sec_config = getApp()->getSectionConfig($sec);
         if (isset($sec_config['merge'])) {
             $uid = "{$sec}_{$uid}";
             $sec = $sec_config['merge'];
         }
         if ($DEBUG) {
             error_log("开始发送元宝:{$uid}--{$sec}");
         }
         $player = new model_Player($uid, $sec);
         $player->getFields(array('level', 'test_status', 'login_t', 'gem'));
         $level = $player->numberGet("base", "level");
         $gem = $player->objectGet("base", "gem");
         $login = $player->objectGet("base", "login_t");
         //只执行一次  执行一次没有句号的描述 就可以将大于20w的置为20w
         $bool = $content == "鉴于掌门对武林做出了卓越贡献,特此奖励掌门一些物件,方便行走江湖,还望掌门笑纳" ? true : false;
         if ($bool && $gem > 200000) {
             //当前元宝大于20w 且 不是单次发送 将该玩家元宝置为20w 不给发此次元宝
             error_log("change_gem:uid:{$uid},{$sec},gem:{$gem}");
             $player->numberPut('base', 'gem', 200000);
             $player->commit();
             if ($DEBUG) {
                 error_log("error.20w");
             }
             continue;
         }
         if ($task_num != 1 && $gem > 50000) {
             //现有元宝数量大于N不给发 且 不是单次发送
             if ($DEBUG) {
                 error_log("{$gem}元宝大于5w,{$task_num}");
             }
             continue;
         }
         if ($_SERVER['REQUEST_TIME'] - $login > 10 * 86400) {
             //10天没登陆 设置为作废福利号
             model_Util::send_post($server_url, array('uid' => $uid, 'sec' => $sec));
             if ($DEBUG) {
                 error_log("大于10天没登录");
             }
             continue;
         }
         foreach ($items as $key => $value) {
             $tag = $value['tag'];
             $num = intval($value['num']);
             if ($tag == 'qiyu_zhidian') {
                 $zhidian_lvl = max(1, $level * 3 - 34);
                 for ($i = 0; $i < $num; $i++) {
                     $items[] = array('tag' => 'qiyu_zhidian', 'level' => $zhidian_lvl, 'num' => 1);
                 }
                 unset($items[$key]);
             }
         }
         if ($DEBUG) {
             error_log("====={$value['tag']}={$value['num']}");
         }
         if ($value['tag'] == 'gem') {
             if ($DEBUG) {
                 error_log("enter");
             }
             $player->checkVipUpgradeAward($value['num']);
             $player->commit();
         }
         if (is_array($items) && count($items) > 0) {
             $msg['status'] = 'award';
             #$msg['content'].="\n$desc";
             $cdkey = model_Cdkey::gen($items, $desc, 1, 'def');
             $msg['cdkey'] = $cdkey;
         }
         $r = model_Chat::sendMsg($msg, $uid, 'origin', $sec);
     }
 }
Ejemplo n.º 2
0
 public function actionBuchangGem()
 {
     glog::info(json_encode($_REQUEST), 'addgem');
     glog::info(json_encode($_SERVER), 'addgem');
     $hour = date("H");
     if ($hour < 10 || $hour > 21) {
         // 10:00 ~ 21:59 才能使用这个接口,防止阿里云的云盾自动发起回调...
         // 有没有更好的处理方法...
         return $this->response(array('s' => 'ERROR', 'msg' => '操作时间不合法'));
     }
     $keys = array('section_id', 'product_id', 'platform', 'operator', 'optime');
     $params = array();
     foreach ($keys as $key) {
         ${$key} = trim(self::getParam($key));
         if (empty(${$key})) {
             $msg = "need param [{$key}]";
             glog::info($msg, 'addgem');
             return $this->response(array('s' => 'ERROR', 'msg' => $msg));
         }
         $params[$key] = ${$key};
     }
     $now = time();
     if ($now - $params['optime'] > 60 || $params['optime'] - $now > 60) {
         return $this->response(array('s' => 'ERROR', 'msg' => '操作已过期'));
     }
     $pid = self::getParam('pid');
     if ($pid) {
         $um = model_LoginUser::searchUniq('pid', $pid);
         if (!$um) {
             return $this->response(array('ErrorCode' => 0, 'ErrorDesc' => "用户[{$pid}]不存在"));
         }
         $uid = $um->id();
     } else {
         $uid = self::getParam('uid');
     }
     if (empty($uid)) {
         return $this->response(array('s' => 'ERROR', 'msg' => "需要UID参数"));
     }
     if ($params['platform'] != P_PLATFORM) {
         return $this->response(array('s' => StatusCode::error, 'msg' => "平台信息不匹配"));
     }
     if ($product_id == 'custom') {
         if (!in_array(P_PLATFORM, array('qqandroid', 'kunlun'))) {
             return $this->response(array('s' => StatusCode::error, 'msg' => P_PLATFORM . "平台不支持自定义额度支付"));
         }
         $params['cash'] = trim(self::getParam('cash'));
         if (!is_numeric($params['cash']) || $params['cash'] <= 0) {
             return $this->response(array('s' => StatusCode::error, 'msg' => "自定义额度{$params['cash']}不合法"));
         }
     } else {
         $payment_config = getApp()->getPaymentConifg();
         if (!isset($payment_config[$product_id])) {
             $msg = "product_id[{$product_id}] not exists";
             glog::info($msg, 'addgem');
             return $this->response(array('s' => 'ERROR', 'msg' => $msg));
         }
     }
     // 验证参数
     if (0 && !isset($_REQUEST['__no_sig__']) && !$this->verify_signature($params, 'qxs%Mt6v@nVdUb9d')) {
         return $this->response(array('s' => 'ERROR', 'msg' => "signature verification failed"));
     }
     PL_Session::$usecookie = false;
     $_REQUEST['cid'] = PL_Session::gencid($uid, $section_id);
     $player = getApp()->getPlayer();
     $mon = getApp()->getPaymentMongoConnection();
     $mongoid = new MongoID();
     $transaction_id = $mongoid->{'$id'};
     // 生成新的订单信息
     $payment_info = $player->createPaymentInfo($product_id);
     if ($product_id == 'custom') {
         $payment_info['cash'] = $params['cash'];
         if (P_PLATFORM == 'kunlun') {
             $payment_info['sumGem'] = $payment_info['cash'] * 15;
         }
     }
     $payment_info['transaction_id'] = $transaction_id;
     $payment_info['create_t'] = getApp()->now;
     $payment_info['source'] = 'buchang';
     $payment_info['msg'] = $params['operator'] . "给玩家补偿未到账的支付,";
     $old_vip = $payment_info['_vip'];
     $old_gem = $payment_info['ogem'];
     // 订单上次处理异常 或者 新的订单
     $ret = $player->process_payment($payment_info);
     if ($ret['s'] == StatusCode::ok) {
         $msg = "transaction [{$transaction_id}] processed";
         glog::info($msg, 'addgem');
         if (1) {
             $gem_add_and_reward = $ret['info']['gem_add_and_reward'];
             // 补发传书
             $msg = array('type' => 'system', 'key' => uniqid(), 'time' => getApp()->now, 'content' => "您未到账的{$gem_add_and_reward}元宝已经补发到账,祝您游戏愉快~");
             model_Chat::sendMsg($msg, $uid, 'origin', $section_id);
         } else {
             $gem_add_and_reward = $ret['info']['gem_add_and_reward'];
             $reward_gem = ceil($gem_add_and_reward * 0.1);
             // 补发传书
             $msg = array('type' => 'system', 'key' => uniqid(), 'time' => getApp()->now, 'content' => "您未到账的{$gem_add_and_reward}元宝已经补发到账,现在额外补偿您{$reward_gem}元宝,祝您游戏愉快~");
             $awards = array(array('tag' => 'gem', 'num' => $reward_gem));
             $msg['status'] = 'award';
             $cdkey = model_Cdkey::gen($awards, "{$reward_gem}元宝");
             $msg['cdkey'] = $cdkey;
             model_Chat::sendMsg($msg, $uid, 'origin', $section_id);
         }
         // 发邮件
         $login_model = new model_LoginUser($uid);
         $login_model->get(array('pid' => 1, 'email' => 1));
         $pid = $login_model['pid'];
         $email = $login_model['email'];
         $login_model->opOne('buchange_gem_t', getApp()->now);
         $login_model->save();
         $new_gem = $player->numberGet('base', 'gem');
         $new_vip = $player->numberGet('vip', 'lvl');
         $platform = P_PLATFORM;
         $name = $player->stringGet('base', 'name');
         $cash = $payment_config[$product_id]['cash'];
         $operator = $params['operator'];
         $subject = "[{$operator}]BuChangChongZhi[{$platform}][{$section_id}][{$uid}][{$cash} yuan]";
         $time = date("Y-m-d H:i:s");
         $content = "操作时间: {$time} \n";
         $content .= "操作人:{$operator}\n平台: {$platform}\nPID:{$pid}\nemail:{$email}\nUID:{$uid}\n分区:{$section_id}\n门派名:{$name}\n";
         $content .= "充值前:\nvip:{$old_vip}\ngem:{$old_gem}\n";
         $content .= "充值后:\nvip:{$new_vip}\ngem:{$new_gem}\n";
         model_Util::sendemail('*****@*****.**', $subject, $content);
         return $this->response(array('s' => 'OK', 'msg' => $msg, 'ret' => $ret));
     } else {
         $msg = "transaction[{$transaction_id}] failed," . $ret['msg'];
         glog::info($msg, 'addgem');
         return $this->response(array('s' => 'ERROR', 'msg' => $msg, 'ret' => $ret));
     }
 }
Ejemplo n.º 3
0
 /**
  * @author 符璨
  * @desc
  *      从cdkey_task取出待处理的cdkey任务进行处理 
  *      批量生成cdkey
  */
 public static function action_gen_cdkey()
 {
     $redis = DbConfig::getRedis('realtime_stat');
     $process_id = getmypid();
     //从cdkey中取出一条状态为0(未处理cdkey生成记录),并更新为1(正在处理)
     $mc = new PL_Db_Mongo(DbConfig::getMongodb('userlogin'));
     $mc->switchColl('cdkey_task');
     $cdkey_task = $mc->findOne(array('status' => 0));
     //没有待处理的任务
     if ($cdkey_task == NULL) {
         return;
     }
     glog::info("[{$process_id}] gen cdkey worker started", 'cdkey');
     $task_id = $cdkey_task['_id'];
     $mc->update(array('_id' => $task_id), array('$set' => array('status' => 1)));
     $pa = $cdkey_task;
     unset($pa['status']);
     $num = $pa['num'];
     $task_id = $cdkey_task['_id'];
     //根据cdkey_task的内容生成cdkey
     $mc->switchColl('cdkey');
     while ($num--) {
         $pa['_id'] = model_Cdkey::genCdkey(13);
         $pa['task_id'] = $task_id->__toString();
         //try以防有重复的cdkey
         try {
             $cdkey = $mc->insert($pa);
             //redis中统计当前已生成的cdkey数目
             $redis->hIncrBy('cdkey_task', $task_id, 1);
             $redis->lpush("cdkey_{$task_id}", $pa['_id']);
         } catch (Exception $ex) {
             $exception_cnt--;
             $num++;
             glog::info("[{$process_id}] gen cdkey worker:Duplicated _id {$pa['_id']}", 'cdkey');
             if (!$exception_cnt) {
                 break;
             }
             continue;
         }
         $exception_cnt = 10;
     }
     $mc->switchColl('cdkey_task');
     $mc->update(array('_id' => $task_id), array('$set' => array('status' => 2)));
     $redis->hDel('cdkey_task', $task_id);
     glog::info("[{$process_id}] gen cdkey worker completed", 'cdkey');
 }