Merge branch 'star' of git.kingsome.cn:server/game2006api into star

This commit is contained in:
hujiabin 2023-07-05 11:26:50 +08:00
commit 82cfc37706
3 changed files with 209 additions and 68 deletions

View File

@ -409,6 +409,7 @@ class Market(object):
'group': 'Market',
'url': 'webapp/index.php?c=Market&a=sell',
'params': [
_common.ReqHead(),
['account', '', '账号id'],
['token', '', 'token'],
['nft_token', '', 'nft_token'],
@ -424,6 +425,49 @@ class Market(object):
_common.RspHead()
]
},
{
'name': 'sellCancel',
'desc': '下架物品',
'group': 'Market',
'url': 'webapp/index.php?c=Market&a=sellCancel',
'params': [
_common.ReqHead(),
['account', '', '账号id'],
['idx', '', '出售的idx'],
],
'response': [
_common.RspHead()
]
},
{
'name': 'sellUpdatePrice',
'desc': '修改价格',
'group': 'Market',
'url': 'webapp/index.php?c=Market&a=sellUpdatePrice',
'params':[
_common.ReqHead(),
['account', '', '账号id'],
['idx', '', '出售的idx'],
['s_price', '', '出售价格USDT'],
],
'response': [
_common.RspHead()
]
},
{
'name': 'buy',
'desc': '购买商品 (金币购买)',
'group': 'Market',
'url': 'webapp/index.php?c=Market&a=buy',
'params': [
_common.ReqHead(),
['account', '', '账号id'],
['idx', '', '出售的idx'],
],
'response': [
_common.RspHead()
]
},
{
'name': 'buyNft',
'desc': '购买NFT',

View File

@ -37,9 +37,21 @@ use services\LuckyBoxService;
use services\ActivateNftService;
use models\Transaction;
class MarketController extends BaseController
class MarketController extends BaseAuthedController
{
public function _handlePre()
{
if (
getReqVal('a', '') != 'eventSellOrder' &&
getReqVal('a', '') != 'eventBuyOrder' &&
getReqVal('a', '') != 'eventCancelOrder' &&
getReqVal('a', '') != 'eventPriceUpdateOrder'
) {
parent::_handlePre();
}
}
public function getPreSaleInfo()
{
$account = strtolower(getReqVal('account', ''));
@ -913,6 +925,12 @@ class MarketController extends BaseController
$order_asc = getReqVal('order_asc', 1);
$type = getReqVal('type', 1);
$job_filters = getReqVal('job_filters', '');
$address = $this->_getAddress();
if ($address != $account) {
$this->_rspErr(1, 'account not match');
return;
}
if (empty($job_filters)) {
$job_filter_array = array();
} else {
@ -1043,7 +1061,88 @@ class MarketController extends BaseController
$this->_rspOk();
}
public function buy() {
public function sellCancel()
{
$account = strtolower(getReqVal('account', ''));
$idx = getReqVal('idx', '');
$address = $this->_getAddress();
if ($address != $account) {
$this->_rspErr(1, 'not your goods, idx:' . $idx);
return;
}
$goods = $this->getGoodsByIdx($idx);
if (!$goods) {
$this->_rspErr(1, 'goods not found, idx:' . $idx);
return;
}
if ($goods['owner_address'] != $account) {
$this->_rspErr(1, 'not your goods, idx:' . $idx);
return;
}
if (!$this->addItems($address, $goods['item_id'], $goods['amount'])) {
$this->_rspErr(1, "cancel failed, add item failed, idx:" . $idx);
return;
}
$conn = $this->_getMarketMysql('');
$r = SqlHelper::update(
$conn,
't_market_store',
array(
'idx' => $idx,
),
array(
'status' => 1,
'modifytime' => $this->_getNowTime(),
)
);
$this->_rspOk();
}
public function sellUpdatePrice()
{
$account = strtolower(getReqVal('account', ''));
$idx = getReqVal('idx', '');
$s_price = getReqVal('s_price', '');
$address = $this->_getAddress();
if ($address != $account) {
$this->_rspErr(1, 'not your goods, idx:' . $idx);
return;
}
$goods = $this->getGoodsByIdx($idx);
if (!$goods) {
$this->_rspErr(1, 'goods not found, idx:' . $idx);
return;
}
if ($goods['owner_address'] != $account) {
$this->_rspErr(1, 'not your goods, idx:' . $idx);
return;
}
$conn = $this->_getMarketMysql('');
$r = SqlHelper::update(
$conn,
't_market_store',
array(
'idx' => $idx,
),
array(
's_price' => $s_price,
'modifytime' => $this->_getNowTime(),
)
);
$this->_rspOk();
}
public function buy()
{
$account = strtolower(getReqVal('account', ''));
$idx = getReqVal('idx', '');
@ -1053,7 +1152,7 @@ class MarketController extends BaseController
return;
}
$response = services\BlockChainService::gameItemMallBuyWithAddress($account,
$response = services\BlockChainService::gameItemMallBuy(
Transaction::BUY_GOODS_FROM_MARKET_ACTION_TYPE,
$goods['s_price'],
$goods['item_id'],
@ -1068,7 +1167,6 @@ class MarketController extends BaseController
$this->_rspData(array(
'block_chain' => $response,
));
}
private function sellMyNft()
{
@ -1539,6 +1637,21 @@ class MarketController extends BaseController
return $rows;
}
private function addItems($address, $item_id, $amount)
{
$self = myself();
if (!$self) {
return false;
}
$r = $this->addItem($address, $item_id, $amount);
if (!$r) {
return false;
}
return true;
}
private function decItems($address, $item_id, $amount)
{
$self = myself();
@ -1560,6 +1673,24 @@ class MarketController extends BaseController
return true;
}
private function addItem($address, $item_id, $amount)
{
$self = myself();
if (!$self) {
return false;
}
switch ($item_id) {
case V_ITEM_GOLD: {
$r = $this->addGold($address, $amount);
if (!$r) {
return false;
}
}
break;
}
return true;
}
private function decItem($address, $item_id, $amount)
{
$self = myself();
@ -1578,6 +1709,26 @@ class MarketController extends BaseController
return true;
}
private function addGold($address, $amount)
{
$self = myself();
if (!$self) {
return false;
}
$r = $this->updateUserInfo($address, array(
'gold' => function () use ($amount) {
return "gold + ${amount}";
}
));
if (!$r) {
return false;
}
return true;
}
private function decGold($address, $amount)
{
$self = myself();
@ -1590,7 +1741,7 @@ class MarketController extends BaseController
if ($count < $amount) {
return false;
}
$r = $this->updateUserInfo($address, array(
'gold' => function () use ($amount) {
return "GREATEST(0, gold - ${amount})";
@ -1710,7 +1861,8 @@ class MarketController extends BaseController
return phpcommon\bnToStr($ret_price);
}
private function getGoodsByIdx($idx) {
private function getGoodsByIdx($idx)
{
$self = myself();
if (!$self) {
return null;
@ -1719,11 +1871,15 @@ class MarketController extends BaseController
$row = SqlHelper::selectOne(
$self->_getMarketMysql(''),
't_market_store',
array('item_id', 'amount', 's_price'),
array('item_id', 'amount', 's_price', 'owner_address'),
array(
'idx' => $idx
'idx' => $idx,
'status' => 0,
)
);
if ($row['item_id'] == null) {
return null;
}
return $row;
}
}

View File

@ -83,65 +83,6 @@ class BlockChainService {
}
}
public static function gameItemMallBuyWithAddress($address, $actionType, $price, $itemId, $itemNum)
{
if (!($actionType > Transaction::BUY_BEGIN_ACTION_TYPE &&
$actionType < Transaction::BUY_END_ACTION_TYPE)) {
error_log('gameItemMallBuy action_type error:' . $actionType);
myself()->_rspErr(500, 'server internal error 1');
die();
return;
}
$account = $address;
if (empty($account)) {
error_log('gameItemMallBuy address is emtpy:' . myself()->_getAccountId());
myself()->_rspErr(500, 'server internal error 2');
die();
return;
}
$params = array(
'c' => 'GameItemMall',
'a' => 'buy',
'account' => $account,
'price' => $price,
);
{
$url = self::getWeb3ServiceUrl();
$response = '';
if (!phpcommon\HttpClient::get
($url,
$params,
$response)) {
myself()->_rspErr(500, 'server internal error 3, url:' . $url);
die();
return;
}
error_log("gameItemMallBuy:" . $response . "url:" . $url);
$rspObj = json_decode($response, true);
if ($rspObj['errcode'] == 0) {
$transId = $rspObj['trans_id'];
// Transaction::add(
// $transId,
// $actionType,
// '', //$tokenId,
// '', //$tokenType,
// 0, //$itemUniId,
// $itemId, //$itemId,
// $itemNum,
// 1
// );
return array(
'trans_id' => $transId,
'params' => $rspObj['params']
);
} else {
myself()->_rspErr(500, 'server internal error 4' . json_encode($rspObj));
die();
return;
}
}
}
/*
$price 是一个小数精确到小数点后5位
*/
@ -156,7 +97,7 @@ class BlockChainService {
private static function getWeb3ServiceUrl()
{
if (SERVER_ENV == _DEBUG) {
return 'http://login-test.kingsome.cn/webapp/index.php';
return 'https://login-test.kingsome.cn/webapp/index.php';
}
if (SERVER_ENV == _TEST) {
return 'http://127.0.0.1:7672/webapp/index.php';