Files
jyshd_mWtK2/application/api/controller/Contract.php
T
li 7d7f53b356 feat: contract uses num_lh, male avatar, captcha upgrade, full i18n
- Contract buy/close/cancel all use num_lh (contract balance) not num (spot)
- Wallet API returns contract (lh) account data block
- My.php returns user id field for frontend display
- Avatar: DiceBear avataaars male business style
- Captcha: 3x scaled text for readability
- Transfer log descriptions in English
- All billing descriptions in English
2026-04-05 13:05:37 +08:00

763 lines
30 KiB
PHP
Executable File

<?php
namespace app\api\controller;
use app\common\controller\Api;
use think\Db;
use think\Config;
use app\common\library\Sms;
use fast\Random;
/**
* 合约
*
* @icon fa fa-circle-o
*/
class Contract extends Api
{
protected $noNeedLogin = ['get_coin','get_curr_con'];
protected $noNeedRight = '*';
public function _initialize()
{
parent::_initialize();
}
//获取支持交易的币种
public function get_coin()
{
$data = Db::name('app_rate')
->where('is_hytrade','1')
->where('status','1')
->order('weigh','desc')
->select();
//查询所有收藏
$sc_data = Db::name('app_rate_user')->where("user_id", $this->auth->id)->select();
$collect = [];
foreach ($sc_data as $key => $value) {
$collect[] = $value['symbol'];
}
foreach ($data as $key => $value) {
$value['logo_image'] = Config::get("site.image_url").$value['logo_image'];
$value['exchange_rate'] = Config::get("site.exchange_rate");
if(in_array($value['symbol'], $collect)){
$value['is_sc'] = true;
}else{
$value['is_sc'] = false;
}
$data[$key] = $value;
}
$currency = Db::name('app_currency_user')
->field('num,num_lh,id')
->where('user_id',$this->auth->id)
->where('curr_id',1)->find();
if(empty($currency)){
$currency['num'] = 0;
$currency['num_lh'] = 0;
}
$setting = [
'promise_price' => Config::get('site.promise_price'),
'contract_fee' => Config::get('site.contract_fee'),
'buy_num' => explode(',',Config::get('site.buy_num')),
'balance' => $currency['num'],
'balance_contract' => isset($currency['num_lh']) ? $currency['num_lh'] : 0,
'shizhi' => Config::get('site.shizhi'),
];
$this->success('ok',['coin'=>$data,'setting'=>$setting]);
}
//获取合约持仓列表
public function get_contract()
{
$params = $this->request->post();
$size = (isset($params['size']))?$params['size']:20;
$symbol = $this->request->post("symbol");
$status = $this->request->post("status",0);
$w['a.user_id'] = array("eq",$this->auth->id);
if($symbol){
$w['b.symbol'] = array("eq",$symbol);
}
if($status != "all"){
$w['a.status'] = array("eq",$status);
}
$data = Db::name('app_contract a')
->field('a.*,b.coinname,b.symbol,b.close,b.bb_type')
->join('app_rate b','a.coin_id = b.id','left')
->where($w)
->order('id','desc')
->paginate($size,false,['query' => request()->param()]);
foreach ($data as $key=>$value)
{
$value['createtime'] = date('Y-m-d H:i:s',$value['createtime']);
$value['updatetime'] = date('m-d H:i:s',$value['updatetime']);
$value['pctime'] = $value['createtime'];
if($value['status'] == '1') {
$diffnum = $value['close'] - $value['price'];
if ($value['type'] == 'more') {
//计算收益
$income = $diffnum / 100 * $value['num'] * $value['multiple']* Config::get('site.shizhi') ;
} else {
if ($diffnum < 0) {
$income = abs($diffnum) / 100 * $value['num'] * $value['multiple']* Config::get('site.shizhi');
} else {
$income = 0 - $diffnum / 100 * $value['num'] * $value['multiple']* Config::get('site.shizhi');
}
}
$value['income'] = sprintf('%.6f', $income);
}
$data[$key] = $value;
}
$this->success('success',$data);
}
//购买合约
public function buy_contract()
{
$params = $this->request->post();
//实名认证判断
if(!controller("Common")->get_auth()){
$this->error(__("请先完成实名认证"),['jump'=>1]);
}
if(!isset($params['cart']) || empty($params['cart'])) //market市价 limit 限价
{
$this->error(__('请选择交易模式'));
}
if($params['cart'] == 'limit' && (!isset($params['price']) || empty($params['price']))){
$this->error(__('限价模式,请输入价格'));
}
if(!isset($params['coin_id']) || empty($params['coin_id'])) //market市价 limit 限价
{
$this->error(__('请选择交易币种'));
}
$coin = Db::name('app_rate')->where('id',$params['coin_id'])->where('is_hytrade','1')->find();
if(!$coin) $this->error(__('该交易币种已下架或不存在'));
if(!isset($params['type']) || empty($params['type'])) //more free
{
$this->error(__('请选择交易方向'));
}
if(!isset($params['num']) || empty($params['num']))
{
$this->error(__('请输入交易数量'));
}
if(!isset($params['multiple']) || empty($params['multiple']))
{
$this->error(__('请选择交易倍数'));
}
$buy_num = explode(',',Config::get('site.buy_num'));
if(!in_array($params['multiple'],$buy_num))
{
$this->error(__('请选择正确的交易倍数'));
}
//redis防重复点击
$symbol = "contract" . $this->auth->id;
$submited = pushRedis($symbol);
if (!$submited) {
$this->error(__("操作频繁"));
}
$currency = Db::name('app_currency_user')
->field('num_lh,id')
->where('user_id',$this->auth->id)
->where('curr_id',1)->find();
//需要保证金
$promise_price = Config::get('site.promise_price');
$contract_fee = Config::get('site.contract_fee');
$price = $coin['close'];
if($params['cart'] == 'market')
{
//调整价格
$tradejson = json_decode($coin['tradectrl_json'],true);
$jd = $coin['jd'];
$hour = date('H');
$minute = date('i');
$prices = $num = 0;
if($tradejson) {
foreach ($tradejson as $key => $value) {
$time1 = explode('-', $key);
$time2 = explode(':', $time1[0]);
$time3 = explode(':', $time1[1]);
$pricearr = explode('-', $value);
if ($hour >= $time2[0] && $hour <= $time3[0]) {
if (($hour == $time3[0] && $minute > $time3[1]) || ($hour == $time2[0] && $minute < $time2[1])) continue;
$prices = (float)$this->randomFloat($pricearr[0], $pricearr[1], $jd);
break;
}
}
if ($prices > 0) $price = $prices;
}
//个人调整价格
$tradejsons = json_decode($this->auth->tradectrl_json,true);
if($tradejsons) {
$prices = 0;
foreach ($tradejsons as $key => $value) {
if($key == $coin['symbol']) {
$jsonarr = explode('|',$value);
if(!isset($jsonarr[0]) || !isset($jsonarr[1])) continue;
$time1 = explode('-',$jsonarr[0]);
$time2 = explode(':', $time1[0]);
$time3 = explode(':', $time1[1]);
$pricearr = explode('-', $jsonarr[1]);
if(!isset($pricearr[0]) || !isset($pricearr[1])) continue;
if ($hour >= $time2[0] && $hour <= $time3[0]) {
if (($hour == $time3[0] && $minute > $time3[1]) || ($hour == $time2[0] && $minute < $time2[1])) continue;
$prices = (float)$this->randomFloat($pricearr[0], $pricearr[1], $jd);
break;
}
}
}
if ($prices > 0) $price = $prices;
}
$release = Db::name("app_curr_release")->where("symbol",$coin['symbol'])->find();
if($release){
$trademulte_json = json_decode($release['trademulte_json'],true);
if($trademulte_json && !$prices){
foreach ($trademulte_json as $kk => $vv) {
$time1 = explode('-', $kk);
$time2 = explode(':', $time1[0]);
$time3 = explode(':', $time1[1]);
if ($hour >= $time2[0] && $hour <= $time3[0]) {
if (($hour == $time3[0] && $minute > $time3[1]) || ($hour == $time2[0] && $minute < $time2[1])) continue;
$datass = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=1min&size=1&symbol='.$release['symbol'],'get'),true);
if(!$datass || !isset($datass['data']) || empty($datass['data']))
{
$price = $coin['close'];
break;
}
$price = $datass['data'][0]['close'] * $vv;
break;
}
}
}
}
}else{
if(($params['type'] == 'more' && $params['price'] > $price) || ($params['type'] == 'free' && $params['price'] < $price))
{
$this->error(__('限价模式,请输入正确价格'));
}
$price = $params['price'];
}
$promisefee = ($promise_price>1)?$promise_price:sprintf("%.6f",$price*$promise_price*$params['num']*100/$params['multiple']);
//质押手续费折扣
$count_zhiya = Db::name("app_zhiya_user")->where("user_id", $this->auth->id)->where("status",1)->sum("num");
$zhiya_free_rebate = Config::get("site.zhiya_free_rebate");
$zhekou = 1;
foreach ($zhiya_free_rebate as $key => $value) {
if($count_zhiya > $key){
$zhekou = $value;
}
}
$fee = sprintf('%.6f',$promisefee*$contract_fee*$zhekou);
//是否开启APT手续费
if($this->auth->apy_pay == 1){
if($currency['num_lh'] < ($promisefee))
{
lopRedis($symbol);
$this->error(__('账号余额不足'));
}
//开启apt手续费支付
$apt_free = Config::get("site.apt_free");
$apy_curr = Db::name("app_currency")->where("id",2)->find();
$res_curr = Db::name("app_currency")->where("id",1)->find();
$apy_num = sprintf("%.6f",$fee*$res_curr['exchange']/$apy_curr['exchange']*$apt_free);
$fee = $apy_num;
$user_apy = Db::name('app_currency_user')->where('curr_id',2)->where('user_id',$this->auth->id)->find();
if($user_apy['num'] < $fee)
{
lopRedis($symbol);
$this->error(__('手续费不足'));
}
$detailed[] = [
'user_id' => $this->auth->id,
'curr_id' => $user_apy['curr_id'],
'price' => $fee,
'cart' => '2',
'type' => '6',
'serial_no' => time().Random::build('numeric',4),
'order_result' => 'result',
'description' => 'Contract Fee',
'createtime' => time(),
'notice' => 'Contract Fee',
'before_num' => $user_apy['num'],
'after_num' => $user_apy['num'] - $fee,
];
$lostnum = $currency['num_lh'] - $promisefee;
$fee_type = 1;
}else{
if($currency['num_lh'] < ($promisefee+$fee))
{
lopRedis($symbol);
$this->error(__('账号余额不足'));
}
$detailed[] = [
'user_id' => $this->auth->id,
'curr_id' => 1,
'price' => $fee,
'cart' => '2',
'type' => '6',
'serial_no' => time().Random::build('numeric',4),
'order_result' => 'result',
'description' => 'Contract Fee',
'createtime' => time(),
'notice' => 'Contract Fee',
'before_num' => $currency['num_lh'],
'after_num' => $currency['num_lh'] - $fee,
];
$lostnum = $currency['num_lh'] - $promisefee - $fee;
$fee_type = 1;
}
$contract = [
'user_id' => $this->auth->id,
'coin_id' => $coin['id'],
'symbol' => $coin['symbol'],
'type' => $params['type'],
'status' => ($params['cart'] == 'market')?'1':'0',
'price' => $price,
'num' => $params['num'],
'multiple' => $params['multiple'],
'promise_fee' => $promisefee,
'fee' => $fee,
'createtime' => time(),
'fee_type' => $fee_type,
];
$detailed[] = [
'user_id' => $this->auth->id,
'curr_id' => 1,
'price' => $promisefee,
'cart' => '2',
'type' => '6',
'serial_no' => time().Random::build('numeric',4),
'order_result' => 'result',
'description' => 'Contract Margin',
'createtime' => time(),
'notice' => 'Contract Margin',
'before_num' => $currency['num_lh'],
'after_num' => $lostnum,
];
Db::startTrans();
try {
Db::name('app_currency_user')->where('id',$currency['id'])->update(['num_lh'=>$lostnum,'updatetime'=>time()]);
if($this->auth->apy_pay == 1){
Db::name('app_currency_user')->where('id',$user_apy['id'])->update(['num'=>$user_apy['num'] - $fee]);
}
$ret1 = Db::name('app_contract')->insertGetId($contract);
Db::name('app_detailed')->insertAll($detailed);
lopRedis($symbol);
Db::commit();
$return = $contract;
$return['id'] = $ret1;
$return['createtime'] = date('Y-m-d H:i:s',$return['createtime']);
$this->success(__('提交成功'),$return);
} catch (Exception $e) {
Db::rollback();
$this->error(__('系统繁忙'));
}
}
//设置止盈止损
public function set_contract()
{
$params = $this->request->post();
if(!isset($params['contract_id']) || empty($params['contract_id']))
{
$this->error(__('请选择设置的合约订单'));
}
// if(!isset($params['zy_price']) || empty($params['zy_price']))
// {
// $this->error(__('请设置止盈价格'));
// }
// if(!isset($params['zs_price']) || empty($params['zs_price']))
// {
// $this->error(__('请设置止损价格'));
// }
$contract = Db::name('app_contract')
->where('user_id',$this->auth->id)
->where('id',$params['contract_id'])
->where('status','1')
->find();
if(!$contract)
{
$this->error(__('合约订单不存在或已平仓'));
}
if(!isset($params['zy_price']) || empty($params['zy_price']) || $params['zy_price'] <= 0){
$params['zy_price'] = $contract['zy_price'];
}
if($contract['type'] == 'more' && $params['zy_price'] < $contract['price'] && $params['zy_price'] > 0){
$this->error(__('请设置止盈价格'));
}
if($contract['type'] == 'free' && $params['zy_price'] > $contract['price'] && $params['zy_price'] > 0){
$this->error(__('请设置止盈价格'));
}
if(!isset($params['zs_price']) || empty($params['zs_price']) || $params['zs_price'] <= 0)
{
$params['zs_price'] = $contract['zs_price'];
}
if($contract['type'] == 'more' && $params['zs_price'] > $contract['price'] && $params['zs_price'] > 0){
$this->error(__('请设置止损价格'));
}
if($contract['type'] == 'free' && $params['zs_price'] < $contract['price'] && $params['zs_price'] > 0){
$this->error(__('请设置止损价格'));
}
$ret = Db::name('app_contract')
->where('id',$contract['id'])
->update(['zy_price'=>$params['zy_price'],'zs_price'=>$params['zs_price'],'updatetime'=>time()]);
if($ret)
{
$this->success(__('设置成功'));
}else{
$this->error(__('系统繁忙'));
}
}
//平仓
public function pingcang()
{
$params = $this->request->post();
if(!isset($params['contract_id']) || empty($params['contract_id']))
{
$this->error(__('请选择合约订单'));
}
$contract = Db::name('app_contract')
->where('user_id',$this->auth->id)
->where('id',$params['contract_id'])
->where('status','1')
->find();
if(!$contract)
{
$this->error(__('合约订单不存在或已平仓'));
}
//redis防重复点击
$symbol = "contract_pc" . $this->auth->id;
$submited = pushRedis($symbol);
if (!$submited) {
$this->error(__("操作频繁"));
}
$coin = Db::name('app_rate')->where('id',$contract['coin_id'])->find();
$pc_price = $coin['usdt'];
//调整价格
$tradejson = json_decode($coin['tradectrl_json'],true);
$jd = $coin['jd'];
$hour = date('H');
$minute = date('i');
$prices = $num = 0;
if($tradejson) {
foreach ($tradejson as $key => $value) {
$time1 = explode('-', $key);
$time2 = explode(':', $time1[0]);
$time3 = explode(':', $time1[1]);
$pricearr = explode('-', $value);
if ($hour >= $time2[0] && $hour <= $time3[0]) {
if (($hour == $time3[0] && $minute > $time3[1]) || ($hour == $time2[0] && $minute < $time2[1])) continue;
$prices = (float)$this->randomFloat($pricearr[0], $pricearr[1], $jd);
break;
}
}
if ($prices > 0) $pc_price = $prices;
}
//个人调整价格
$tradejsons = json_decode($this->auth->tradectrl_json,true);
if($tradejsons) {
$prices = 0;
foreach ($tradejsons as $key => $value) {
if($key == $coin['symbol']) {
$jsonarr = explode('|',$value);
if(!isset($jsonarr[0]) || !isset($jsonarr[1])) continue;
$time1 = explode('-',$jsonarr[0]);
$time2 = explode(':', $time1[0]);
$time3 = explode(':', $time1[1]);
$pricearr = explode('-', $jsonarr[1]);
if(!isset($pricearr[0]) || !isset($pricearr[1])) continue;
if ($hour >= $time2[0] && $hour <= $time3[0]) {
if (($hour == $time3[0] && $minute > $time3[1]) || ($hour == $time2[0] && $minute < $time2[1])) continue;
$prices = (float)$this->randomFloat($pricearr[0], $pricearr[1], $jd);
break;
}
}
}
if ($prices > 0) $pc_price = $prices;
}
$release = Db::name("app_curr_release")->where("symbol",$coin['symbol'])->find();
if($release){
$trademulte_json = json_decode($release['trademulte_json'],true);
if($trademulte_json && !$prices){
foreach ($trademulte_json as $kk => $vv) {
$time1 = explode('-', $kk);
$time2 = explode(':', $time1[0]);
$time3 = explode(':', $time1[1]);
if ($hour >= $time2[0] && $hour <= $time3[0]) {
if (($hour == $time3[0] && $minute > $time3[1]) || ($hour == $time2[0] && $minute < $time2[1])) continue;
$datass = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=1min&size=1&symbol='.$release['symbol'],'get'),true);
if(!$datass || !isset($datass['data']) || empty($datass['data']))
{
$pc_price = $coin['close'];
break;
}
$pc_price = $datass['data'][0]['close'] * $vv;
break;
}
}
}
}
$diffnum = $pc_price - $contract['price'];
if($contract['type'] == 'more')
{
//计算收益
// $income = $diffnum / 100 * $contract['num'] * $contract['multiple'] * Config::get('site.shizhi');
$income = $diffnum * $contract['num'] * Config::get('site.shizhi');
}else{
if($diffnum < 0) {
// $income = abs($diffnum) / 100 * $contract['num'] * $contract['multiple'] * Config::get('site.shizhi');
$income = abs($diffnum) * $contract['num'] * Config::get('site.shizhi');
}else{
// $income = 0 - $diffnum / 100 * $contract['num'] * $contract['multiple'] * Config::get('site.shizhi');
$income = 0 - $diffnum * $contract['num'] * Config::get('site.shizhi');
}
}
$income = sprintf('%.6f',$income);
$currency = Db::name('app_currency_user')
->field('num_lh,id')
->where('user_id',$this->auth->id)
->where('curr_id',1)->find();
$detailed = [
'user_id' => $this->auth->id,
'curr_id' => 1,
'price' => abs($income),
'cart' => '2',
'type' => '6',
'serial_no' => time().Random::build('numeric',4),
'order_result' => 'result',
'description' => 'Contract Close',
'createtime' => time(),
'notice' => 'Contract Close',
'before_num' => $currency['num_lh'],
'after_num' => $currency['num_lh'] + $income,
];
if($income >0 ){
$detailed['cart'] = '1';
$detailed['description'] = 'Contract Close Profit';
}else{
$detailed['cart'] = '2';
$detailed['description'] = 'Contract Close Loss';
}
$detaileds[] = $detailed;
$detaileds[] = [
'user_id' => $this->auth->id,
'curr_id' => 1,
'price' => $contract['promise_fee'],
'cart' => '1',
'type' => '6',
'serial_no' => time().Random::build('numeric',4),
'order_result' => 'result',
'description' => 'Contract Margin',
'createtime' => time(),
'notice' => 'Contract Margin',
'before_num' => $detailed['after_num'],
'after_num' => $detailed['after_num'] + $contract['promise_fee'],
];
$lostnum = sprintf("%.6f",($currency['num_lh'] + $income + $contract['promise_fee']));
Db::startTrans();
try {
$ret = Db::name('app_currency_user')
->where('id',$currency['id'])->update(['num_lh'=>$lostnum,'updatetime'=>time()]);
if(!$ret)
{
lopRedis($symbol);
Db::rollback();
$this->error(__('系统繁忙'));
}
$ret1 = Db::name('app_contract')->where('id',$contract['id'])
->update(['status'=>'2','pc_price'=>$pc_price,'pctime'=>time(),'income'=>$income]);
if(!$ret1)
{
lopRedis($symbol);
Db::rollback();
$this->error(__('系统繁忙'));
}
$ret2 = Db::name('app_detailed')->insertAll($detaileds);
if(!$ret2)
{
lopRedis($symbol);
Db::rollback();
$this->error(__('系统繁忙'));
}
lopRedis($symbol);
Db::commit();
$this->success(__('已平仓'));
} catch (Exception $e) {
Db::rollback();
$this->error(__('系统繁忙'));
}
}
//撤销订单
public function cancel_cang()
{
$params = $this->request->post();
if (!isset($params['contract_id']) || empty($params['contract_id'])) {
$this->error(__('请选择合约订单'));
}
$contract = Db::name('app_contract')
->where('user_id', $this->auth->id)
->where('id', $params['contract_id'])
->where('status', '0')
->find();
if (!$contract) {
$this->error(__('合约订单不存在或已平仓'));
}
//redis防重复点击
$symbol = "contract_cancel" . $this->auth->id;
$submited = pushRedis($symbol);
if (!$submited) {
$this->error(__("操作频繁"));
}
$currency = Db::name('app_currency_user')
->field('num_lh,id')
->where('user_id',$this->auth->id)
->where('curr_id',1)->find();
$detaileds = [
'user_id' => $this->auth->id,
'curr_id' => 1,
'price' => $contract['promise_fee'] + $contract['fee'],
'cart' => '1',
'type' => '6',
'serial_no' => time().Random::build('numeric',4),
'order_result' => 'result',
'description' => 'Contract Margin & Fee Refund',
'createtime' => time(),
'notice' => 'Contract Margin & Fee Refund',
'before_num' => $currency['num_lh'],
'after_num' => $currency['num_lh'] + $contract['promise_fee'] + $contract['fee'],
];
$lostnum = sprintf("%.6f",($currency['num_lh'] + $contract['promise_fee'] + $contract['fee']));
Db::startTrans();
try {
$ret = Db::name('app_currency_user')
->where('id',$currency['id'])->update(['num_lh'=>$lostnum,'updatetime'=>time()]);
if(!$ret)
{
lopRedis($symbol);
Db::rollback();
$this->error(__('系统繁忙'));
}
$ret1 = Db::name('app_contract')->where('id',$contract['id'])
->update(['status'=>'3','updatetime'=>time()]);
if(!$ret1)
{
lopRedis($symbol);
Db::rollback();
$this->error(__('系统繁忙'));
}
$ret2 = Db::name('app_detailed')->insert($detaileds);
if(!$ret2)
{
lopRedis($symbol);
Db::rollback();
$this->error(__('系统繁忙'));
}
lopRedis($symbol);
Db::commit();
$this->success(__('已撤销'));
} catch (Exception $e) {
Db::rollback();
$this->error(__('系统繁忙'));
}
}
//4位小数的随机数
function randomFloat($min = 0, $max = 10 , $localnum = 4)
{
if($localnum == 4) {
if ($max - $min <= 0.0002) {
return 0;
}
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.0001);
$num = $min + $rand;
$number = sprintf("%.4f", $num);
if($number == $min){
$number += 0.0001;
}
}else if($localnum == 5){
if ($max - $min <= 0.00002) {
return 0;
}
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.00001);
$num = $min + $rand;
$number = sprintf("%.5f", $num);
if($number == $min){
$number += 0.00001;
}
}else if($localnum == 6){
if ($max - $min <= 0.000002) {
return 0;
}
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.000001);
$num = $min + $rand;
$number = sprintf("%.6f", $num);
if($number == $min){
$number += 0.000001;
}
}else if($localnum == 2){
if ($max - $min <= 0.02) {
return 0;
}
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.01);
$num = $min + $rand;
$number = sprintf("%.2f", $num);
if($number == $min){
$number += 0.01;
}
}else if($localnum == 3){
if ($max - $min <= 0.001) {
return 0;
}
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.001);
$num = $min + $rand;
$number = sprintf("%.3f", $num);
if($number == $min){
$number += 0.001;
}
}
return $number;
}
/**
* 获取币种资料
*/
public function get_curr_con()
{
$symbol = $this->request->post("symbol");
$data = Db::name("app_rate")->field("id,symbol,name,logo_image,level,count_price,liutong_num,gongji_num,count_num,faxin_time,faxin_price,qukuai,desc,market_jd,price_jd,bb_type,close")
->where("symbol",$symbol)
->find();
if(empty($data)){
$this->error(__("未查询到币种信息"));
}
$data['jys'] = "An Piter";
$data['faxin_time'] = date("Y-m-d",$data['faxin_time']);
$data['logo_image'] = Config::get("site.image_url").$data['logo_image'];
$data['exchange_rate'] = Config::get("site.exchange_rate");
$data['h5_url'] = "https://h5.polyexchange.net/#/pages/transaction/index";
$this->success("ok",$data);
}
}