game2006api/webapp/services/callback/GameItemMarketBuyOk.php
songliang a03cfa7cfd ...
2023-07-19 14:54:56 +08:00

200 lines
4.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace services;
require_once('phpcommon/bchelper.php');
require_once('services/callback/BuyPassCbService.php');
require_once('services/callback/BuyShopGoodsCbService.php');
require_once('services/callback/common/SignatureService.php');
require_once('ShopAddItemService.php');
require_once('services/LogService.php');
use phpcommon\SqlHelper;
use models\ShopBuyRecord;
class GameItemMarketBuyOk
{
public function process()
{
SignatureService::web3ServiceCheck();
$itemService = new ShopAddItemService();
$address = getReqVal('address', '');
$orderId = getReqVal('order_id', '');
error_log("GameItemMallBuyOk-------------------");
$orderDb = SqlHelper::ormSelectOne(
myself()->_getMysql($address),
't_bc_order',
array(
'order_id' => $orderId
)
);
//1已发货 2订单不存在 3订单模式错误
if (!$orderDb) {
echo json_encode(array(
'errcode' => 2,
'errmsg' => "Order does not exist",
));
die;
}
if ($orderDb['status'] == 1) {
echo json_encode(array(
'errcode' => 1,
'errmsg' => "Order shipped",
));
die;
}
// 修改订单状态
$this->_updateOrderState($address, $orderId);
$ext_data = json_decode($orderDb['ext_data'], true);
switch ($ext_data['mode']) {
case MARKET_BUY_MODE_NORMAL: {
$order = $orderDb;
$itemService->addGameLog($order['address'], "marketBuyNormal", "begin", array(
'param1' => $order['order_id'],
'param2' => json_encode(array(
'item_id' => $order['item_id'],
'item_num' => $order['item_num'],
)),
));
$this->buyFromMarket($order, $ext_data['idx']);
$itemService->addGameLog($order['address'], "marketBuyNormal", "end", array(
'param1' => $order['order_id'],
'param2' => json_encode(array(
'item_id' => $order['item_id'],
'item_num' => $order['item_num'],
)),
));
}
break;
default:
// 这里不应该出现其他模式,内部错误
echo json_encode(array(
'errcode' => 3,
'errmsg' => "order mode error.",
));
die();
break;
}
echo json_encode(array(
'errcode' => 0,
'errmsg' => "callback success",
));
}
private function _isVirtualItem($itemId)
{
return in_array(
$itemId,
array(
V_ITEM_EXP,
V_ITEM_PASS,
V_ITEM_RESET_CARD,
)
);
}
private function _updateOrderState($address, $transId)
{
SqlHelper::update(
myself()->_getMysql($address),
't_bc_order',
array(
'order_id' => $transId
),
array(
'status' => 1,
'modifytime' => myself()->_getNowTime(),
)
);
}
private function buyFromMarket($order, $idx)
{
$address = $order['address'];
$account_id = $this->getAccountId($address);
$goods = $this->getMarketGoods($address, $idx);
$this->markMarketGoodsSold($address, $idx);
$this->_addGoods($address, $goods);
{
//埋点
$event = [
'name' => LogService::MARKET_BUY_GOLD,
'val' => $goods['amount']
];
LogService::productGoldCallback(['account_id' => $account_id], $event );
}
}
private function getMarketGoods($address, $idx)
{
$row = SqlHelper::selectOne(
myself()->_getMysql($address),
't_market_store',
array('order_id', 'item_id', 'amount', 's_price', 'owner_address'),
array(
'idx' => $idx
)
);
if (!$row) {
return null;
}
if (!$row['item_id']) {
return null;
}
return $row;
}
private function markMarketGoodsSold($address, $idx)
{
SqlHelper::update(
myself()->_getMysql($address),
't_market_store',
array(
'idx' => $idx
),
array(
'status' => 2,
'modifytime' => myself()->_getNowTime(),
)
);
}
private function _addGoods($address, $goods)
{
$itemService = new ShopAddItemService();
$item_id = $goods['item_id'];
$goods_num = $goods['amount'];
$id = null;
if (!empty($goods['id'])) {
$id = $goods['id'];
}
error_log(json_encode($goods));
error_log('_addGoods ' . $address . ' item_id ' . $item_id . ' goods_num ' . $goods_num . ' id ' . $id);
$itemService->addItem($address, $item_id, $goods_num);
if ($id) {
ShopBuyRecord::addWithAddress($address, $id, $goods_num);
}
}
private function getAccountId($address){
$row = SqlHelper::ormSelectOne
(myself()->_getMysql($address),
't_user',
array(
'address' => $address
)
);
return $row['account_id'];
}
}