From a6e9ff11f3b472dd06d2ad143582950b1f38787b Mon Sep 17 00:00:00 2001 From: hujiabin <519660157@qq.com> Date: Mon, 19 Jun 2023 17:17:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E8=A1=8C=E8=AF=81=E5=8F=8A=E7=AD=89?= =?UTF-8?q?=E7=BA=A7=E8=B4=AD=E4=B9=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/BattlePass.py | 33 ++ sql/gamedb.sql | 2 +- sql/gamedb2006_migrate_230619_01.sql | 2 +- webapp/bootstrap/constant.php | 3 + .../controller/CallbackController.class.php | 462 +----------------- webapp/controller/PassController.class.php | 62 +++ webapp/models/BcOrder.php | 36 ++ webapp/services/BlockChainService.php | 10 + .../services/callback/BuyLevelCbService.php | 10 - webapp/services/callback/BuyPassCbService.php | 118 +++++ .../services/callback/gameItemMallBuyOk.php | 55 ++- 11 files changed, 322 insertions(+), 471 deletions(-) create mode 100644 webapp/models/BcOrder.php delete mode 100644 webapp/services/callback/BuyLevelCbService.php create mode 100644 webapp/services/callback/BuyPassCbService.php diff --git a/doc/BattlePass.py b/doc/BattlePass.py index d9521c24..be786ad2 100644 --- a/doc/BattlePass.py +++ b/doc/BattlePass.py @@ -18,6 +18,10 @@ class Pass(object): _common.RspHead(), ['!time_info', [TimeInfo()], '赛季时间'], ['!reward_info', [Reward()], '任务列表'], + ['pass_buy_state', 0, '通行证购买状态 1:购买中'], + ['pass_price', 0, '通行证价格'], + ['lv_buy_state', 0, '通行证经验购买状态 1:购买中'], + ['lv_price', 0, '通行证经验价格(exp/price)'], ] },{ 'name': 'commit', @@ -47,6 +51,35 @@ class Pass(object): ['award', _common.Award(), '奖励信息'], ['property_chg', _common.PropertyChg(), '属性变更'], ] + },{ + 'name': 'buyPlatinumPass', + 'desc': '购买通行证', + 'group': 'Pass', + 'url': 'webapp/index.php?c=Pass&a=buyPlatinumPass', + 'params': [ + _common.ReqHead(), + ['price', 0, '价格'], + ], + 'response': [ + _common.RspHead(), + ['trans_id', 0, '订单号'], + ['params', 0, 'params'], + ] + },{ + 'name': 'buyLevel', + 'desc': '购买通行证经验', + 'group': 'Pass', + 'url': 'webapp/index.php?c=Pass&a=buyLevel', + 'params': [ + _common.ReqHead(), + ['level', 0, '等级'], + ['price', 0, '价格'], + ], + 'response': [ + _common.RspHead(), + ['trans_id', 0, '订单号'], + ['params', 0, 'params'], + ] }, ] diff --git a/sql/gamedb.sql b/sql/gamedb.sql index 0a5d9c0c..3395e1fd 100644 --- a/sql/gamedb.sql +++ b/sql/gamedb.sql @@ -1187,7 +1187,7 @@ DROP TABLE IF EXISTS `t_bc_order`; CREATE TABLE `t_bc_order` ( `idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id', `order_id` varchar(255) COMMENT '订单号', - `order_type` int(11) NOT NULL COMMENT '0: 小胡 ', + `order_type` int(11) NOT NULL COMMENT '0:默认', `account_id` varchar(60) NOT NULL COMMENT '账户id 只用做事后分析用', `address` varchar(60) COMMENT 'address', `status` int(11) NOT NULL DEFAULT '0' COMMENT '0: 支付中 1: 已发货', diff --git a/sql/gamedb2006_migrate_230619_01.sql b/sql/gamedb2006_migrate_230619_01.sql index 0cf6338d..def1fc23 100644 --- a/sql/gamedb2006_migrate_230619_01.sql +++ b/sql/gamedb2006_migrate_230619_01.sql @@ -5,7 +5,7 @@ alter table t_transaction add column `item_num` bigint NOT NULL DEFAULT '0' COMM CREATE TABLE `t_bc_order` ( `idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id', `order_id` varchar(255) COMMENT '订单号', - `order_type` int(11) NOT NULL COMMENT '0: 小胡 ', + `order_type` int(11) NOT NULL COMMENT '0:默认 ', `account_id` varchar(60) NOT NULL COMMENT '账户id 只用做事后分析用', `address` varchar(60) COMMENT 'address', `status` int(11) NOT NULL DEFAULT '0' COMMENT '0: 支付中 1: 已发货', diff --git a/webapp/bootstrap/constant.php b/webapp/bootstrap/constant.php index a45e2b28..e38173bc 100644 --- a/webapp/bootstrap/constant.php +++ b/webapp/bootstrap/constant.php @@ -11,6 +11,7 @@ define('V_ITEM_EXP', 10003); //经验 define('V_ITEM_ACTIVE', 10004); //活跃度 define('V_ITEM_BCEG', 10010); //BCEG define('V_ITEM_STAR', 10011); //星星 +define('V_ITEM_PASS', 10012); //通行证 define('V_ITEM_REVIVE_COIN', 140001); //复活币 define('V_ITEM_HERO_META', 100005); //英雄升级材料 define('V_ITEM_GUN_META', 100006); //枪械升级材料 @@ -48,6 +49,8 @@ define('TN_DAILY_PVE_GET_GUN_FRAGMENT_NUM', 9013); define('TN_DAILY_COMPLETE_TASK_NUM', 9014); define('TN_DAILY_USED_GOLD_NUM', 9015); define('TN_DAILY_GET_STAR_NUM', 9016); +define('TN_DAILY_BUY_PASS_STATE', 9017); +define('TN_DAILY_BUY_LEVEL_STATE', 9018); define('TN_WEEKLY_BEGIN', 10001); define('TN_WEEKLY_ACTIVE', 10002); diff --git a/webapp/controller/CallbackController.class.php b/webapp/controller/CallbackController.class.php index 25cbfcc0..3b509cc9 100644 --- a/webapp/controller/CallbackController.class.php +++ b/webapp/controller/CallbackController.class.php @@ -1,458 +1,26 @@ 'gameItemMallBuyOk', + ); + + public function dispatch() { - return isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443 && SERVER_ENV == _TEST; + $action = getReqVal('action', ''); + if (key_exists($action, $this->handlers)) { + $this->internalDispatch($this->handlers[$action]); + } else { + $this->_rspErr(500, 'not found'); + } } - public function transfer() + private function internalDispatch($className) { - $dir = getReqVal('dir', ''); - $account = strtolower(getReqVal('account', '')); - $txHash = getReqVal('txhash', ''); - $type = getReqVal('type', ''); - $value = getReqVal('value', '0'); - - $gameId = 2006; - $channel = BC_CHANNEL; - $accountId = phpcommon\createAccountId($channel, $gameId, $account); - - $conn = myself()->_getMysql($accountId); - if (UserWalletRecord::find($conn, $txHash)) { - myself()->_rspOk(); - return; - } - UserWalletRecord::add($conn, $txHash, $dir, $account, $type, $value); - - if (!in_array($dir, array(0, 1))){ - myself()->_rspErr(1, ''); - return; - } - - if (!in_array($type, array(1, 2))){ - myself()->_rspErr(2, ''); - return; - } - if (strlen($value) <= 18){ - myself()->_rspErr(4, ''); - return; - } - $value = substr($value, 0, -18); - if ($value < 0 || empty($value)) { - myself()->_rspErr(3, ''); - return; - } - - $gold = 0; - $diamond = 0; - if ($type == 1) { - $gold = $value; - } else { - $diamond = $value; - } - if ($dir == 1) { - $gold = -$gold; - $diamond = -$diamond; - } - - $userRow = SqlHelper::ormSelect( - $conn, - 't_user', - array( - 'account_id' => $accountId, - )); - if ($userRow) { - SqlHelper::update( - $conn, - 't_user', - array( - 'account_id' => $accountId, - ), - array( - 'gold' => function() use($gold) { - return "CASE WHEN gold + ${gold} < 0 THEN 0 ELSE gold + ${gold} END"; - }, - 'diamond' => function() use($diamond) { - return "CASE WHEN diamond + ${diamond} < 0 THEN 0 ELSE diamond + ${diamond} END"; - }, - )); - } else { - SqlHelper::upsert( - $conn, - 't_user_wallet_offline', - array( - 'account_id' => $accountId, - ), - array( - 'gold' => function() use($gold) { - return "CASE WHEN gold + ${gold} < 0 THEN 0 ELSE gold + ${gold} END"; - }, - 'diamond' => function() use($diamond) { - return "CASE WHEN diamond + ${diamond} < 0 THEN 0 ELSE diamond + ${diamond} END"; - }, - 'modifytime' => myself()->_getNowTime() - ), - array( - 'account_id' => $accountId, - 'gold' => $gold, - 'diamond' => $diamond, - 'createtime' => myself()->_getNowTime(), - 'modifytime' => myself()->_getNowTime() - )); - } - UserWalletRecord::update($conn, - $txHash, - array( - 'state' => 1, - 'modifytime' => myself()->_getNowTime() - )); - - myself()->_rspOk(); - } - - public function heroUpgradeQuality(){ - $transId = getReqVal('trans_id', '0'); - $tokenId1 = getReqVal('token_id1', '0'); - $tokenId2 = getReqVal('token_id2', '0'); - if (!$transId || !$tokenId1){ - myself()->_rspErr(1, 'param error'); - return; - } - $tranDb= Transaction::findEx($transId); - if (!$tranDb){ - myself()->_rspErr(1, 'param error'); - return; - } - if (NftUpEvent::find($transId)){ - myself()->_rspOk(); - return; - } - if (! $tranDb['result']){ - NftUpEvent::add( - array( - 'trans_id' => $transId, - 'token_id' => $tokenId1, - 'value' => 1, - 'createtime' => myself()->_getNowTime(), - 'modifytime' => myself()->_getNowTime(), - ) - ); - $param = array( - 'trans_id'=>$transId, - 'token_id1'=>$tokenId1, - 'token_id2'=>$tokenId2, - 'token_type'=>1, - ); - NftUpReceive::upsert($tranDb['account_id'],$param); - myself()->_rspOk(); - return; - } - $heroDb = SqlHelper::ormSelectOne( - myself()->_getMysql(''), - 't_hero', - array( - 'token_id' => $tokenId1, - ) - ); - if ( !$heroDb ){ - myself()->_rspErr(1, 'token_id param error'); - return; - } - $nextQualityMeta = mt\HeroQuality::getByQuality($heroDb['quality']+1); - if (! $nextQualityMeta){ - myself()->_rspOk(); - return; - } - - $heroLucky = \services\FormulaService::Hero_Advanced_Lucky_Value($heroDb['quality']); - $nextHeroLucky = \services\FormulaService::Hero_Advanced_Lucky_Value($heroDb['quality']+1); - $heroTili = \services\FormulaService::Hero_NFT_Maximum_Physical_Strength($heroDb['quality'],$heroLucky); - $nextHeroTili = \services\FormulaService::Hero_NFT_Maximum_Physical_Strength($heroDb['quality']+1,$nextHeroLucky); - SqlHelper::update - ( myself()->_getMysql(''), - 't_hero', - array( - 'token_id' => $tokenId1, - ), - array( - 'hero_tili' => $heroDb['hero_tili']+($nextHeroTili-$heroTili), - 'skill_points' => $heroDb['skill_points'] + $nextQualityMeta['skill_point'], - 'quality' => $heroDb['quality']+1, - 'advanced_count' => $heroDb['advanced_count'] + 1, -// 'lock_type' => 0, -// 'unlock_time' => 0, - 'labour' => 0, - ) - ); - NftUpEvent::add( - array( - 'trans_id' => $transId, - 'token_id' => $tokenId1, - 'value' => 1, - 'createtime' => myself()->_getNowTime(), - 'modifytime' => myself()->_getNowTime(), - ) - ); - $param = array( - 'trans_id'=>$transId, - 'token_id1'=>$tokenId1, - 'token_id2'=>$tokenId2, - 'token_type'=>1, - ); - NftUpReceive::upsert($tranDb['account_id'],$param); - - if ($heroDb['quality'] + 1 > $this->_getDynDataV($tranDb['account_id'],TN_HERO_MAX_QUALITY, 0)) { - $this->_setDynDataV($tranDb['account_id'],TN_HERO_MAX_QUALITY, 0, $heroDb['quality'] + 1); - } - myself()->_rspOk(); - } - - public function gunUpgradeQuality(){ - $transId = getReqVal('trans_id', '0'); - $tokenId1 = getReqVal('token_id1', '0'); - $tokenId2 = getReqVal('token_id2', '0'); - if (!$transId || !$tokenId1){ - myself()->_rspErr(1, 'param error'); - return; - } - $tranDb= Transaction::findEx($transId); - if (!$tranDb){ - myself()->_rspErr(1, 'param error'); - return; - } - if (NftUpEvent::find($transId)){ - myself()->_rspOk(); - return; - } - if (! $tranDb['result']){ - NftUpEvent::add( - array( - 'trans_id' => $transId, - 'token_id' => $tokenId1, - 'value' => 1, - 'createtime' => myself()->_getNowTime(), - 'modifytime' => myself()->_getNowTime(), - ) - ); - $param = array( - 'trans_id'=>$transId, - 'token_id1'=>$tokenId1, - 'token_id2'=>$tokenId2, - 'token_type'=>2, - ); - NftUpReceive::upsert($tranDb['account_id'],$param); - myself()->_rspOk(); - return; - } - $gunDb =SqlHelper::ormSelectOne( - myself()->_getMysql($tranDb['account_id']), - 't_gun', - array( - 'token_id' => $tokenId1, - ) - ); - if ( !$gunDb ){ - myself()->_rspErr(1, 'token_id param error'); - return; - } - $nextQualityMeta = mt\GunQuality::getByQuality($gunDb['quality']+1); - if (!$nextQualityMeta) { - myself()->_rspOk(); - return; - } - $gunLucky = \services\FormulaService::Weapon_Advanced_Lucky_Value($gunDb['quality']); - $nextGunLucky = \services\FormulaService::Weapon_Advanced_Lucky_Value($gunDb['quality']+1); - $durability = \services\FormulaService::Weapon_NFT_Maximum_Durability($gunDb['quality'],$gunLucky); - $nextDurability = \services\FormulaService::Weapon_NFT_Maximum_Durability($gunDb['quality']+1,$nextGunLucky); - - SqlHelper::update - (myself()->_getMysql($tranDb['account_id']), - 't_gun', - array( - 'token_id' => $tokenId1, - ), - array( - 'durability' => $gunDb['durability']+($nextDurability-$durability), - 'quality' => $gunDb['quality']+1, -// 'lock_type' => 0, -// 'unlock_time' => 0, - 'labour' => 0, - ) - ); - NftUpEvent::add( - array( - 'trans_id' => $transId, - 'token_id' => $tokenId1, - 'value' => 1, - 'createtime' => myself()->_getNowTime(), - 'modifytime' => myself()->_getNowTime(), - ) - ); - $param = array( - 'trans_id'=>$transId, - 'token_id1'=>$tokenId1, - 'token_id2'=>$tokenId2, - 'token_type'=>2, - ); - NftUpReceive::upsert($tranDb['account_id'],$param); - if ($gunDb['quality'] + 1 > $this->_getDynDataV($tranDb['account_id'],TN_GUN_MAX_QUALITY, 0)) { - $this->_setDynDataV($tranDb['account_id'],TN_GUN_MAX_QUALITY, 0, $gunDb['quality'] + 1); - } - myself()->_rspOk(); - } - - public function chipUpgradeGrade(){return; - $transId = getReqVal('trans_id', '0'); - $tokenId = getReqVal('token_id', '0'); - if (!$transId || !$tokenId){ - myself()->_rspErr(1, 'param error'); - return; - } - - $tranDb= Transaction::findEx($transId); - if (!$tranDb){ - myself()->_rspErr(1, 'param error'); - return; - } - if (NftUpEvent::find($transId)){ - myself()->_rspOk(); - return; - } - if (! $tranDb['result']){ - NftUpEvent::add( - array( - 'trans_id' => $transId, - 'token_id' => $tokenId, - 'value' => 1, - 'createtime' => myself()->_getNowTime(), - 'modifytime' => myself()->_getNowTime(), - ) - ); - myself()->_rspOk(); - return; - } - - $chipDb = SqlHelper::ormSelectOne( - myself()->_getMysql($tranDb['account_id']), - 't_chip', - array( - 'token_id' => $tokenId - ) - ); - if ( !$chipDb ){ - myself()->_rspErr(1, 'token_id param error'); - return; - } - $nextGrade = $chipDb['chip_grade']+1; - if ($nextGrade > 15){ - myself()->_rspErr(1, 'Chip Lv upper limit'); - return; - } - if ($nextGrade == 3 || $nextGrade == 5){ - Chip::updateRandAttr($tranDb['account_id'],$chipDb); - } - $lucky = ltrim(\services\FormulaService::getChipLuckyValue($nextGrade),'-') ; - if ($nextGrade>=5){ - $fieldsKv = array( - 'lucky_temporary'=>$lucky, - 'chip_grade'=>$nextGrade, - 'supper_state'=>1, - 'modifytime' => myself()->_getNowTime() - ); - }else{ - $fieldsKv = array( - 'lucky_temporary'=>$lucky, - 'chip_grade'=>$nextGrade, - 'modifytime' => myself()->_getNowTime() - ); - } - SqlHelper::update - (myself()->_getMysql($tranDb['account_id']), - 't_chip', - array( - 'token_id' => $tokenId, - ), - $fieldsKv - ); - NftUpEvent::add( - array( - 'trans_id' => $transId, - 'token_id' => $tokenId, - 'value' => 1, - 'createtime' => myself()->_getNowTime(), - 'modifytime' => myself()->_getNowTime(), - ) - ); - myself()->_rspOk(); - } - - private function _getDynDataV($accountId,$x, $y, $val = 0){ - SqlHelper::ormSelectOne( - myself()->_getMysql($accountId), - 't_dyndata', - array( - 'account_id' => $accountId, - 'x' => $x, - 'y' => $y, - ) - ); - } - private function _setDynDataV($accountId,$x, $y, $val = 0){ - SqlHelper::upsert - (myself()->_getMysql($accountId), - 't_dyndata', - array( - 'account_id' => $accountId, - 'x' => $x, - 'y' => $y - ), - array( - 'val' => $val, - 'modifytime' => myself()->_getNowTime() - ), - array( - 'account_id' => $accountId, - 'x' => $x, - 'y' => $y, - 'val' => $val, - 'createtime' => myself()->_getNowTime(), - 'modifytime' => myself()->_getNowTime() - ) - ); + require_once ('services/callback/' . $className . '.php'); + $obj = eval("return new services\\" . $className . "();"); + $obj->process(); } } diff --git a/webapp/controller/PassController.class.php b/webapp/controller/PassController.class.php index 3660f5db..ee1a4909 100644 --- a/webapp/controller/PassController.class.php +++ b/webapp/controller/PassController.class.php @@ -1,15 +1,21 @@ currSeasonMeta['id']); } $data = emptyReplace(json_decode($row['data'], true), array()); + $pass_price = \mt\Parameter::getVal('battlepass_price',''); + $lv_price = \mt\Parameter::getVal('battlepass_buy_lv_price',''); + $pass_state = $this->_getV(TN_DAILY_BUY_PASS_STATE, 0); + $lv_state = $this->_getV(TN_DAILY_BUY_LEVEL_STATE, 0); $this->_rspData(array( 'time_info' => array( 'name'=>$this->currSeasonMeta['battlepass_name'], @@ -48,6 +58,10 @@ class PassController extends BaseAuthedController { 'end_time'=>strtotime($this->currSeasonMeta['end_time']) ), 'reward_info' => $data, + 'pass_buy_state' => $pass_state, + 'pass_price' => $pass_price, + 'lv_buy_state' => $lv_state, + 'lv_price' => $lv_price, )); } @@ -170,6 +184,54 @@ class PassController extends BaseAuthedController { )); } + public function buyPlatinumPass(){ + if (empty($this->_getAddress())){ + $this->_rspErr(1, 'address is empty'); + return; + } + $price = getReqVal('price', ''); + if ($price != \mt\Parameter::getVal('battlepass_price','')){ + $this->_rspErr(1, 'The price is wrong'); + return; + } + $response = services\BlockChainService::gameItemMallBuy( + Transaction::BUY_PASS_ACTION_TYPE,$price,V_ITEM_PASS,1); + + $this->_setV(TN_DAILY_BUY_PASS_STATE, 0,1); + BcOrder::upsert($response['trans_id'],array( + 'item_id'=>V_ITEM_PASS, + 'item_num'=>1, + )); + $this->_rspData($response); + } + + public function buyLevel(){ + if (empty($this->_getAddress())){ + $this->_rspErr(1, 'address is empty'); + return; + } + $level = getReqVal('level', ''); + $price = getReqVal('price', ''); + $passMeta = \mt\BattlePass::find($level); + if (!$passMeta){ + $this->_rspErr(1, 'param level error or null'); + return; + } + $celPrice = ($passMeta['total_exp'] - $this->userInfo['exp']) * \mt\Parameter::getVal('battlepass_buy_lv_price',''); + if ($celPrice != $price){ + $this->_rspErr(1, 'The price is wrong'); + return; + } + $response = services\BlockChainService::gameItemMallBuy( + Transaction::BUY_EXP_ACTION_TYPE,$price,V_ITEM_EXP,$passMeta['total_exp'] - $this->userInfo['exp']); + $this->_setV(TN_DAILY_BUY_LEVEL_STATE, 0,1); + BcOrder::upsert($response['trans_id'],array( + 'item_id'=>V_ITEM_EXP, + 'item_num'=>$passMeta['total_exp'] - $this->userInfo['exp'], + )); + $this->_rspData($response); + } + public function resetPassLevel(){ } diff --git a/webapp/models/BcOrder.php b/webapp/models/BcOrder.php new file mode 100644 index 00000000..a1cdd21d --- /dev/null +++ b/webapp/models/BcOrder.php @@ -0,0 +1,36 @@ +_getSelfMysql(), + 't_bc_order', + array( + 'order_id' => $transId + ), + array( + 'status' => 1, + 'modifytime' => myself()->_getNowTime(), + ), + array( + 'order_id' => $transId, + 'order_type' => getXVal($fieldsKv,'order_type',0), + 'account_id' => myself()->_getAccountId(), + 'address' => myself()->_getAddress(), + 'status' => 0, + 'item_id' => $fieldsKv['item_id'], + 'item_num' => $fieldsKv['item_num'], + 'ext_data' => getXVal($fieldsKv,'ext_data',''), + 'createtime' => myself()->_getNowTime(), + 'modifytime' => myself()->_getNowTime(), + ) + ); + } +} \ No newline at end of file diff --git a/webapp/services/BlockChainService.php b/webapp/services/BlockChainService.php index 4bff62ca..77f673ab 100644 --- a/webapp/services/BlockChainService.php +++ b/webapp/services/BlockChainService.php @@ -2,6 +2,10 @@ namespace services; +require_once('models/Transaction.php'); + +use models\Transaction; + class BlockChainService { /* @@ -10,6 +14,12 @@ class BlockChainService { 非法的参数,或者签名服挂了,该函数直接中断请求,不会运行到调用方后续逻辑 trans_id:订单id + + gameItemMallBuy + setv + a + b + c */ public static function gameItemMallBuy($actionType, $price, $itemId, $itemNum) diff --git a/webapp/services/callback/BuyLevelCbService.php b/webapp/services/callback/BuyLevelCbService.php deleted file mode 100644 index 57bd4635..00000000 --- a/webapp/services/callback/BuyLevelCbService.php +++ /dev/null @@ -1,10 +0,0 @@ -_activateUser($order['address']); + } + break; + //购买等级回调 + case V_ITEM_EXP : { + $this->_updateUserLevel($order['address'],$order['item_num']); + } + default : { + + } + } + } + + private function _activateUser($address){ + SqlHelper::update + (myself()->_getMysql($address), + 't_user', + array( + 'address' => $address + ), + array( + 'activated' => 1, + 'activatetime' => myself()->_getNowTime(), + ) + ); + } + + private function _updateUserLevel($address,$exp){ + $userDb = SqlHelper::ormSelectOne( + myself()->_getMysql($address), + 't_user', + array( + 'address' => $address + ) + ); + + $expNew = $userDb['exp'] + $exp; + $levelNew = $userDb['level']; + BattlePass::getExpByLv($levelNew,$expNew); + SqlHelper::update + (myself()->_getMysql($address), + 't_user', + array( + 'address' => $address + ), + array( + 'exp' => $expNew, + 'level' => $levelNew, + ) + ); + $userDbNew = SqlHelper::ormSelectOne( + myself()->_getMysql($address), + 't_user', + array( + 'address' => $address + ) + ); + $this->_updatePassData($userDbNew); + } + + private function _updatePassData($user){ + $currSeasonMeta = BattlePass::getCurrentSeason(); + $passDb = SqlHelper::ormSelectOne( + myself()->_getMysql($user['address']), + 't_user_pass', + array( + 'account_id' => $user['account_id'], + 'season_id' => $currSeasonMeta['id'], + ) + ); + $rewards = emptyReplace(json_decode($passDb['data'], true), array()); + foreach ($rewards['basic'] as &$reward){ + if ($user['level'] >= $reward['level'] && $reward['state']==-1){ + $reward['state'] = 0; + } + } + if ($user['activated']){ + foreach ($rewards['platinum'] as &$reward){ + if ($user['level'] >= $reward['level'] && $reward['state']==-1){ + $reward['state'] = 0; + } + } + } + SqlHelper::update( + myself()->_getMysql($user['address']), + 't_user_pass', + array( + 'account_id' => $user['account_id'], + 'season_id' => $currSeasonMeta['id'], + + ), + array( + 'data' => json_encode($rewards), + 'modifytime' => myself()->_getNowTime() + ) + ); + } + + + +} \ No newline at end of file diff --git a/webapp/services/callback/gameItemMallBuyOk.php b/webapp/services/callback/gameItemMallBuyOk.php index 82c0f607..2d7966b4 100644 --- a/webapp/services/callback/gameItemMallBuyOk.php +++ b/webapp/services/callback/gameItemMallBuyOk.php @@ -3,25 +3,56 @@ namespace services; require_once('phpcommon/bchelper.php'); +require_once ('services/callback/BuyPassCbService.php'); -require_once('models/Nft.php'); -require_once('models/ActivateNft.php'); -require_once('models/BuyRecord.php'); -require_once('models/ActivateNftEvent.php'); +use phpcommon\SqlHelper; -use phpcommon; -use models\Nft; -use models\ActivateNft; -use models\BuyRecord; -use models\ActivateNftEvent; - -class ActiveCbService { +class gameItemMallBuyOk { public function process() { $address = getReqVal('address', ''); + $orderId = getReqVal('orderId', ''); - print_r($address); + $orderDb = SqlHelper::ormSelectOne( + myself()->_getMysql($address), + 't_bc_order', + array( + 'order_id' => $orderId + ) + ); + +// 小胡 回调的处理 + if ($this->_isVirtualItem($orderDb['item_id'])){ + $passCbService = new BuyPassCbService(); + $passCbService->process($orderDb); + + } else { +// 老宋 处理... + + + } + +// 修改订单状态 + $this->_updateOrderState($address,$orderId); + } + + private function _isVirtualItem($itemId){ + return in_array($itemId, array(V_ITEM_EXP, V_ITEM_PASS)); + } + + private function _updateOrderState($address,$transId){ + SqlHelper::update + (myself()->_getMysql($address), + 't_bc_order', + array( + 'order_id' => $transId + ), + array( + 'status' => 1, + 'modifytime' => myself()->_getNowTime(), + ) + ); } }