layfi-earn/app/command/GetcoinBitget.php

167 lines
5.6 KiB
PHP
Raw Normal View History

2025-01-27 20:49:47 +08:00
<?php
namespace app\command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface;
2025-01-28 01:48:16 +08:00
use support\Db;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
2025-01-27 20:49:47 +08:00
class GetcoinBitget extends Command
{
2025-01-28 01:48:16 +08:00
protected $source = 'bitget';
2025-01-27 20:49:47 +08:00
protected static $defaultName = 'getcoin:bitget';
protected static $defaultDescription = 'getcoin bitget';
2025-01-28 01:48:16 +08:00
private string $apiKey;
private string $secretKey;
private string $passphrase;
private string $baseUrl;
2025-01-27 20:49:47 +08:00
/**
* @return void
*/
2025-01-28 01:48:16 +08:00
2025-01-27 20:49:47 +08:00
protected function configure()
{
2025-01-28 01:48:16 +08:00
$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;
2025-01-27 20:49:47 +08:00
$this->addArgument('name', InputArgument::OPTIONAL, 'Name description');
}
2025-01-28 01:48:16 +08:00
protected function config()
{
return ;
}
2025-01-27 20:49:47 +08:00
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output): int
{
2025-01-28 01:48:16 +08:00
$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');
2025-01-27 20:49:47 +08:00
return self::SUCCESS;
}
2025-01-28 01:48:16 +08:00
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;*/
}
2025-01-27 20:49:47 +08:00
}