通行证及等级购买
This commit is contained in:
parent
2e05bd176c
commit
a6e9ff11f3
@ -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'],
|
||||
]
|
||||
},
|
||||
|
||||
]
|
||||
|
@ -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: 已发货',
|
||||
|
@ -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: 已发货',
|
||||
|
@ -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);
|
||||
|
@ -1,458 +1,26 @@
|
||||
<?php
|
||||
|
||||
require_once('mt/Item.php');
|
||||
require_once('mt/Currency.php');
|
||||
require_once('mt/Hero.php');
|
||||
require_once('mt/Parameter.php');
|
||||
|
||||
require_once('models/Nft.php');
|
||||
require_once('models/Withdrawal.php');
|
||||
require_once('models/Transfer.php');
|
||||
require_once('models/UserWalletRecord.php');
|
||||
require_once('models/NftUpEvent.php');
|
||||
require_once('models/Hero.php');
|
||||
require_once('models/Gun.php');
|
||||
require_once('models/Chip.php');
|
||||
require_once('models/DynData.php');
|
||||
require_once('models/NftUpReceive.php');
|
||||
require_once('models/Transaction.php');
|
||||
|
||||
require_once('phpcommon/bchelper.php');
|
||||
|
||||
use phpcommon\SqlHelper;
|
||||
use models\Nft;
|
||||
use models\Withdrawal;
|
||||
use models\Transfer;
|
||||
use models\UserWalletRecord;
|
||||
use models\NftUpEvent;
|
||||
use models\Hero;
|
||||
use models\Gun;
|
||||
use models\Chip;
|
||||
use models\DynData;
|
||||
use models\NftUpReceive;
|
||||
use models\Transaction;
|
||||
|
||||
class CallbackController extends BaseController {
|
||||
|
||||
private function isTestMode()
|
||||
private $handlers = array(
|
||||
'gameItemMallBuyOk' => '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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,15 +1,21 @@
|
||||
<?php
|
||||
require_once('services/AwardService.php');
|
||||
require_once('services/PropertyChgService.php');
|
||||
require_once('services/BlockChainService.php');
|
||||
|
||||
require_once('mt/BattlePass.php');
|
||||
require_once('mt/StarLevel.php');
|
||||
|
||||
require_once('models/Pass.php');
|
||||
require_once('models/RealtimeData.php');
|
||||
require_once('models/Transaction.php');
|
||||
require_once('models/BcOrder.php');
|
||||
|
||||
use models\Transaction;
|
||||
use phpcommon\SqlHelper;
|
||||
use models\Pass;
|
||||
use models\RealtimeData;
|
||||
use models\BcOrder;
|
||||
class PassController extends BaseAuthedController {
|
||||
|
||||
private $awardService = null;
|
||||
@ -40,6 +46,10 @@ class PassController extends BaseAuthedController {
|
||||
$row = Pass::find($this->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(){
|
||||
|
||||
}
|
||||
|
36
webapp/models/BcOrder.php
Normal file
36
webapp/models/BcOrder.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace models;
|
||||
|
||||
|
||||
use phpcommon\SqlHelper;
|
||||
|
||||
class BcOrder
|
||||
{
|
||||
public static function upsert($transId,$fieldsKv){
|
||||
SqlHelper::upsert
|
||||
(myself()->_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(),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
@ -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)
|
||||
|
@ -1,10 +0,0 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace services;
|
||||
|
||||
|
||||
class BuyLevelCbService
|
||||
{
|
||||
|
||||
}
|
118
webapp/services/callback/BuyPassCbService.php
Normal file
118
webapp/services/callback/BuyPassCbService.php
Normal file
@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace services;
|
||||
|
||||
require_once('mt/BattlePass.php');
|
||||
|
||||
use mt\BattlePass;
|
||||
use phpcommon\SqlHelper;
|
||||
|
||||
class BuyPassCbService
|
||||
{
|
||||
public function process($order){
|
||||
|
||||
switch ($order['item_id']){
|
||||
//购买通行证回调
|
||||
case V_ITEM_PASS : {
|
||||
$this->_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()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -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(),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user