bitget earn

This commit is contained in:
LayFi.de
2025-01-28 01:48:16 +08:00
parent ffdb74d841
commit 042197db0d
16 changed files with 703 additions and 72 deletions
+132 -3
View File
@@ -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;*/
}
}
+1 -1
View File
@@ -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);