$account, 'rand' => uniqid(), 'nonce' => $nonce, 'createtime' => myself()->_getNowTime(), ); $data['sign'] = md5(self::TOKEN_SALT . $data['account'] . $data['rand'] . $data['nonce'] . $data['createtime']); return base64_encode(json_encode($data)); } public static function buyBoxVerifySignature($buyerAddress, $type, $paymentTokenAddress, $price, $nonce, $signature) { $params = array( 'c' => 'BcService', 'a' => 'buyBoxVerifySignature', 'type' => $type, 'paymentTokenAddress' => $paymentTokenAddress, 'price' => $price, 'nonce' => $nonce, 'signature' => $signature ); $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 ))); $data = json_decode($response, true); if (getXVal($data, 'errcode', 0) != 0) { phpcommon\sendError(1, 'Signature verification failed'); die(); return; } else { $recovered = getXVal($data, 'recovered', ''); if (!phpcommon\isSameAddress($recovered, $buyerAddress)) { phpcommon\sendError(1, 'Signature verification failed'); die(); return; } } } public static function getWeb3ServiceUrl() { $web3ServiceCluster = require_once('../config/web3service.cluster.php'); return $web3ServiceCluster[rand() % count($web3ServiceCluster)]; } }