通行证及等级购买
This commit is contained in:
parent
2e05bd176c
commit
a6e9ff11f3
@ -18,6 +18,10 @@ class Pass(object):
|
|||||||
_common.RspHead(),
|
_common.RspHead(),
|
||||||
['!time_info', [TimeInfo()], '赛季时间'],
|
['!time_info', [TimeInfo()], '赛季时间'],
|
||||||
['!reward_info', [Reward()], '任务列表'],
|
['!reward_info', [Reward()], '任务列表'],
|
||||||
|
['pass_buy_state', 0, '通行证购买状态 1:购买中'],
|
||||||
|
['pass_price', 0, '通行证价格'],
|
||||||
|
['lv_buy_state', 0, '通行证经验购买状态 1:购买中'],
|
||||||
|
['lv_price', 0, '通行证经验价格(exp/price)'],
|
||||||
]
|
]
|
||||||
},{
|
},{
|
||||||
'name': 'commit',
|
'name': 'commit',
|
||||||
@ -47,6 +51,35 @@ class Pass(object):
|
|||||||
['award', _common.Award(), '奖励信息'],
|
['award', _common.Award(), '奖励信息'],
|
||||||
['property_chg', _common.PropertyChg(), '属性变更'],
|
['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` (
|
CREATE TABLE `t_bc_order` (
|
||||||
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||||
`order_id` varchar(255) COMMENT '订单号',
|
`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 只用做事后分析用',
|
`account_id` varchar(60) NOT NULL COMMENT '账户id 只用做事后分析用',
|
||||||
`address` varchar(60) COMMENT 'address',
|
`address` varchar(60) COMMENT 'address',
|
||||||
`status` int(11) NOT NULL DEFAULT '0' COMMENT '0: 支付中 1: 已发货',
|
`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` (
|
CREATE TABLE `t_bc_order` (
|
||||||
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||||
`order_id` varchar(255) COMMENT '订单号',
|
`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 只用做事后分析用',
|
`account_id` varchar(60) NOT NULL COMMENT '账户id 只用做事后分析用',
|
||||||
`address` varchar(60) COMMENT 'address',
|
`address` varchar(60) COMMENT 'address',
|
||||||
`status` int(11) NOT NULL DEFAULT '0' COMMENT '0: 支付中 1: 已发货',
|
`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_ACTIVE', 10004); //活跃度
|
||||||
define('V_ITEM_BCEG', 10010); //BCEG
|
define('V_ITEM_BCEG', 10010); //BCEG
|
||||||
define('V_ITEM_STAR', 10011); //星星
|
define('V_ITEM_STAR', 10011); //星星
|
||||||
|
define('V_ITEM_PASS', 10012); //通行证
|
||||||
define('V_ITEM_REVIVE_COIN', 140001); //复活币
|
define('V_ITEM_REVIVE_COIN', 140001); //复活币
|
||||||
define('V_ITEM_HERO_META', 100005); //英雄升级材料
|
define('V_ITEM_HERO_META', 100005); //英雄升级材料
|
||||||
define('V_ITEM_GUN_META', 100006); //枪械升级材料
|
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_COMPLETE_TASK_NUM', 9014);
|
||||||
define('TN_DAILY_USED_GOLD_NUM', 9015);
|
define('TN_DAILY_USED_GOLD_NUM', 9015);
|
||||||
define('TN_DAILY_GET_STAR_NUM', 9016);
|
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_BEGIN', 10001);
|
||||||
define('TN_WEEKLY_ACTIVE', 10002);
|
define('TN_WEEKLY_ACTIVE', 10002);
|
||||||
|
@ -1,458 +1,26 @@
|
|||||||
<?php
|
<?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 {
|
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', '');
|
require_once ('services/callback/' . $className . '.php');
|
||||||
$account = strtolower(getReqVal('account', ''));
|
$obj = eval("return new services\\" . $className . "();");
|
||||||
$txHash = getReqVal('txhash', '');
|
$obj->process();
|
||||||
$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()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,21 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once('services/AwardService.php');
|
require_once('services/AwardService.php');
|
||||||
require_once('services/PropertyChgService.php');
|
require_once('services/PropertyChgService.php');
|
||||||
|
require_once('services/BlockChainService.php');
|
||||||
|
|
||||||
require_once('mt/BattlePass.php');
|
require_once('mt/BattlePass.php');
|
||||||
require_once('mt/StarLevel.php');
|
require_once('mt/StarLevel.php');
|
||||||
|
|
||||||
require_once('models/Pass.php');
|
require_once('models/Pass.php');
|
||||||
require_once('models/RealtimeData.php');
|
require_once('models/RealtimeData.php');
|
||||||
|
require_once('models/Transaction.php');
|
||||||
|
require_once('models/BcOrder.php');
|
||||||
|
|
||||||
|
use models\Transaction;
|
||||||
use phpcommon\SqlHelper;
|
use phpcommon\SqlHelper;
|
||||||
use models\Pass;
|
use models\Pass;
|
||||||
use models\RealtimeData;
|
use models\RealtimeData;
|
||||||
|
use models\BcOrder;
|
||||||
class PassController extends BaseAuthedController {
|
class PassController extends BaseAuthedController {
|
||||||
|
|
||||||
private $awardService = null;
|
private $awardService = null;
|
||||||
@ -40,6 +46,10 @@ class PassController extends BaseAuthedController {
|
|||||||
$row = Pass::find($this->currSeasonMeta['id']);
|
$row = Pass::find($this->currSeasonMeta['id']);
|
||||||
}
|
}
|
||||||
$data = emptyReplace(json_decode($row['data'], true), array());
|
$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(
|
$this->_rspData(array(
|
||||||
'time_info' => array(
|
'time_info' => array(
|
||||||
'name'=>$this->currSeasonMeta['battlepass_name'],
|
'name'=>$this->currSeasonMeta['battlepass_name'],
|
||||||
@ -48,6 +58,10 @@ class PassController extends BaseAuthedController {
|
|||||||
'end_time'=>strtotime($this->currSeasonMeta['end_time'])
|
'end_time'=>strtotime($this->currSeasonMeta['end_time'])
|
||||||
),
|
),
|
||||||
'reward_info' => $data,
|
'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(){
|
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;
|
namespace services;
|
||||||
|
|
||||||
|
require_once('models/Transaction.php');
|
||||||
|
|
||||||
|
use models\Transaction;
|
||||||
|
|
||||||
class BlockChainService {
|
class BlockChainService {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -10,6 +14,12 @@ class BlockChainService {
|
|||||||
非法的参数,或者签名服挂了,该函数直接中断请求,不会运行到调用方后续逻辑
|
非法的参数,或者签名服挂了,该函数直接中断请求,不会运行到调用方后续逻辑
|
||||||
|
|
||||||
trans_id:订单id
|
trans_id:订单id
|
||||||
|
|
||||||
|
gameItemMallBuy
|
||||||
|
setv
|
||||||
|
a
|
||||||
|
b
|
||||||
|
c
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public static function gameItemMallBuy($actionType, $price, $itemId, $itemNum)
|
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;
|
namespace services;
|
||||||
|
|
||||||
require_once('phpcommon/bchelper.php');
|
require_once('phpcommon/bchelper.php');
|
||||||
|
require_once ('services/callback/BuyPassCbService.php');
|
||||||
|
|
||||||
require_once('models/Nft.php');
|
use phpcommon\SqlHelper;
|
||||||
require_once('models/ActivateNft.php');
|
|
||||||
require_once('models/BuyRecord.php');
|
|
||||||
require_once('models/ActivateNftEvent.php');
|
|
||||||
|
|
||||||
use phpcommon;
|
class gameItemMallBuyOk {
|
||||||
use models\Nft;
|
|
||||||
use models\ActivateNft;
|
|
||||||
use models\BuyRecord;
|
|
||||||
use models\ActivateNftEvent;
|
|
||||||
|
|
||||||
class ActiveCbService {
|
|
||||||
|
|
||||||
public function process()
|
public function process()
|
||||||
{
|
{
|
||||||
$address = getReqVal('address', '');
|
$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