setScenario('frontend'); $data = Yii::$app->getRequest()->post(); foreach (['type', 'in_time', 'mt4_login', 'mt4_login_pwd', 'member_id'] as $field) { unset($data[$field]); } $model->setAttributes($data); $model->type = 0; $model->in_time = DateTimeHelper::microtime_float(); if ($model->save()) { return $this->outJson(1, $model->getAttributes(), 'OK'); } else { return $this->outJson(0, [], $model->getErrors()); } } /** * 模拟账户申请 * @return \yii\web\Response */ public function actionOpendemo() { $model = new OpenDemoForm(); $data = Yii::$app->getRequest()->post(); $model->setAttributes($data); if ($model->openDemo()) { return $this->outJson(1, ['login' => $model->getLogin(), 'password' => $model->getPassword()], 'OK'); } else { return $this->outJson(0, [], $model->getErrors()); } } /** * 代理商开户申请附属表记录 * @return \yii\web\Response */ public function actionOpenRecord() { $model = new IbOpenRecord(); $data = Yii::$app->getRequest()->post(); $model->setAttributes($data); $model->in_time = DateTimeHelper::microtime_float(); if ($model->save()) { return $this->outJson(1, $model->getAttributes(), 'OK'); } else { return $this->outJson(0, [], $model->getErrors()); } } /** * 开户申请列表 */ public function actionGetOpenList() { $data = \Yii::$app->getRequest()->get(); $data['page'] = isset($data['page']) ? max(intval($data['page']), 1) : 1; $data['pageSize'] = isset($data['pageSize']) ? intval($data['pageSize']) : 20; $data['search'] = isset($data['search']) ? trim($data['search']) : ''; $data['orderBy'] = isset($data['orderBy']) ? trim($data['orderBy']) : 'id desc'; $data = ValidatorHelper::validateData($data, [ ['page', 'integer', 'min' => 1], ['pageSize', 'integer', 'min' => 1], ['orderBy', 'string'], ], $errors); if ($data == false) { return $this->outJson(0, '', $errors); } $query = Open::find()->orderBy($data['orderBy']); if (!empty($data['search'])) { $query->andFilterWhere([ 'or', ['like', 'email', $data['search']], ['like', 'name', $data['search']], ['like', 'rid', $data['search']], ]); } $result = PaginationHelper::queryPage($query, $data['page'], $data['pageSize']); return $this->outJson(1, $result); } /** * 查看开户申请详情 * @return \yii\web\Response */ public function actionView() { $rs = []; $data = Yii::$app->getRequest()->get(); $data['id'] = isset($data['id']) ? (int)$data['id'] : ''; $data['open_type'] = isset($data['open_type']) ? (int)$data['open_type'] : ''; if ($data['open_type'] == 1) { $open = Open::find()->where(['id' => $data['id']])->one(); $rs['open'] = $open; if (!empty($open['member_id'])) { $member = Member::find()->where(['id' => $open['member_id']])->one(); $rs['member'] = $member; } $config = Config::findOne(1); $rs['levers'] = explode(',', $config->lever); $rs['groups'] = explode(',', $config->mt4_groups); $rs['randomCode'] = RandomHelper::getRandomString(6); } else { $openQuery = Open::find()->alias('op') ->select([ 'op.*', 'opr.ref_id', 'opr.bank_name', 'opr.bank_province', 'opr.bank_city', 'opr.bank_district', 'opr.bank_branch', 'opr.bank_card_no', 'opr.collect_name', 'opr.bank_swift_code' ]) ->leftJoin(IbOpenRecord::tableName().' opr', 'op.id = opr.open_id') ->andWhere(['op.id' => $data['id']]) ->asArray() ->one(); if ($openQuery) { $openQuery['bank_name'] = $this->bankNameByBankCode($openQuery['bank_name']); } $rs['open'] = $openQuery; if (!empty($openQuery['member_id'])) { $member = Member::find()->where(['id' => $openQuery['member_id']])->one(); $rs['member'] = $member; } $config = Config::findOne(1); $rs['levers'] = explode(',', $config->lever); $rs['groups'] = explode(',', $config->mt4_groups); $rs['randomCode'] = RandomHelper::getRandomString(6); } return $this->outJson(1, $rs); } /** * 删除开户申请 * @return \yii\web\Response */ public function actionOpenDelete() { $data = Yii::$app->getRequest()->post(); $data['id'] = isset($data['id']) ? (int)$data['id'] : ''; $admin_id = isset($data['admin_id']) ? (int)$data['admin_id'] : ''; $open_info = Open::findById($data['id']); $open_info = json_encode($open_info); LogHelper::writeLog($admin_id,$data['id'],'Open/delete','删除开户用户',$open_info); $rs = Open::deleteAll(['id' => $data['id']]); return $this->outJson(1, $rs); } /** * 审核开户申请 * @return \yii\web\Response */ public function actionOpenAction() { $data = Yii::$app->getRequest()->get(); $data['id'] = isset($data['id']) ? (int)$data['id'] : ''; $data['type'] = isset($data['type']) ? (int)$data['type'] : ''; $open = Open::findOne(['id' => $data['id']]); if (empty($data['type']) || empty($data['id'])) { return $this->outJson(0, [], '参数错误'); } if($open->type == 2 || $open->type == 3){ return $this->outJson(0,[],'操作超时,请刷新页面重试'); } $open->type = $data['type']; if ($data['type'] == 1) { $open->mt4_login_pwd = RandomHelper::getRandomStringForMt4(); $open->mt4_view_pwd = RandomHelper::getRandomStringForMt4(); } if ($data['type'] == 3) { $config = Config::findOne(1); $paramArray = [ 'name' => $open->name, ]; // 发送邮件 MailHelper::sendMail("账号申请审核通知", $open->email, $paramArray, '', $config->mail_reject_apply); } $rs = $open->save(); return $this->outJson(1, $rs); } /** * 开通MT4账户 * @return \yii\web\Response */ public function actionOpenAccount() { $data = Yii::$app->getRequest()->post(); $data['login'] = isset($data['login']) ? (int)$data['login'] : ''; $data['group'] = isset($data['group']) ? $data['group'] : ''; $data['lever'] = isset($data['lever']) ? (int)$data['lever'] : ''; $data['openId'] = isset($data['openId']) ? (int)$data['openId'] : ''; $open = Open::findOne(['id' => $data['openId']]); if (!empty($open) && $open->mt4_login != null) { return $this->outJson(0, [], '已开户,请刷新页面'); } if ($data['login'] == null) { $data['login'] = 0; } if (empty($data['lever'])) { return $this->outJson(0, [], '请选择杠杆'); } $password = $data['mt4LoginPwd']; $passwordInvestor = $data['mt4ViewPwd']; if (empty($password)) { return $this->outJson(0, [], '请填写登录密码'); } if (empty($passwordInvestor)) { return $this->outJson(0, [], '请填写观摩密码'); } //如果是代理 /* if ($open->open_type == 2) { $rid = $open->rid; if (!$rid) { return $this->outJson(0, [], '上级代理不能为空'); } $membereInfo = Member::findByLogin($rid); if (!$membereInfo) { return $this->outJson(0, [], '上级代理不存在'); } //开户组别设置跟上级一样 $data['group'] = $membereInfo['group_sn']; } */ $rid = $open->rid; if (!$rid) { return $this->outJson(0, [], '上级代理不能为空'); } $membereInfo = Member::findByLogin($rid); if (!$membereInfo) { return $this->outJson(0, [], '上级代理不存在'); } //开户组别设置跟上级一样 $data['group'] = $membereInfo['group_sn']; $configData = Config::find()->asArray()->one(); $mt4ManagerIp = trim($configData['mt4_manager_ip']); $mt4ManagerPort = trim($configData['mt4_manager_port']); $passwordPhone = $open->mt4_view_pwd; $email = $open->email; $phone = ""; $leverage = $data['lever']; $country = "中国"; $ie = new IdCardInfoExtractorHelper($open->id_card); $state = $ie->getProvince(); $city = ""; $address = $open->address; $zipCode = ""; $id = $open->id_card; $agentAccount = 0; // $login = 0; $login = MtKit::openUser($mt4ManagerIp, $mt4ManagerPort, $data['login'], $password, $passwordInvestor, $passwordPhone, $open->name, $data['group'], $email, $phone, $leverage, $country, $state, $city, $address, $zipCode, $id, $agentAccount); if ($login != 0) { $open->mt4_login = $login; $open->mt4_login_pwd = $password; $open->mt4_view_pwd = $passwordInvestor; if ($open->save()) { return $this->outJson(1, ['id' => $open->id], '操作成功'); } } return $this->outJson(0, $login, '开户失败'); } /** * 加入xtrader账户 * @return \yii\web\Response */ public function actionOpenMember() { $request = \Yii::$app->getRequest()->post(); $openId = isset($request['openId']) ? (int)$request['openId'] : ''; $username = isset($request['username']) ? $request['username'] : ''; $password = isset($request['password']) ? $request['password'] : ''; $name = isset($request['name']) ? $request['name'] : ''; $idNo = isset($request['idNo']) ? $request['idNo'] : ''; $isSendMail = isset($request['isSendMail']) ? $request['isSendMail'] : ''; $isSendSms = isset($request['isSendSms']) ? $request['isSendSms'] : ''; $address = isset($request['address']) ? $request['address'] : ''; $groupSn = isset($request['group_sn']) ? $request['group_sn'] : ''; $open = Open::findOne(['id' => $openId]); if (empty($username) || empty($password) || empty($name) || empty($idNo)) { return $this->outJson(0, [], '请填写完整表单'); } if (!(new IdcardValidatorHelper())->checkIdCard($idNo)) { // return $this->outJson(0, [], '身份证号码格式错误'); } $rid = $open->rid; if ($rid) { $membereInfo = Member::findByLogin($rid); if (!$membereInfo) { return $this->outJson(0, [], '上级代理不存在'); } } $member = new Member(); $m = $member->findByUserName($username, null); if ($m != null) { return $this->outJson(0, [], '邮箱已经存在'); } $member->type = 1; $member->logins = (string)$open->mt4_login; $member->username = strtolower($username); $member->password = md5($password); $member->name = $name; $member->id_no = $idNo; $ie = new IdCardInfoExtractorHelper($idNo); $member->birthday = $ie->getBirthday(); $member->group_sn = ($groupSn) ? $groupSn : $membereInfo['group_sn']; if (($ie->getGender()) == "男") { $member->gender = 1; } else { $member->gender = 2; } if (empty($address)) { $member->address = $ie->getProvince(); } else { $member->address = $address; } $member->in_time = DateTimeHelper::microtime_float(); //开启事务 $tr = Member::getDb()->beginTransaction(); try { if (!$member->save()) { throw new \Exception($member->getErrors()); } //更新开户信息 $ret = Open::updateAll(['member_id' =>$member->id, 'type' => 2 ], "id={$open->id}"); if(!$ret) { throw new \Exception($open->getErrors()); } //保存直客信息 if ($rid) { $membereInfo = Member::findByLogin($rid); $userMebere = new UserMember(); $userMebere->login = $open->mt4_login; $userMebere->member_id = $membereInfo['id']; $userMebere->name = $membereInfo['name']; $userMebere->in_time = DateTimeHelper::microtime_float(); if (!$userMebere->save()) { throw new \Exception($userMebere->getErrors()); } } //提交事务 $tr->commit(); } catch (\Exception $e) { //回滚 $tr->rollBack(); return $this->outJson(0, [], $e->getMessage()); } $config = Config::findOne(1); $paramArray = [ 'email' => $username, 'name' => $name, 'mt4Login' => $open->mt4_login, 'mt4LoginPwd' => $open->mt4_login_pwd, 'mt4ViewPwd' => $open->mt4_view_pwd, 'xTradePwd' => $password, ]; if (!empty($isSendMail)) { // 发送邮件 MailHelper::sendMail("恭喜您,您的账户已成功开通", $username, $paramArray, '', $config->mail_open); }else{ //不即时发送邮件,生成邮件记录,事后补发 $mailRecord = new MailRecord(); $mailRecord->content = $this->replaceVariable($config->mail_open,$paramArray); $mailRecord->receiver = $username; $mailRecord->status = 0; $mailRecord->subject = "恭喜您,您的账户已成功开通"; $mailRecord->in_time = DateTimeHelper::microtime_float(); $mailRecord->mail_num = 0; $mailRecord->save(); } return $this->outJson(1, $member, '操作成功'); } /** * 将模板中的变量替换为入参 * @param $content string * @param $paramArray array * @return string */ private function replaceVariable($content, $paramArray) { if (!empty($content) && !empty($paramArray)) { foreach ($paramArray as $key => $value) { $variable='${'.$key.'}'; $variable1 = '#{'.$key.'}'; $variable2 = '#'.$key.'#'; if (is_null($value)) { continue; } while (strpos($content, $variable, 0) > -1) { $content = str_replace($variable, $value, $content); } while (strpos($content, $variable1, 0) > -1) { $content = str_replace($variable1, $value, $content); } while (strpos($content, $variable2, 0) > -1) { $content = str_replace($variable2, $value, $content); } } } return $content; } /** * 加入xbroker账户 * @return \yii\web\Response */ public function actionOpenIbMember() { $request = \Yii::$app->getRequest()->post(); $openId = isset($request['openId']) ? (int)$request['openId'] : ''; $ibOldLoginName = isset($request['ib_old_login_name']) ? $request['ib_old_login_name'] : ''; $logins = isset($request['logins']) ? $request['logins'] : ''; $username = isset($request['username']) ? $request['username'] : ''; $password = isset($request['password']) ? $request['password'] : ''; $name = isset($request['name']) ? $request['name'] : ''; $idNo = isset($request['idNo']) ? $request['idNo'] : ''; $ref_id = isset($request['ref_id']) ? $request['ref_id'] : ''; $address = isset($request['address']) ? $request['address'] : ''; $bankName = isset($request['bank_name']) ? $request['bank_name'] : ''; $bankProvince = isset($request['bank_province']) ? $request['bank_province'] : ''; $bankCity = isset($request['bank_city']) ? $request['bank_city'] : ''; $bankDistrict = isset($request['bank_district']) ? $request['bank_district'] : ''; $bankBranch = isset($request['bank_branch']) ? $request['bank_branch'] : ''; $bankCardNo = isset($request['bank_card_no']) ? $request['bank_card_no'] : ''; $collectName = isset($request['collect_name']) ? $request['collect_name'] : ''; $bankSwiftCode = isset($request['bank_swift_code']) ? $request['bank_swift_code'] : ''; $isSendMail = isset($request['isSendMail']) ? $request['isSendMail'] : ''; $groupSn = isset($request['group_sn']) ? $request['group_sn'] : ''; $open = Open::findOne(['id' => $openId]); if (empty($logins) || empty($ibOldLoginName) || empty($username) || empty($password) || empty($name) || empty($idNo) || empty($ref_id)) { return $this->outJson(0, [], '请填写完整表单'); } if (!(new IdcardValidatorHelper())->checkIdCard($idNo)) { //return $this->outJson(0, [], '身份证号码格式错误'); } $member = new Member(); $m = $member->findByUserName($username, null); if ($m != null) { return $this->outJson(0, [], '邮箱已经存在'); } $ref = Member::find()->where(['id' => $ref_id])->limit(1)->asArray()->one(); $member->type = 2; $member->logins = (string)$logins; $member->username = strtolower($username); $member->password = md5($password); $member->name = $name; $member->id_no = $idNo; $member->ref_id = $ref_id; $member->ref_path = $ref['ref_path'] . $ref_id . ','; $member->ib_old_login_name = $ibOldLoginName; $ie = new IdCardInfoExtractorHelper($idNo); $member->birthday = $ie->getBirthday(); $member->group_sn = ($groupSn) ? $groupSn : $ref['group_sn']; if (($ie->getGender()) == "男") { $member->gender = 1; } else { $member->gender = 2; } if (empty($address)) { $member->address = $ie->getProvince(); } else { $member->address = $address; } $member->in_time = DateTimeHelper::microtime_float(); //开启事务 $tr = Member::getDb()->beginTransaction(); try { if (!$member->save()){ throw new \Exception($member->getErrors()); } //更新开户信息 $ret = Open::updateAll(['member_id' =>$member->id, 'type' => 2 ], "id={$open->id}"); if(!$ret) { throw new \Exception($open->getErrors()); } //保存代理信息 if ($open->rid) { $membereInfo = Member::findByLogin($open->rid); $userMebere = new UserMember(); $userMebere->login = $open->mt4_login; $userMebere->member_id = $membereInfo['id']; $userMebere->name = $membereInfo['name']; $userMebere->in_time = DateTimeHelper::microtime_float(); if (!$userMebere->save()) { throw new \Exception($userMebere->getErrors()); } } // 代理商-member-银行卡信息 if ($bankName && $bankBranch && $collectName) { $memberBank = new MemberBankInfo(); $memberBank->member_id = 82950; $memberBank->is_enable = 1; $memberBank->bank_name = $bankName; $memberBank->bank_branch = $bankBranch; $memberBank->bank_swift_code = $bankSwiftCode; $memberBank->bank_card_no = $bankCardNo; $memberBank->bank_province = $bankProvince; $memberBank->bank_city = $bankCity; $memberBank->bank_district = $bankDistrict; $memberBank->name = $collectName; $memberBank->create_time = DateTimeHelper::microtime_float(); if (!$memberBank->save()) { throw new \Exception($memberBank->getErrors()); } } //提交事务 $tr->commit(); } catch (\Exception $e) { //回滚 $tr->rollBack(); return $this->outJson(0, [], $e->getMessage()); } $config = Config::findOne(1); if (!empty($isSendMail)) { $paramArray = [ 'email' => $username, 'name' => $name, 'mt4Login' => $open->mt4_login, 'mt4LoginPwd' => $open->mt4_login_pwd, 'mt4ViewPwd' => $open->mt4_view_pwd, 'xBrokerPwd' => $password, 'login' => $logins, 'id' => $member->id, ]; // 发送邮件 MailHelper::sendMail("代理商".$name." X Broker后台开设成功通知", $username, $paramArray, '', $config->mail_ib_open); } return $this->outJson(1, $member, '操作成功'); } public function actionUpdateOpen() { $request = \Yii::$app->getRequest()->post(); $openId = isset($request['openId']) ? (int)$request['openId'] : ''; $login = $request['login'] ? (int)$request['login'] : null; $mt4LoginPwd = isset($request['mt4LoginPwd']) ? $request['mt4LoginPwd'] : ''; $mt4ViewPwd = isset($request['mt4ViewPwd']) ? $request['mt4ViewPwd'] : ''; $open = Open::findOne(['id' => $openId]); if ($open->mt4_login != null) { return $this->outJson(0, [], '已开户,请刷新当前页'); } $open->mt4_login = $login; $open->mt4_login_pwd = $mt4LoginPwd; $open->mt4_view_pwd = $mt4ViewPwd; $open->save(); $this->outJson(1, ['id' => $openId], '提交成功'); } /** * 银行code和银行名称的对应 * @param $bank_code * @return string */ protected function bankNameByBankCode($bank_code) { $bank_name = ''; switch ($bank_code) { case '102': $bank_name = '工商银行'; break; case '103': $bank_name = '农业银行'; break; case '104': $bank_name = '中国银行'; break; case '105': $bank_name = '建设银行'; break; case '308': $bank_name = '招商银行'; break; case '301': $bank_name = '交通银行'; break; case '305': $bank_name = '民生银行'; break; case '302': $bank_name = '中信银行'; break; case '303': $bank_name = '光大银行'; break; case '309': $bank_name = '兴业银行'; break; case '4031000': $bank_name = '北京银行'; break; case '306': $bank_name = '广发银行'; break; case '304': $bank_name = '华夏银行'; break; case '403': $bank_name = '邮储银行'; break; case '310': $bank_name = '浦发银行'; break; case '4105840': $bank_name = '平安银行'; break; case '4012900': $bank_name = '上海银行'; break; case '4233310': $bank_name = '杭州银行'; break; case '316': $bank_name = '浙商银行'; break; case '4504520': $bank_name = '青岛银行'; break; case '4083320': $bank_name = '宁波银行'; break; case '4341100': $bank_name = '天津银行'; break; case '4478210': $bank_name = '兰州银行'; break; case '4243010': $bank_name = '南京银行'; break; case '4296510': $bank_name = '成都银行'; break; case '322': $bank_name = '上海农商银行'; break; case '4021000': $bank_name = '北京农村商业银行'; break; } return $bank_name; } }