480 lines
19 KiB
PHP
480 lines
19 KiB
PHP
<?php
|
||
namespace app\adminapi\controller;
|
||
|
||
use app\adminapi\controller\BaseAdminController;
|
||
use app\common\model\finance\{RechargeRecord};
|
||
use app\common\model\user\{UserUdun,User};
|
||
use app\common\model\setting\RechargeMethod;
|
||
use app\common\service\{UtilsService,ConfigService};
|
||
use app\common\model\lh\{LhCoin};
|
||
use app\common\enum\YesNoEnum;
|
||
use think\facade\Db;
|
||
use Exception;
|
||
|
||
//清空数据
|
||
use app\common\model\withdraw\{WithdrawWallet,WithdrawMethod};
|
||
use app\common\model\setting\OperationLog;
|
||
use app\common\model\finance\{WithdrawRecord,UserFinance,UserTransferRecord};
|
||
use app\common\model\user\{UserTron,UserSigninRecord,UserSession,UserRelation,UserRelationAgent,UserKadan,UserGroupRecord,UserRewardRecord,UserNotice,UserInfo,UserLog,UserMineRecord};
|
||
use app\common\model\member\{UserMemberRecord};
|
||
use app\common\model\mall\{MallGoodsRecord};
|
||
use app\common\model\notice\{SmsLog,NoticeRecord,EmailRecord};
|
||
use app\common\model\goods\{GoodsRecord};
|
||
use app\common\model\auth\{AdminSession,AdminRole,AdminJobs,AdminDept,Admin,SystemRole,SystemRoleMenu};
|
||
use app\common\model\lh\{LhRecord};
|
||
use app\common\model\feedback\{FeedbackRecord};
|
||
use app\common\model\item\{ItemRecord};
|
||
|
||
|
||
/**
|
||
* 回调理控制器
|
||
* Class NotifyController
|
||
* @package app\adminapi\controller
|
||
*/
|
||
class NotifyController extends BaseAdminController
|
||
{
|
||
|
||
public array $notNeedLogin = ['market','clear','notify','test'];
|
||
|
||
/**
|
||
* @notes 清空数据,开发用,请注释掉
|
||
* @return string
|
||
* @throws \think\db\exception\DataNotFoundException
|
||
* @throws \think\db\exception\DbException
|
||
* @throws \think\db\exception\ModelNotFoundException
|
||
* @author BD
|
||
* @date 2024/04/13 10:54
|
||
*/
|
||
// public function clear(){
|
||
// Db::startTrans();
|
||
// try {
|
||
// //用户提现钱包
|
||
// $withdrawWallets = WithdrawWallet::select()->toArray();
|
||
// foreach ($withdrawWallets as &$withdrawWallet) {
|
||
// WithdrawWallet::destroy($withdrawWallet['id'],true);
|
||
// }
|
||
|
||
// //用户提现记录
|
||
// $withdrawRecords = WithdrawRecord::select()->toArray();
|
||
// foreach ($withdrawRecords as &$withdrawRecord) {
|
||
// WithdrawRecord::destroy($withdrawRecord['id'],true);
|
||
// }
|
||
|
||
// //用户Udun
|
||
// $userUduns = UserUdun::select()->toArray();
|
||
// foreach ($userUduns as &$userUdun) {
|
||
// UserUdun::destroy($userUdun['id'],true);
|
||
// }
|
||
|
||
// //用户波场钱包
|
||
// $userTrons = UserTron::select()->toArray();
|
||
// foreach ($userTrons as &$userTron) {
|
||
// UserTron::destroy($userTron['id'],true);
|
||
// }
|
||
|
||
// //资金明细
|
||
// $userFinances = UserFinance::select()->toArray();
|
||
// foreach ($userFinances as &$userFinance) {
|
||
// UserFinance::destroy($userFinance['id'],true);
|
||
// }
|
||
|
||
// //用户
|
||
// $users = User::select()->toArray();
|
||
// foreach ($users as &$user) {
|
||
// User::destroy($user['id'],true);
|
||
// }
|
||
|
||
// //角色
|
||
// $systemRoles = SystemRole::where('id <> 6')->select()->toArray();
|
||
// foreach ($systemRoles as &$systemRole) {
|
||
// SystemRole::destroy($systemRole['id'],true);
|
||
// }
|
||
|
||
// //短信记录
|
||
// $smsLogs = SmsLog::select()->toArray();
|
||
// foreach ($smsLogs as &$smsLog) {
|
||
// SmsLog::destroy($smsLog['id'],true);
|
||
// }
|
||
|
||
// //充值记录
|
||
// $rechargeRecords = RechargeRecord::select()->toArray();
|
||
// foreach ($rechargeRecords as &$rechargeRecord) {
|
||
// RechargeRecord::destroy($rechargeRecord['id'],true);
|
||
// }
|
||
|
||
// //通知记录
|
||
// $noticeRecords = NoticeRecord::select()->toArray();
|
||
// foreach ($noticeRecords as &$noticeRecord) {
|
||
// NoticeRecord::destroy($noticeRecord['id'],true);
|
||
// }
|
||
|
||
// //量化记录
|
||
// $lhRecords = LhRecord::select()->toArray();
|
||
// foreach ($lhRecords as &$lhRecord) {
|
||
// LhRecord::destroy($lhRecord['id'],true);
|
||
// }
|
||
|
||
// // //管理员
|
||
// // $admins = Admin::select()->toArray();
|
||
// // foreach ($admins as &$admin) {
|
||
// // Admin::destroy($admin['id'],true);
|
||
// // }
|
||
// //用户转账记录
|
||
// UserTransferRecord::where('1 = 1')->delete();
|
||
// //用户签到
|
||
// UserSigninRecord::where('1 = 1')->delete();
|
||
// //用户会话
|
||
// UserSession::where('1 = 1')->delete();
|
||
// //奖励活动记录
|
||
// UserRewardRecord::where('1 = 1')->delete();
|
||
// //用户关系
|
||
// UserRelation::where('1 = 1')->delete();
|
||
// //用户代理关系
|
||
// UserRelationAgent::where('1 = 1')->delete();
|
||
// //用户消息
|
||
// UserNotice::where('1 = 1')->delete();
|
||
// //挖矿记录
|
||
// UserMineRecord::where('1 = 1')->delete();
|
||
// //会员记录
|
||
// UserMemberRecord::where('1 = 1')->delete();
|
||
// //用户操作
|
||
// UserLog::where('1 = 1')->delete();
|
||
// //卡单规则
|
||
// UserKadan::where('1 = 1')->delete();
|
||
// //用户信息
|
||
// UserInfo::where('1 = 1')->delete();
|
||
// //用户分组记录
|
||
// UserGroupRecord::where('1 = 1')->delete();
|
||
// //角色菜单关系
|
||
// SystemRoleMenu::where('role_id <> 6')->delete();
|
||
// //清空日志
|
||
// OperationLog::where('1 = 1')->delete();
|
||
// //奖品记录
|
||
// MallGoodsRecord::where('1 = 1')->delete();
|
||
// //抢单记录
|
||
// GoodsRecord::where('1 = 1')->delete();
|
||
// //项目记录
|
||
// ItemRecord::where('1 = 1')->delete();
|
||
// //意见反馈记录
|
||
// FeedbackRecord::where('1 = 1')->delete();
|
||
// //邮件发送记录
|
||
// EmailRecord::where('1 = 1')->delete();
|
||
// //管理员会话
|
||
// AdminSession::where('1 = 1')->delete();
|
||
// //角色关联
|
||
// AdminRole::where('role_id <> 0')->delete();
|
||
// //岗位关联
|
||
// AdminJobs::where('1 = 1')->delete();
|
||
// // //部门关联
|
||
// AdminDept::where('1 = 1')->delete();
|
||
|
||
// //波场配置
|
||
// ConfigService::set('website', 'tron', ['api_key'=>'','url'=>'']);
|
||
// //翻译配置
|
||
// $translation = ConfigService::get('website', 'translation');
|
||
// $translation['app_key'] = '';
|
||
// $translation['sec_key'] = '';
|
||
// ConfigService::set('website', 'translation', $translation);
|
||
// //短信宝配置
|
||
// $smsbao = ConfigService::get('sms', 'smsbao');
|
||
// $smsbao['sign'] = '';
|
||
// $smsbao['username'] = '';
|
||
// $smsbao['api_key'] = '';
|
||
// ConfigService::set('sms', 'smsbao', $smsbao);
|
||
// //邮箱配置
|
||
// ConfigService::set('website', 'email', ['host'=>'','port'=>'','smtp'=>'','charset'=>'','nickname'=>'','username'=>'','password'=>'']);
|
||
// //优盾配置
|
||
// ConfigService::set('website', 'udun', ['merchant_no'=>'','api_key'=>'','gateway_address'=>'','callUrl'=>'接口域名/adminapi/notify/notify','debug'=>'0','is_open_df'=>'0','pay_min'=>'10','pay_min'=>'10','pay_max'=>'100']);
|
||
// //前台链接
|
||
// ConfigService::set('website', 'front_link', '');
|
||
|
||
// Db::commit();
|
||
// return '清理成功';
|
||
// } catch (\Exception $e) {
|
||
// Db::rollback();
|
||
// print_r($e->getMessage());
|
||
// self::$error = $e->getMessage();
|
||
// return '清理失败,请查看日志';
|
||
// }
|
||
// }
|
||
|
||
/**
|
||
* @notes 更新行情数据
|
||
* @return string
|
||
* @throws \think\db\exception\DataNotFoundException
|
||
* @throws \think\db\exception\DbException
|
||
* @throws \think\db\exception\ModelNotFoundException
|
||
* @author BD
|
||
* @date 2024/04/13 10:54
|
||
*/
|
||
public function market()
|
||
{
|
||
Db::startTrans();
|
||
try {
|
||
$marketData = UtilsService::curl_request('https://api.huobi.pro/market/tickers',[],'GET');
|
||
$marketData = json_decode($marketData,true);
|
||
|
||
if('ok' != $marketData['status']){
|
||
throw new \Exception('获取API失败');
|
||
|
||
}
|
||
$marketData = $marketData['data'];
|
||
|
||
//实时行情
|
||
$market = ConfigService::get('website', 'market');
|
||
|
||
//挖矿货币
|
||
$mine = ConfigService::get('website', 'mine');
|
||
|
||
//充值方式
|
||
$rechargeMethods = RechargeMethod::where(['is_show' => 1])
|
||
->where(" symbol_rate != '' AND type IN (1,5,7) ")
|
||
->order(['sort' => 'desc', 'id' => 'desc'])
|
||
->select()
|
||
->toArray();
|
||
|
||
//提现方式
|
||
$withdrawMethods = WithdrawMethod::where(['is_show' => 1])
|
||
->where(" symbol_rate != '' AND type IN (1) ")
|
||
->order(['sort' => 'desc', 'id' => 'desc'])
|
||
->select()
|
||
->toArray();
|
||
|
||
foreach ($marketData as $market_data) {
|
||
|
||
foreach ($market as &$item) {
|
||
if($item['symbol'] == $market_data['symbol']){
|
||
$item['price'] = $market_data['close'];
|
||
$item['rise'] = round((($market_data['close']) - ($market_data['open']))/($market_data['open']) *100,2);
|
||
}
|
||
}
|
||
|
||
foreach ($rechargeMethods as &$rechargeMethod) {
|
||
if($rechargeMethod['symbol_rate'] == $market_data['symbol']){
|
||
RechargeMethod::update([
|
||
'id' => $rechargeMethod['id'],
|
||
'rate' => 1/$market_data['close'],
|
||
]);
|
||
}
|
||
}
|
||
|
||
foreach ($withdrawMethods as &$withdrawMethod) {
|
||
if($withdrawMethod['symbol_rate'] == $market_data['symbol']){
|
||
WithdrawMethod::update([
|
||
'id' => $withdrawMethod['id'],
|
||
'rate' => 1/$market_data['close'],
|
||
]);
|
||
}
|
||
}
|
||
|
||
if($mine['symbol_rate'] != '' & $mine['symbol_rate'] == $market_data['symbol']){
|
||
$mine['rate'] = 1/$market_data['close'];
|
||
}
|
||
}
|
||
ConfigService::set('website', 'market', $market);
|
||
|
||
if($mine['symbol_rate'] != '') ConfigService::set('website', 'mine', $mine);
|
||
|
||
Db::commit();
|
||
return 'success';
|
||
} catch (\Exception $e) {
|
||
Db::rollback();
|
||
return $e;
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* @notes 优盾钱包交易回调
|
||
* @return string
|
||
* @throws \think\db\exception\DataNotFoundException
|
||
* @throws \think\db\exception\DbException
|
||
* @throws \think\db\exception\ModelNotFoundException
|
||
* @author BD
|
||
* @date 2024/04/13 10:54
|
||
*/
|
||
public function notify(){
|
||
Db::startTrans();
|
||
try {
|
||
$body = $_POST['body'];
|
||
$nonce = $_POST['nonce'];
|
||
$timestamp = $_POST['timestamp'];
|
||
$sign = $_POST['sign'];
|
||
//验证签名
|
||
$signCheck = UtilsService::udun_signature($body,$timestamp,$nonce);
|
||
if ($sign != $signCheck) {
|
||
throw new \Exception('签名错误');
|
||
return ;
|
||
}
|
||
$body = json_decode($body);
|
||
//$this->printLog("回调接收内容(tradeType):".$body->tradeType);
|
||
//$body->tradeType 1充币回调 2提币回调
|
||
if ($body->tradeType == 1) {
|
||
|
||
//$body->status 0待审核 1审核成功 2审核驳回 3交易成功 4交易失败
|
||
if($body->status == 3){
|
||
|
||
//业务处理
|
||
//查询钱包地址
|
||
$userUdun = UserUdun::where([
|
||
'address' => $body->address,
|
||
'main_coin_type' => $body->mainCoinType,
|
||
'coin_type' => $body->coinType
|
||
])
|
||
->findOrEmpty();
|
||
|
||
if ($userUdun->isEmpty()) {
|
||
throw new \Exception('地址不存在');
|
||
return ;
|
||
}
|
||
|
||
$method = RechargeMethod::where(['id' => $userUdun['method_id']])->findOrEmpty();
|
||
if ($method->isEmpty()) {
|
||
throw new \Exception('充值方式不存在');
|
||
return ;
|
||
}
|
||
|
||
$user = User::where(['id' => $userUdun['user_id']])->findOrEmpty();
|
||
if ($user->isEmpty()) {
|
||
throw new \Exception('用户不存在');
|
||
return ;
|
||
}
|
||
|
||
$money = ($body->amount) / pow(10,($body->decimals));
|
||
|
||
$order_amount_act = round($money / $method['rate'] , 2);
|
||
|
||
|
||
//判断最低充值金额
|
||
$config = ConfigService::get('website', 'trade');
|
||
if($order_amount_act < $config['recharge_min']){
|
||
return "success";
|
||
}
|
||
|
||
$data = [
|
||
'sn' => generate_sn(RechargeRecord::class, 'sn'),
|
||
'user_id' => $userUdun['user_id'],
|
||
'method_id' => $method['id'],
|
||
'amount' => $order_amount_act,
|
||
'amount_act' => round($money , $method['precision']),
|
||
'rate' => $method['rate'],
|
||
'symbol' => $method['symbol'],
|
||
'status' => 1,
|
||
];
|
||
|
||
$record = RechargeRecord::create($data);
|
||
|
||
//记录日志
|
||
UtilsService::user_finance_add(
|
||
$data['user_id'],
|
||
1,
|
||
1,
|
||
$data['amount'],
|
||
$data['sn'],
|
||
'',
|
||
1//冻结
|
||
);
|
||
|
||
//用户资金修改
|
||
UtilsService::user_money_change($data['user_id'], 1, $data['amount'],'user_money');
|
||
|
||
//充值金额增加
|
||
UtilsService::user_money_change($data['user_id'], 1, $data['amount'],'total_recharge');
|
||
|
||
//团队充值奖励
|
||
// UtilsService::team_reward_add($data['user_id'],$data['amount'],1);
|
||
|
||
//充值活动奖励
|
||
UtilsService::activity_reward_add($data['user_id'],$data['amount']);
|
||
|
||
//更新充值记录用户余额
|
||
$user = User::where(['id' => $data['user_id']])->findOrEmpty();
|
||
if ($user->isEmpty()) {
|
||
throw new \Exception('用户不存在');
|
||
}
|
||
|
||
//充值次数+1
|
||
User::update([
|
||
'id' => $user['id'],
|
||
'recharge_num' => $user['recharge_num'] + 1
|
||
]);
|
||
|
||
RechargeRecord::update([
|
||
'id' => $record['id'],
|
||
'user_money' => $user['user_money']
|
||
]);
|
||
|
||
Db::commit();
|
||
|
||
}
|
||
//无论业务方处理成功与否(success,failed),回调都认为成功
|
||
return "success";
|
||
}
|
||
elseif ($body->tradeType == 2) {
|
||
|
||
//$body->status 0待审核 1审核成功 2审核驳回 3交易成功 4交易失败
|
||
if($body->status == 0){
|
||
//业务处理
|
||
}
|
||
else if($body->status == 1){
|
||
//业务处理
|
||
}
|
||
else if($body->status == 3){
|
||
$record = WithdrawRecord::where(['account' => $body->address,'status' => 0,'status2' => 1,'sn' => $body->businessId])->findOrEmpty();
|
||
if ($record->isEmpty()) {
|
||
throw new \Exception('记录不存在');
|
||
return;
|
||
}
|
||
|
||
WithdrawRecord::update([
|
||
'id' => $record['id'],
|
||
'status' => 1
|
||
]);
|
||
//更新充值记录用户余额
|
||
$user = User::where(['id' => $record['user_id']])->findOrEmpty();
|
||
if (!$user->isEmpty()) {
|
||
//提现次数+1
|
||
User::update([
|
||
'id' => $user['id'],
|
||
'withdraw_num' => $user['withdraw_num'] + 1
|
||
]);
|
||
|
||
WithdrawRecord::update([
|
||
'id' => $record['id'],
|
||
'user_money' => $user['user_money'],
|
||
'remark_df' => '',
|
||
]);
|
||
}
|
||
|
||
Db::commit();
|
||
|
||
}
|
||
else if($body->status == 2 || $body->status == 4){
|
||
$record = WithdrawRecord::where(['account' => $body->address,'status' => 0,'status2' => 1,'sn' => $body->businessId])->findOrEmpty();
|
||
if ($record->isEmpty()) {
|
||
throw new \Exception('记录不存在');
|
||
return;
|
||
}
|
||
WithdrawRecord::update([
|
||
'id' => $record['id'],
|
||
'status2' => 0,
|
||
'remark_df' => 'udun代付失败',
|
||
]);
|
||
|
||
Db::commit();
|
||
}
|
||
//无论业务方处理成功与否(success,failed),回调都认为成功
|
||
return "success";
|
||
}
|
||
} catch (\Exception $e) {
|
||
Db::rollback();
|
||
self::setError($e->getMessage());
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public function test(){
|
||
|
||
|
||
}
|
||
} |