layfi-earn/app/command/GetcoinBitget.php
2025-01-28 01:48:16 +08:00

167 lines
5.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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;
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
* @param OutputInterface $output
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output): int
{
$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;*/
}
}