$code, 'message' => $msg, 'data' => $result ]; } public function __construct() { $this->redis=$this->getRedis(); //$this->getTrcWalletAddress(); } /** * */ private function getTrcWalletAddress() { $redis_key="TRCWallet"; $num=WalletListModel::where([ 'user_id'=>0, 'wallet_type'=>'TRC-20' ])->count(); $flag=$this->redis->exists($redis_key); if($num<50 && empty($flag)){ $this->redis->setex($redis_key,120,2); $queuename = 'app\home\job\Wallet'; Queue::push($queuename, "test", 'Wallet'); } } /** * @desc 获取发送的短信内容 * @param int $type * @return array * @throws \Exception */ public function getSmsContent(int $type = 1): array { $code = random_int(1000,9999); $subject = "your code is [$code], valid for 5 minutes"; return ['subject' => $subject, 'code' => $code]; } /** * @desc 根据类型获取要发送的邮件内容 * @param int $type * @return array * @throws \Exception */ public function getEmailContent(int $type = 1): array { $code = random_int(1000,9999); $title = 'Verification Code'; $subject = "your code is [$code], valid for 5 minutes, please do not reply to this email"; return ['title' => $title, 'subject' => $subject, 'code' => $code]; } /** * 生成13位用户号 * @return string * @throws InvalidArgumentException */ public function getUniqUserNo(): string { $code = 's'; $code .= date('ymd'); // s230629 while (true) { $code .= rand(100000, 999999); // redis 去重 $exist = Cache::store('redis')->get($code); // 存储有效期为距离明天还要多久 $expire = strtotime('tomorrow') - time(); if (!$exist) { Cache::store('redis')->set($code, 1, $expire); break; } } return $code; } /** * 生成12位随机邀请码 * @param $length * @return string * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ function getUniqInviteCode($length = 6) { $characters = '1234567890abcdefghijklmnpqrstwxyzABCDEFGHIJKLMNPQRSTWXYZ'; $inviteCode = ''; while (true) { for ($i = 0; $i < $length; $i++) { $index = rand(0, strlen($characters) - 1); $inviteCode .= $characters[$index]; } // 查询去重 $user = UserModel::where('invite_code', $inviteCode)->value('user_id'); if(empty($user)){ break; } // 查询去重 $agent = AdminModel::where('invite_code', $inviteCode)->value('id'); if(empty($agent)){ break; } } return $inviteCode; } /** * 生成12位随机邀请码 * @return string * @throws InvalidArgumentException */ public function getUniqInviteCodeBack(): string { $code = ''; $arr = [ '9','t','6', 'k', 'h', '8', '5','f', 'm', 'd', 's', '6' ]; // redis 去重 while (true) { $rand_num = time().rand(10,99); for($i = 0; $iget($code); if (!$exist) { Cache::store('redis')->set($code, 1, 5); break; } } return $code; } /** * @desc 获取客户端ip * @return mixed|string */ public function getClientRealIp() { $ip = ''; if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ipArray = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $ip = trim($ipArray[0]); } elseif (!empty($_SERVER['HTTP_X_FORWARDED'])) { $ip = $_SERVER['HTTP_X_FORWARDED']; } elseif (!empty($_SERVER['HTTP_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_FORWARDED_FOR']; } elseif (!empty($_SERVER['HTTP_FORWARDED'])) { $ip = $_SERVER['HTTP_FORWARDED']; } elseif (!empty($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } /** * @desc 判断是否为禁止邮箱 * @param $email * @return bool */ public function checkForbidEmail($email): bool { $emailType = explode('@', $email); $denyEmailType = explode(',', env('EMAIL.DENY_EMAIL_TYPE')); if (in_array($emailType[1], $denyEmailType)) { return true; } return false; } /** * @desc 判断是否为禁止的国家码 * @param $nation * @return bool */ public function checkForbidNation($nation) { $denyNation = explode(',', env('NATION.DENY_NATION')); if (in_array($nation, $denyNation)) { return true; } return false; } /** * @desc 判断获取验证码是否已经达到上限 * @param $key * @return bool * @throws InvalidArgumentException */ public function checkGetNoTradeCodeNum($key): bool { $num = env('LOGIN.PER_IP_GET_CODE_NUM'); if(!Cache::store('redis')->has($key)){ return false; } $hadNum = Cache::store('redis')->get($key); if($hadNum >= $num ){ return true; } return false; } /** * @desc 判断获取验证码是否已经达到上限 * @param $key * @return bool * @throws InvalidArgumentException */ public function checkGetNoTradeCodeNumPhone($key): bool { $num = env('LOGIN.PER_PHONE_GET_CODE_NUM'); if(!Cache::store('redis')->has($key)){ return false; } $hadNum = Cache::store('redis')->get($key); if($hadNum >= $num ){ return true; } return false; } /** * @desc 更新已经获取的key的次数 存在就累加 1 不存在就新增 并设置有效期 * @param $key * @return void * @throws InvalidArgumentException */ public function updateHadGetCodeNumCache($key) { if(!Cache::store('redis')->has($key)){ $expire = 24 * 60 * 60; Cache::store('redis')->set($key, 1, $expire); }else{ Cache::store('redis')->inc($key, 1); } } /** * @desc 将验证码存进redis 并设置有效期 * @param $key * @param $code * @param $seconds * @return void * @throws InvalidArgumentException */ public function insertCodeToCache($key, $code, $seconds) { Cache::store('redis')->set($key, $code, $seconds); } /** * @desc 验证验证码 * @param $key * @param $code * @return bool * @throws InvalidArgumentException */ public function checkCode($key, $code) { $cacheCode = Cache::store('redis')->get($key); if(empty($cacheCode)){ return false; } return $cacheCode == $code; } /** * @desc 验证是否已经达到每日注册上限 * @param $key * @return bool * @throws InvalidArgumentException */ public function checkRegisterLimit($key) { $setCanRegisterNumPerDayPerIp = env('LOGIN.PER_IP_REGISTER_NUM_EVERY_DAY'); if(!Cache::store('redis')->has($key)){ return false; } $hadNum = Cache::store('redis')->get($key); return $hadNum >= $setCanRegisterNumPerDayPerIp; } /** * @desc 更新已经注册的数量 * @param $key * @return void * @throws InvalidArgumentException */ public function updateHadRegisterNumCache($key) { if(!Cache::store('redis')->has($key)){ $expire = 24 * 60 * 60; Cache::store('redis')->set($key, 1, $expire); } Cache::store('redis')->inc($key, 1); } /** * @desc 根据邀请码获取邀请人的id * @param $inviteCode * @return int|mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function getParentIdByInviteCode($inviteCode) { $parentUser = UserModel::getUserByInviteCode($inviteCode); if(empty($parentUser)){ return 0; } return $parentUser['user_id']; } /** * @desc 删除指定key * @param $key * @return void * @throws InvalidArgumentException */ public function delCache($key) { Cache::store('redis')->delete($key); } public function setUserTokenCache($token, $userId) { // 清除之前的token 设置新的token $userTokenKey = 'USER:TOKEN:'.$userId; // 根据用户id 查找token $oldToken = Cache::store('redis')->get($userTokenKey); if($oldToken){ $oldTokenKey = 'TOKEN:USER:'.$oldToken; Cache::store('redis')->delete($oldTokenKey); } $tokenKey = 'TOKEN:USER:'.$token; // 根据token查找用户id $expired = 30 * 24 * 60 * 60; // 由中间件自动续期 Cache::store('redis')->set($tokenKey, $userId, $expired); Cache::store('redis')->set($userTokenKey, $token, $expired); } public function delUserTokenCache($userId) { // user -> token $userTokenKey = 'USER:TOKEN:'.$userId; // 根据用户id 查找token $token = Cache::store('redis')->get($userTokenKey); Cache::store('redis')->delete($token); // token -> user $tokenUser = 'TOKEN:USER:'.$token; Cache::store('redis')->delete($tokenUser); } public function setUserLevel($userId,$level_info) { $key='USER:LEVEL:'.$userId; // 由中间件自动续期 Cache::store('redis')->set($key, $level_info); } public function initSetting(){ $this->initTradeFeeSetting(); $this->initBrokerageRegSetting(); $this->initUserLevelSetting(); $this->initContractSetting(); $this->initDigitalList(); $this->initDrawalSetting(1); return $this->toData(0,'ok'); } public function initDigitalList(){ $result=DigitalListModel::getMarketList([ 'page'=>1, 'page_size'=>2000 ]); foreach ($result['list'] as $val){ $key="DIGITAL:LIST:".$val['name']; $this->redis->del($key); $this->redis->hMSet($key,$val); } return $result['list']; } public function getDigitalList(){ $data=$this->redis->keys('DIGITAL:LIST:*'); $list=[]; foreach ($data as $val){ $list[]=$this->redis->hGetAll($val); } return [ 'total'=>count($data), 'list'=>$list, ]; } public function initDrawalSetting($type=0) { $key="DRAWAL:FEE:SETTING"; if($type==1){ $info=DrawalSettingModel::getDrawalFee(); $this->redis->hMset($key,$info); }else{ return $this->redis->hGetAll($key); } } public function initContractSetting() { $list=ContractListMode::getMarketFaceList(); foreach ($list as $val){ $key="CONTRACT:LIST:".$val['name']; $this->redis->del($key); $this->redis->hMSet($key,$val); } return $list; } public function getContractFaceList($type=0) { $list=$this->redis->keys('CONTRACT:LIST:*'); //var_dump($list); if(empty($list)){ $list=$this->initContractSetting(); if($type){ return $list; }else{ return [ 'total'=>count($list), 'list'=>$list ]; } }else{ $data=[]; foreach ($list as $val){ $data[]=$this->redis->hGetAll($val); } if($type){ return $data; }else{ return [ 'total'=>count($data), 'list'=>$data ]; } } } public function initBrokerageRegSetting() { //注册返佣 $brokerage_reg_key='BROKERAGE:REG:SETTING'; //开仓返佣 $brokerage_buy_key='BROKERAGE:BUY:SETTING'; //平仓返佣 $brokerage_sale_key='BROKERAGE:SALE:SETTING'; $list=BrokerageSettingModel::getBrokerageSetting(); foreach ($list as $val){ switch ($val['brok_type']){ case 1: $this->redis->hMset($brokerage_buy_key,$val); break; case 2: $this->redis->hMset($brokerage_sale_key,$val); break; default: $this->redis->hMset($brokerage_reg_key,$val); break; } } } /** * 获取返佣配置 * @return void */ public function getBrokerageRegSetting() { //注册返佣 $brokerage_reg_key='BROKERAGE:REG:SETTING'; $res= $this->redis->hGetAll($brokerage_reg_key); if(empty($res)){ $this->initBrokerageRegSetting(); $res= $this->redis->hGetAll($brokerage_reg_key); } return $res; } public function initUserLevelSetting() { $list=UserLevelModel::getUserLevelList(); foreach ($list as $item){ $key='USER:LEVEL:'.$item['user_id']; $this->redis->hMset($key,$item); } } public function initTradeFeeSetting($market_type=0) { $digital_fee_key='TRADE:FEE:DIGITAL'; $contract_fee_key='TRADE:FEE:CONTRACT'; $us_stock_fee_key='TRADE:FEE:US_STOCK'; $idn_stock_fee_key='TRADE:FEE:IDN_STOCK'; $mys_stock_fee_key='TRADE:FEE:MYS_STOCK'; $tha_stock_fee_key='TRADE:FEE:THA_STOCK'; $in_stock_fee_key='TRADE:FEE:IN_STOCK'; $SGD_stock_fee_key='TRADE:FEE:SGD_STOCK'; $hk_stock_fee_key='TRADE:FEE:HK_STOCK'; $uk_stock_fee_key='TRADE:FEE:UK_STOCK'; $fur_stock_fee_key='TRADE:FEE:FUR_STOCK'; $eur_stock_fee_key='TRADE:FEE:EUR_STOCK'; $brl_stock_fee_key='TRADE:FEE:BR_STOCK'; $jp_stock_fee_key='TRADE:FEE:JP_STOCK'; $forex_fee_key='TRADE:FEE:FOREX'; if($market_type==0){ $trade_fee_list=FeeSettingModel::getTradeFeeById(0); foreach ($trade_fee_list as $item){ switch ($item['market_type']){ case 1: $this->redis->del($digital_fee_key); $this->redis->hMset($digital_fee_key,$item); break; case 2: $this->redis->del($contract_fee_key); $this->redis->hMset($contract_fee_key,$item); break; case 3: $this->redis->del($us_stock_fee_key); $this->redis->hMset($us_stock_fee_key,$item); break; case 4: $this->redis->del($idn_stock_fee_key); $this->redis->hMset($idn_stock_fee_key,$item); break; case 5: $this->redis->del($mys_stock_fee_key); $this->redis->hMset($mys_stock_fee_key,$item); break; case 6: $this->redis->del($tha_stock_fee_key); $this->redis->hMset($tha_stock_fee_key,$item); break; case 7: $this->redis->del($in_stock_fee_key); $this->redis->hMset($in_stock_fee_key,$item); break; case 9: $this->redis->del($SGD_stock_fee_key); $this->redis->hMset($SGD_stock_fee_key,$item); break; case 12: $this->redis->del($hk_stock_fee_key); $this->redis->hMset($hk_stock_fee_key,$item); break; case 14: $this->redis->del($uk_stock_fee_key); $this->redis->hMset($uk_stock_fee_key,$item); break; case 15: $this->redis->del($fur_stock_fee_key); $this->redis->hMset($fur_stock_fee_key,$item); break; case 16: $this->redis->del($eur_stock_fee_key); $this->redis->hMset($eur_stock_fee_key,$item); break; case 17: $this->redis->del($brl_stock_fee_key); $this->redis->hMset($brl_stock_fee_key,$item); break; case 18: $this->redis->del($jp_stock_fee_key); $this->redis->hMset($jp_stock_fee_key,$item); break; case 19: $this->redis->del($forex_fee_key); $this->redis->hMset($forex_fee_key,$item); break; } } return $trade_fee_list; }else{ $res=[]; switch ($market_type){ case 1: $res= $this->redis->hGetAll($digital_fee_key); break; case 2: $res=$this->redis->hGetAll($contract_fee_key); break; case 3: $res=$this->redis->hGetAll($us_stock_fee_key); break; case 4: $res=$this->redis->hGetAll($idn_stock_fee_key); break; case 5: $res=$this->redis->hGetAll($mys_stock_fee_key); break; case 6: $res=$this->redis->hGetAll($tha_stock_fee_key); break; case 7: $res=$this->redis->hGetAll($in_stock_fee_key); break; case 9: $res=$this->redis->hGetAll($SGD_stock_fee_key); break; case 12: $res=$this->redis->hGetAll($hk_stock_fee_key); break; case 14: $res=$this->redis->hGetAll($uk_stock_fee_key); break; case 15: $res=$this->redis->hGetAll($fur_stock_fee_key); break; case 16: $res=$this->redis->hGetAll($eur_stock_fee_key); break; case 17: $res=$this->redis->hGetAll($brl_stock_fee_key); break; case 18: $res=$this->redis->hGetAll($jp_stock_fee_key); break; case 19: $res=$this->redis->hGetAll($forex_fee_key); break; } return $res; } } private function checkEmpty($value1, $value2, $value3) :bool { $count = 0; // 用于计数非空值的个数 if (!empty($value1)) { $count++; } if (!empty($value2)) { $count++; } if (!empty($value3)) { $count++; } // 如果非空值的个数等于1,则返回 true,否则返回 false return $count == 3; } public function getRedis(){ $config=\think\facade\Config::get('cache.stores.redis'); $redis=new \Redis(); try{ $redis->connect($config['host'], $config['port'],10); }catch (\Exception $exception){ echo 'redis连接失败'; } if(!empty($config['password'])){ $redis->auth($config['password']); } $redis->select($config['select']); return $redis; } /** * 生成随机订单号 * @param int $length * @return false|string */ public function generateOrderNumber(int $length=20) { $prefix = date('ymd'); // 可选的订单号前缀,如需要可以在这里设置 $timestamp = time(); $randomNum = mt_rand(10000, 99999); // 使用 mt_rand() 生成一个四位的随机数 // 将时间戳和随机数组合起来作为订单号的一部分 $orderNumber = $prefix . $timestamp . $randomNum; // 如果订单号的长度超过指定的长度,则截取前面指定长度的部分 if (strlen($orderNumber) > $length) { $orderNumber = substr($orderNumber, 0, $length); } return $orderNumber; } public function getCapitalTypeList($type_arr = []) { $type_list = [ 1 => [ 'zh-cn' => '充值', 'zh-zh' => '充值', 'zh-us' => 'Deposit', 'zh-cs' => 'Vklad', 'zh-sp' => 'Recarga', 'zh-eu' => 'Recarga', 'zh-th' => 'เติมเงิน', 'zh-in' => 'लबालब भरना', 'zh-jp' => 'チャージ', ], 2 => [ 'zh-cn' => '提現', 'zh-zh' => '提现', 'zh-us' => 'Withdrawal', 'zh-cs' => 'Výběr', 'zh-sp' => 'Retiro', 'zh-eu' => 'Retirada', 'zh-th' => 'ถอน', 'zh-in' => 'निकालना', 'zh-jp' => '引き出し', ], 3 => [ 'zh-cn' => '買入', 'zh-zh' => '买入', 'zh-us' => 'Buy', 'zh-cs' => 'Nákup', 'zh-sp' => 'Compra', 'zh-eu' => 'Compra', 'zh-th' => 'ซื้อ', 'zh-in' => 'खरीदना', 'zh-jp' => '買い入れ', ], 4 => [ "zh-cn" => "賣出", 'zh-zh' => '卖出', 'zh-us' => 'Sell', 'zh-cs' => 'Prodej', 'zh-sp' => 'Venta', 'zh-eu' => 'Venda', 'zh-th' => 'ขาย', 'zh-in' => 'बेचना', 'zh-jp' => '売り出し', ], 5 => [ "zh-cn" => "凍結", 'zh-zh' => '冻结', 'zh-us' => 'Freeze', 'zh-cs' => 'Zamknout', 'zh-sp' => 'Congelar', 'zh-eu' => 'Congelar', 'zh-th' => 'แช่แข็ง', 'zh-in' => 'जमाना', 'zh-jp' => '凍結', ], 6 => [ "zh-cn" => "解冻", 'zh-zh' => '解冻', 'zh-us' => 'Unfreeze', 'zh-cs' => 'Odemknout', 'zh-sp' => 'Descongelar', 'zh-eu' => 'Descongelar', 'zh-th' => 'ละลาย', 'zh-in' => 'पिघलना', 'zh-jp' => '解凍', ], 7 => [ "zh-cn" => "帳戶轉出", 'zh-zh' => '账户转出', 'zh-us' => 'Transfer Out', 'zh-cs' => 'Převod ven', 'zh-sp' => 'Transferencia Saliente', 'zh-eu' => 'Transferência para Fora', 'zh-th' => 'บัญชีโอนออก', 'zh-in' => 'खाता स्थानांतरण', 'zh-jp' => '振り出し', ], 8 => [ "zh-cn" => "帳戶轉入", 'zh-zh' => '账户转入', 'zh-us' => 'Transfer In', 'zh-cs' => 'Převod dovnitř', 'zh-sp' => 'Transferencia Entrante', 'zh-eu' => 'Transferência para Dentro', 'zh-th' => 'การโอนบัญชี', 'zh-in' => 'खाता स्थानांतरण', 'zh-jp' => '振り込み', ], 9 => [ "zh-cn" => "註冊返佣", 'zh-zh' => '注册返佣', 'zh-us' => 'Registration Rebate', 'zh-cs' => 'Registrační sleva', 'zh-sp' => 'Reembolso de Registro', 'zh-eu' => 'Reembolso de Registro', 'zh-th' => 'ส่วนลดการลงทะเบียน', 'zh-in' => 'पंजीकरण में छूट', 'zh-jp' => '登録ボーナス', ], 10 => [ "zh-cn" => "開倉返佣", 'zh-zh' => '开仓返佣', 'zh-us' => 'Open Position Rebate', 'zh-cs' => 'Sleva na otevřenou pozici', 'zh-sp' => 'Reembolso de Apertura', 'zh-eu' => 'Reembolso de Apertura', 'zh-th' => 'ส่วนลดค่าคอมมิชชั่นสำหรับการเปิดตำแหน่ง', 'zh-in' => 'पद खोलने के लिए कमीशन में छूट', 'zh-jp' => '取引ボーナス', ], 11 => [ "zh-cn" => "平倉返佣", 'zh-zh' => '平仓返佣', 'zh-us' => 'Close Position Rebate', 'zh-cs' => 'Sleva na uzavřenou pozici', 'zh-sp' => 'Reembolso de Cierre', 'zh-eu' => 'Reembolso de Fechamento', 'zh-th' => 'ส่วนลดค่าคอมมิชชั่นสำหรับการปิดสถานะ', 'zh-in' => 'समापन स्थिति के लिए कमीशन छूट', 'zh-jp' => '決済ボーナス', ], 12 => [ "zh-cn" => "調賬加錢", 'zh-zh' => '调账加钱', 'zh-us' => 'Adjustment - Add Funds', 'zh-cs' => 'Úprava - Přidat peníze', 'zh-sp' => 'Ajuste - Agregar Fondos', 'zh-eu' => 'Ajuste - Adicionar Fundos', 'zh-th' => 'ปรับบัญชีและเพิ่มเงิน', 'zh-in' => 'खाता समायोजित करें और पैसे जोड़ें', 'zh-jp' => '調整入金', ], 13 => [ "zh-cn" => "調賬減錢", 'zh-zh' => '调账减钱', 'zh-us' => 'Adjustment - Decrease Funds', 'zh-cs' => 'Úprava - Odečíst peníze', 'zh-sp' => 'Ajuste - Restar Fondos', 'zh-eu' => 'Ajuste - Deduzir Fundos', 'zh-th' => 'ปรับบัญชีและลดเงิน', 'zh-in' => 'खाता समायोजित करें और पैसे कम करें', 'zh-jp' => '調整出金', ], 14 => [ "zh-cn" => "扣手续费", "zh-zh" => "扣手续费", 'zh-us' => 'Deduct Commission', 'zh-cs' => 'Odečíst provizi', 'zh-sp' => 'Deducir Comisión', 'zh-eu' => 'Deduzir Comissão', 'zh-th' => 'การหักค่าธรรมเนียมการจัดการ', 'zh-in' => 'कटौती प्रक्रियाएँ', 'zh-jp' => '手数料を差し引く', ], 15 => [ "zh-cn" => "申购扣费", "zh-zh" => "申購扣費", 'zh-us' => 'Subscription deduction fee', 'zh-cs' => 'Poplatek za předplatbu', 'zh-sp' => 'Tarifa de deducción de suscripción', 'zh-eu' => 'Taxa de dedução de subscrição', 'zh-th' => 'การหักค่าสมัครสมาชิก', 'zh-in' => 'सदस्यता कटौती', 'zh-jp' => '申し込み手数料を差し引く', ], 16 => [ "zh-cn" => "申购手续费", "zh-zh" => "申購手續費", 'zh-us' => 'Subscription handling fee', 'zh-cs' => 'Poplatek za zpracování předplatby', 'zh-sp' => 'Tarifa de gestión de suscripción', 'zh-eu' => 'Taxa de processamento de subscrição', 'zh-th' => 'การหักค่าสมัครสมาชิก', 'zh-in' => 'सदस्यता प्रबंधन शुल्क', 'zh-jp' => '申込手数料', ], 17 => [ "zh-cn" => "申购退费", "zh-zh" => "申購退費", 'zh-us' => 'Refund of subscription', 'zh-cs' => 'Vrácení předplatby', 'zh-sp' => 'Reembolso de la suscripción', 'zh-eu' => 'Reembolso da subscrição', 'zh-th' => 'การคืนเงินค่าสมัครสมาชิก', 'zh-in' => 'सदस्यता वापसी', 'zh-jp' => '申し込み返金', ], 18 => [ "zh-cn" => "申购退手续费", "zh-zh" => "申購退手續費", 'zh-us' => 'Refund of subscription handling fee', 'zh-cs' => 'Vrácení poplatku za zpracování předplatby', 'zh-sp' => 'Reembolso de la tarifa de gestión de suscripción', 'zh-eu' => 'Reembolso da taxa de processamento de subscrição', 'zh-th' => 'ค่าธรรมเนียมการดำเนินการคืนเงินการสมัครสมาชิก', 'zh-in' => 'सदस्यता वापसी प्रबंधन शुल्क', 'zh-jp' => '申し込み手数料の返金', ], 19 => [ "zh-cn" => "基金返利", "zh-zh" => "基金返利", 'zh-us' => 'Fund rebates', 'zh-cs' => 'Slevy z fondu', 'zh-sp' => 'Deducción de fondos', 'zh-eu' => 'Descontos de fundos', 'zh-th' => 'เงินคืน', 'zh-in' => 'फोन्ड फिनु बेट', 'zh-jp' => 'ファンドリベート', ], ]; if (empty($type_arr)) { return $type_list; } else { $result = []; foreach ($type_arr as $v) { $result[$v] = $type_list[$v]; } return $result; } } }