bitget earn
This commit is contained in:
@@ -7,20 +7,37 @@ use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use support\Db;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Exception\RequestException;
|
||||
|
||||
|
||||
class GetcoinBitget extends Command
|
||||
{
|
||||
protected $source = 'bitget';
|
||||
protected static $defaultName = 'getcoin:bitget';
|
||||
protected static $defaultDescription = 'getcoin bitget';
|
||||
|
||||
private string $apiKey;
|
||||
private string $secretKey;
|
||||
private string $passphrase;
|
||||
private string $baseUrl;
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$config=Db::table('apisetting')->where('source', $this->source)->first();
|
||||
$this->apiKey = $config->api;
|
||||
$this->secretKey = $config->apikey;
|
||||
$this->passphrase = $config->passphrase;
|
||||
$this->baseUrl = 'https://'.$config->domain;
|
||||
$this->addArgument('name', InputArgument::OPTIONAL, 'Name description');
|
||||
}
|
||||
protected function config()
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param InputInterface $input
|
||||
@@ -29,9 +46,121 @@ class GetcoinBitget extends Command
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||
{
|
||||
$name = $input->getArgument('name');
|
||||
$output->writeln('Hello getcoin:bitget');
|
||||
$output->writeln($this->source.' Getcoin Now Running');
|
||||
|
||||
|
||||
$response = $this->sendRequest('GET', '/api/v2/earn/savings/product', [
|
||||
'filter' => 'available',
|
||||
]);
|
||||
if(isset($response)&&isset($response->code)&&$response->code=='00000'&&isset($response->data)){
|
||||
$bakdata = [];
|
||||
foreach($response->data as $data){
|
||||
if($data->periodType!='flexible' || $data->productLevel!='normal'){
|
||||
continue;
|
||||
}
|
||||
$apyValues = array_map(function($item) {
|
||||
return floatval($item->currentApy);
|
||||
}, $data->apyList);
|
||||
if($data->status=='in_progress'){
|
||||
$available=1;
|
||||
}else{
|
||||
$available=0;
|
||||
}
|
||||
$bakdata[]=[
|
||||
'token'=>strtoupper($data->coin),
|
||||
'type'=>'earn',
|
||||
'subtype'=>'flexible',
|
||||
'source'=>'bitget',
|
||||
'rate'=>max($apyValues),
|
||||
'min_rate'=>min($apyValues),
|
||||
'update'=>date('Y-m-d H:i:s'),
|
||||
'available' => $available,
|
||||
];
|
||||
}
|
||||
Db::table('coininfo')->upsert(
|
||||
$bakdata, // 插入的数据
|
||||
['token', 'type','subtype','source'], // 复合唯一标识列(user_id 和 product_id 组合)
|
||||
['rate','min_rate','update','available'] // 如果记录存在,更新的字段
|
||||
);
|
||||
}else{
|
||||
$output->writeln('<error>Request API Error</error>');
|
||||
return self::SUCCESS;
|
||||
}
|
||||
$output->writeln('OK');
|
||||
return self::SUCCESS;
|
||||
}
|
||||
private function generateSignature($timestamp, $method, $requestPath, $queryString = '', $body = null)
|
||||
{
|
||||
$method = strtoupper($method);
|
||||
|
||||
$preHash = $timestamp . $method . $requestPath;
|
||||
if ($queryString) {
|
||||
$preHash .= '?' . $queryString;
|
||||
}
|
||||
if($body){
|
||||
$preHash .= $body;
|
||||
}
|
||||
return base64_encode(hash_hmac('sha256', $preHash, $this->secretKey, true));
|
||||
}
|
||||
private function sendRequest($method, $requestPath, $queryParams = null, $bodyParams = null)
|
||||
{
|
||||
$timestamp = (int)microtime(true) * 1000;
|
||||
|
||||
|
||||
|
||||
$queryString = http_build_query($queryParams);
|
||||
$body = !empty($bodyParams) ? json_encode($bodyParams) : '';
|
||||
|
||||
$signature = $this->generateSignature($timestamp, $method, $requestPath, $queryString, $body);
|
||||
// 构建请求头
|
||||
$headers = [
|
||||
'access-key' => $this->apiKey,
|
||||
'access-sign' => $signature,
|
||||
'access-timestamp' => $timestamp,
|
||||
'access-passphrase' => $this->passphrase,
|
||||
'content-type' => 'application/json',
|
||||
'locale' => 'zh-CN',
|
||||
];
|
||||
/**
|
||||
$headers = array(
|
||||
'ACCESS-KEY: '.$this->apiKey,
|
||||
'ACCESS-SIGN: '.$signature,
|
||||
'ACCESS-TIMESTAMP: '.$timestamp,
|
||||
'ACCESS-PASSPHRASE: '.$this->passphrase,
|
||||
'Content-type: application/json',
|
||||
'locale: zh-CN',
|
||||
);*/
|
||||
// 构建完整 URL
|
||||
$url = $this->baseUrl . $requestPath;
|
||||
|
||||
if ($queryString) {
|
||||
$url .= '?' . $queryString;
|
||||
}
|
||||
|
||||
$client = new Client();
|
||||
// 发送同步请求
|
||||
$response = $client->request($method, $this->baseUrl . $requestPath, [
|
||||
'headers' => $headers,
|
||||
'query' => $queryParams, // 用于 GET 请求的查询参数
|
||||
'json' => $bodyParams, // 用于 POST 请求的 JSON 数据
|
||||
]);
|
||||
|
||||
|
||||
return json_decode($response->getBody()); // 解析响应
|
||||
/**
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
|
||||
curl_setopt($ch, CURLOPT_VERBOSE, true);
|
||||
curl_setopt($ch, CURLOPT_STDERR, fopen('php://stderr', 'w'));
|
||||
$output = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
return $output;*/
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ class Bitget
|
||||
echo date('[Y-m-d H:i:s]')."Getcoin:".__CLASS__." Now Running: \n";
|
||||
$command = new GetcoinBitget();
|
||||
$input = new ArrayInput([
|
||||
'name' => 'Alice', // 命令的参数
|
||||
'name' => 'Alice',
|
||||
]);
|
||||
$output = new ConsoleOutput();
|
||||
$command->run($input, $output);
|
||||
|
||||
Reference in New Issue
Block a user