game2006api/webapp/services/ActivateNftService.php
2022-04-25 10:27:10 +08:00

115 lines
3.4 KiB
PHP

<?php
namespace services;
require_once('phpcommon/bchelper.php');
require_once('models/Nft.php');
require_once('models/ActivateNft.php');
require_once('models/BuyRecord.php');
require_once('models/ActivateNftEvent.php');
use phpcommon;
use models\Nft;
use models\ActivateNft;
use models\BuyRecord;
use models\ActivateNftEvent;
class ActivateNftService {
public static function activate($account, $tokenId, $netId)
{
if (!phpcommon\isValidOldOrderId($tokenId)) {
myself()->_rspErr(2, 'invalid token_id');
return;
}
$nftDb = Nft::getNft($tokenId);
if (!$nftDb) {
myself()->_rspErr(2, 'nft not found');
return;
}
$actDb = ActivateNft::find($tokenId);
if (!$actDb) {
$newTokenId = phpcommon\oldOrderIdToNew($tokenId);
error_log('oldTokenId:' . $tokenId . ' newTokenId:' . $newTokenId);
ActivateNft::add($tokenId, $account, $newTokenId);
}
$actDb = ActivateNft::find($tokenId);
if (!$actDb) {
myself()->_rspErr(2, 'server internal error3');
return;
}
{
$params = array(
'c' => 'BcService',
'a' => 'activateNftSignature',
'account' => $account,
'old_token_id' => $tokenId,
'old_token_type' => $nftDb['token_type'],
'new_token_id' => $actDb['new_token_id'],
);
$url = self::getWeb3ServiceUrl();
$response = '';
if (!phpcommon\HttpClient::get
($url,
$params,
$response)) {
phpcommon\sendError(500, 'server internal error');
die();
return;
}
error_log(json_encode(array(
'_REQUEST' => $_REQUEST,
'params' => $params,
'response' => $response
)));
$json = json_decode($response, true);
myself()->_rspData(array(
'nonce' => $json['nonce'],
'signature' => $json['signature'],
'new_token_id' => $actDb['new_token_id'],
));
}
}
public static function queryResult($account, $tokenId, $netId)
{
$eventDb = ActivateNftEvent::find($tokenId);
if (!$eventDb) {
myself()->_rspData(array(
'state' => 0,
'nft'=> array()
));
return;
}
$oldNftDb = Nft::getNft($eventDb['old_token_id']);
if (!$oldNftDb || phpcommon\isSameAddress($oldNftDb['owner_address'],
$account)) {
myself()->_rspData(array(
'state' => 0,
'nft'=> array()
));
return;
}
$nftDb = Nft::getNft($eventDb['new_token_id']);
if (!$nftDb) {
myself()->_rspData(array(
'state' => 0,
'nft'=> array()
));
return;
}
myself()->_rspData(array(
'state' => 1,
'nft'=> Nft::toDto($nftDb)
));
}
private static function getWeb3ServiceUrl()
{
$web3ServiceCluster = require_once('../config/web3service.cluster.php');
return $web3ServiceCluster[rand() % count($web3ServiceCluster)];
}
}