$params['id']])->findOrEmpty(); $order_amount_act = round($params['money'] * $method['rate'] , $method['precision']); $account = $method['account']; //充值类型为 自定义地址 if($method['type'] == 7){ $address = $params['address']; $addressArr = explode(PHP_EOL, $method['address']); if (!in_array($address, $addressArr)) { throw new \Exception('network.parameterAbnormality');//参数异常 } //查询会员等级 $member_id = UtilsService::get_user_member_id($params['user_id']); if ($member_id < $method['member_id']) { throw new \Exception('network.parameterAbnormality');//参数异常 } $account = $address; } $data = [ 'sn' => generate_sn(RechargeRecord::class, 'sn'), 'user_id' => $params['user_id'], 'method_id' => $params['id'], 'amount' => $params['money'], 'amount_act' => $order_amount_act, 'account' => $account, 'voucher' => $params['voucher'], 'rate' => $method['rate'], 'symbol' => $method['symbol'], ]; $order = RechargeRecord::create($data); return [ 'order_id' => (int)$order['id'], 'from' => 'recharge' ]; } catch (\Exception $e) { self::setError($e->getMessage()); return false; } } /** * @notes 充值配置 * @param $userId * @return array * @author BD * @date 2024/2/24 16:56 */ public static function config($userId) { $config = ConfigService::get('website', 'trade'); //查询需要绑定提现账户才可提现 $need_bing_wallet = 0; if ($config['need_bing_wallet'] == 1) { $count = WithdrawWallet::where(['user_id' => $userId])->count(); if($count == 0){ $need_bing_wallet = 1; } } return [ 'min' => $config['recharge_min'], 'need_bing_wallet' => $need_bing_wallet ]; } /** * @notes 充值方式 * @param $params * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author BD * @date 2024/10/13 10:53 */ public static function getAllMethod(array $params) { try { //查询语言 $language = Language::where(['symbol' => $params['lang']])->findOrEmpty(); if ($language->isEmpty()) { throw new \Exception('network.parameterAbnormality');//参数异常 } //查询会员等级 $member_id = UtilsService::get_user_member_id($params['user_id']); $field = ['id','type','name','logo']; $methods = RechargeMethod::field($field) ->where(['is_show' => YesNoEnum::YES]) ->whereIn('lang_id', [0,$language['id']]) ->where(" member_id = 0 OR ( member_id !=0 AND member_id <= $member_id ) ") ->order(['sort' => 'desc', 'id' => 'desc']) ->select() ->toArray(); return $methods; } catch (\Exception $e) { self::setError($e->getMessage()); return false; } } /** * @notes 充值方式详情 * @param $id * @param $lang * @return array * @author BD * @date 2024/9/20 17:09 */ public static function methodDetail($id,$lang) { try { //查询语言 $language = Language::where(['symbol' => $lang])->findOrEmpty(); if ($language->isEmpty()) { throw new \Exception('network.parameterAbnormality');//参数异常 } $field = ['id','type','name','logo','account','is_voucher','img as qrcode','bank_name','bank_username','symbol','rate','precision']; $method = RechargeMethod::field($field) ->where(['is_show' => YesNoEnum::YES]) ->where(['id' => $id]) ->whereIn('lang_id', [0,$language['id']]) ->findOrEmpty() ->toArray(); if (empty($method)) { throw new \Exception('network.parameterAbnormality');//参数异常 } return $method; } catch (\Exception $e) { self::setError($e->getMessage()); return false; } } /** * @notes 充值方式详情-优盾 * @param array $params * @return array * @author BD * @date 2024/9/20 17:09 */ public static function methodDetailUdun(array $params) { try { //查询语言 $language = Language::where(['symbol' => $params['lang']])->findOrEmpty(); if ($language->isEmpty()) { throw new \Exception('network.parameterAbnormality');//参数异常 } $method = RechargeMethod::where(['is_show' => YesNoEnum::YES]) ->where(['id' => $params['id']]) ->findOrEmpty() ->toArray(); if (empty($method)) { throw new \Exception('network.parameterAbnormality');//参数异常 } //查看是否创建地址 $userUdun = UserUdun::where(['user_id' => $params['user_id'],'method_id' => $method['id']]) ->findOrEmpty() ->toArray(); $address = ""; $qrcode = ""; $data = []; if (empty($userUdun)) { //查看是否创建主钱包相同地址 $userUdun2 = UserUdun::where(['user_id' => $params['user_id'],'main_coin_type' => $method['main_coin_type']]) ->findOrEmpty() ->toArray(); if (empty($userUdun2)) { //没有创建则创建地址 $udunDispatch = UtilsService::get_udunDispatch(); $result = $udunDispatch->createAddress($method['main_coin_type']); $address = $result['data']['address']; $qrcode = UtilsService::get_qrcode($address); }else{ $address = $userUdun2['address']; $qrcode = $userUdun2['qrcode']; } //保存地址 $data = [ 'user_id' => $params['user_id'], 'method_id' => $method['id'], 'address' => $address, 'qrcode' => $qrcode, 'main_coin_type' => $method['main_coin_type'], 'coin_type' => $method['coin_type'], ]; UserUdun::create($data); }else{ $data['address'] = $userUdun['address']; $data['qrcode'] = $userUdun['qrcode']; } return [ 'address' => $data['address'], 'qrcode' => $data['qrcode'], 'protocol' => $method['protocol'], 'logo' => $method['logo'], 'name' => $method['name'], ]; } catch (\Exception $e) { self::setError($e->getMessage()); return false; } } /** * @notes 充值方式详情-波场 * @param array $params * @return array * @author BD * @date 2024/9/20 17:09 */ public static function methodDetailTron(array $params) { try { //查询语言 $language = Language::where(['symbol' => $params['lang']])->findOrEmpty(); if ($language->isEmpty()) { throw new \Exception('network.parameterAbnormality');//参数异常 } $method = RechargeMethod::where(['is_show' => YesNoEnum::YES]) ->where(['id' => $params['id']]) ->findOrEmpty() ->toArray(); if (empty($method)) { throw new \Exception('network.parameterAbnormality');//参数异常 } //查看是否创建地址 $userTron = UserTron::where(['user_id' => $params['user_id'],'method_id' => $method['id']]) ->findOrEmpty() ->toArray(); $data = [ 'user_id' => $params['user_id'], 'method_id' => $method['id'], ]; if (empty($userTron)) { //创建地址 $tronData = [ 'action' => 'reg' ]; $response = UtilsService::usdt_request($tronData, 'POST'); $response = json_decode($response, true); if($response['code'] == 200){ $data['address'] = $response['data']['addr']; $data['qrcode'] = UtilsService::get_qrcode($data['address']); $data['key'] = $response['data']['key']; $data['last_time'] = time(); UserTron::create($data); }else{ throw new \Exception('network.parameterAbnormality');//参数异常 } }else{ $data['address'] = $userTron['address']; $data['qrcode'] = $userTron['qrcode']; // 更新最后使用时间 UserTron::where(['id' => $userTron['id']])->update(['last_time' => time()]); } return [ 'address' => $data['address'], 'qrcode' => $data['qrcode'], 'protocol' => $method['protocol'], 'logo' => $method['logo'], 'name' => $method['name'], ]; } catch (\Exception $e) { self::setError($e->getMessage()); return false; } } /** * @notes 充值方式详情-自定义地址 * @param array $params * @return array * @author BD * @date 2024/9/20 17:09 */ public static function methodDetailAddress(array $params) { try { //查询语言 $language = Language::where(['symbol' => $params['lang']])->findOrEmpty(); if ($language->isEmpty()) { throw new \Exception('network.parameterAbnormality');//参数异常 } $method = RechargeMethod::where(['is_show' => YesNoEnum::YES]) ->where(['id' => $params['id']]) ->findOrEmpty() ->toArray(); if (empty($method)) { throw new \Exception('network.parameterAbnormality');//参数异常 } //随机获取地址 $addressArr = explode(PHP_EOL, $method['address']); return [ 'avail_num' => $method['avail_num'], 'address' => $addressArr[array_rand($addressArr)], 'protocol' => $method['protocol'], 'logo' => $method['logo'], 'name' => $method['name'], 'symbol' => $method['symbol'], 'rate' => $method['rate'], 'precision' => $method['precision'], 'is_voucher' => $method['is_voucher'], 'date' => date('Y-m-d'), ]; } catch (\Exception $e) { self::setError($e->getMessage()); return false; } } /** * @notes 获取常用充值金额 * @param $lang * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author BD * @date 2024/10/13 10:53 */ public static function getCommonMoney($lang) { $config = ConfigService::get('website', 'trade'); return explode("\n", $config['common_money']); } }