| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- <?php
- /**
- * api实名认证控制器
- */
- namespace app\api\controller\v1;
- use app\common\model\Members;
- use app\common\model\MembersTwo;
- use think\Db;
- use think\Log;
- use think\Session;
- use app\common\model\Setting;
- use app\common\model\Game;
- class Identity extends UserCenter
- {
- public function _initialize()
- {
- parent::_initialize();
- }
- /**
- * 实名认证页面
- */
- public function index()
- {
- $res = $this->checkVerify();
- $this->assign('isVerify', isset($res['isVerified']) ? $res['isVerified'] : '');
- $this->assign('verify_info', isset($res['membersTwoInfo']) ? $res['membersTwoInfo'] : '');
- //判断是否已经实名认证
- $settingModel = new Setting;
- $restrictExplain = $settingModel::getSetting('GAME_RESTRICT_EXPLAIN');
- $this->assign('restrictExplain', $restrictExplain);
- $this->assign('username', $this->username);
- return $this->fetch();
- }
- /**
- * 实名认证-麻花网络防沉迷相关规则
- */
- public function rule()
- {
- $settingModel = new Setting;
- $restrictExplain = $settingModel::getSetting('GAME_RESTRICT_EXPLAIN');
- $this->assign('restrictExplain', $restrictExplain);
- return $this->fetch();
- }
- /**
- * 实名认证处理
- */
- public function Verify()
- {
- $membersModel = new Members();
- $membersTwoModel = new MembersTwo();
- $username = input('post.username'); //用户名
- $data = [
- 'realname' => input('post.realname', '', 'trim'),
- 'idcard' => input('post.idcard', '', 'trim'),
- ];
- $result = $this->validate($data, [
- //['username', 'require|isEmpty', '参数不完整|用户名不能为空'],
- ['realname', 'require|length:2,10|chs', '请输入真实姓名| 姓名长度为 2 - 10|姓名只能是汉字'],
- ['idcard', 'require|identityNumber', '请输入身份证号码|身份证号码格式不正确'],
- ]);
- //参数校验
- if (true !== $result) {
- return $this->json('', 0, $result);
- }
- // 通过身份证验证年龄
- if (!isMeetAgeByIDCard($data['idcard'], 12, 120)) {
- return $this->json('', 0, '您未满足年龄要求(12-120岁),无法通过认证');
- }
- $member_id = $membersModel->where(['username' => $this->username])->value('id');
- if (empty($member_id)) {
- return $this->json('', 0, '用户不存在');
- }
- $gameInfo = (new Game())->where(['id' => Session::get('game_id')])->find();
- if ($gameInfo['game_auth_type'] == 1) { //中宣部实名认证
- if (!trim($gameInfo['game_bizid'])) {
- return $this->json('', 0, '该游戏未配置游戏备案识别码');
- }
- $gameAccountInfo = model('Subaccount')->where(['game_id' => Session::get('game_id'), 'member_id' => $member_id])->find();
- if ($gameAccountInfo) {
- if ($gameAccountInfo['auth_status'] <> 3) {
- vendor('authSdk.Authentication', '.class.php');
- $auth = new \Authentication();
- $result = $auth->check(trim($gameInfo['game_bizid']), $gameAccountInfo['member_id'] . '-' . $gameAccountInfo['id'], $data['realname'], $data['idcard']);
- if ($result['errcode'] <> 0) {
- if ($result['errcode'] == 2004) {
- return $this->json('', 0, '不能频繁调用中宣部实名认证接口,请稍后再重新发起认证');
- } else {
- return $this->json('', 0, '调用接口异常:' . $result['errmsg']);
- }
- } else {
- $resultData = $result['data']['result'];
- if ($resultData['status'] == 0) {
- $updAccountData = array();
- $updAccountData['auth_type'] = 1;
- $updAccountData['real_name'] = trim($data['realname']);
- $updAccountData['idcard_num'] = trim($data['idcard']);
- $updAccountData['auth_status'] = 3;
- $updAccountData['auth_pi'] = $resultData['pi'];
- $updAccountData['last_auth_time'] = time();
- $updResult = model('Subaccount')->where(['id' => $gameAccountInfo['id']])->update($updAccountData);
- if ($updResult) {
- $mark = $this->checkPlayLogin(input('post.idcard', '', 'trim'));
- file_put_contents(RUNTIME_PATH . "1.txt", "结果1:" . $mark . "\n", FILE_APPEND);
- return $this->json(["mark" => $mark], 1, '认证成功');
- } else {
- return $this->json('', 0, '实名认证结果保存异常');
- }
- } else if ($resultData['status'] == 1) {
- $updAccountData = array();
- $updAccountData['auth_type'] = 1;
- $updAccountData['real_name'] = trim($data['realname']);
- $updAccountData['idcard_num'] = trim($data['idcard']);
- $updAccountData['auth_status'] = 1;
- $updAccountData['auth_pi'] = $resultData['pi'];
- $updAccountData['last_auth_time'] = time();
- $updResult = model('Subaccount')->where(['id' => $gameAccountInfo['id']])->update($updAccountData);
- if ($updResult) {
- $mark = $this->checkPlayLogin(input('post.idcard', '', 'trim'));
- file_put_contents(RUNTIME_PATH . "1.txt", "结果2:" . $mark . "\n", FILE_APPEND);
- return $this->json(["mark" => $mark], 2, '您的实名认证请求已提交审核,请耐心等待认证结果');
- } else {
- return $this->json('', 0, '您的实名认证请求已提交审核,保存异常');
- }
- } else {
- return $this->json('', 0, '未通过实名认证');
- }
- }
- } else {
- $mark = $this->checkPlayLogin(input('post.idcard', '', 'trim'));
- file_put_contents(RUNTIME_PATH . "1.txt", "结果3:" . $mark . "\n", FILE_APPEND);
- return $this->json(["mark" => $mark], 1, '您已实名认证成功');
- }
- } else {
- return $this->json('', 0, '您尚未创建游戏账号');
- }
- } else if ($gameInfo['game_auth_type'] == 2) { //通过上级调用中宣部认证
- $gameAccountInfo = model('Subaccount')->where(['game_id' => Session::get('game_id'), 'member_id' => $member_id])->find();
- if ($gameAccountInfo) {
- return $this->json('', 0, '该认证方式尚未开放');
- } else {
- return $this->json('', 0, '您尚未创建游戏账号');
- }
- } else { //平台实名认证
- //实名认证数据更新
- if ($membersTwoModel->where(['userid' => $member_id])->find()) {
- $flag = $membersTwoModel->update($data, ['userid' => $member_id]);
- } else {
- $data['userid'] = $member_id;
- $data['username'] = $this->username;
- $data['create_time'] = time();
- $flag = $membersTwoModel->insert($data);
- }
- // 插入玩家历史记录
- Db::table('cy_member_history')->insert([
- 'userid' => $member_id,
- 'password' => $data['realname'].' '.$data['idcard'].' '.$this->username,
- 'mobile' => '',
- 'ip' => request()->ip(),
- 'create_time' => time(),
- ]);
- if ($flag) {
- $mark = $this->checkPlayLogin(input('post.idcard', '', 'trim'));
- file_put_contents(RUNTIME_PATH . "1.txt", "结果4:" . $mark . "\n", FILE_APPEND);
- return $this->json(["mark" => $mark], 1, '认证成功');
- } else {
- return $this->json('', 0, '认证失败');
- }
- }
- }
- /***
- * 检测
- */
- public function checkPlayLogin($idcard)
- {
- $flag = 0;
- if (isMeetAgeByIDCard($idcard, 12, 18)) {
- $flag = 1;
- }
- return $flag;
- }
- /**
- * 判断是否节假日
- */
- public function getHoliday($date)
- {
- try {
- $url = "https://tool.bitefu.net/jiari/?d=$date&back=json";
- $result = file_get_contents($url);
- $result = json_decode($result, true);
- if (isset($result[$date]) && $result[$date] == 2) {
- return true;
- } else {
- return false;
- }
- } catch (\Exception $e) {
- return false;
- }
- }
- /**
- * 验证是否实名认证
- * @return array
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- protected static function checkVerify()
- {
- $membersTwoModel = new MembersTwo();
- $membersTwoInfo = $membersTwoModel->where(['userid' => Session::get('userid')])->find();
- $gameInfo = (new Game())->where(['id' => Session::get('game_id')])->find();
- if ($gameInfo['game_auth_type'] == 1 || $gameInfo['game_auth_type'] == 2) { //中宣部实名认证
- $gameAccountInfo = model('Subaccount')->where(['game_id' => Session::get('game_id'), 'member_id' => Session::get('userid')])->find();
- if ($gameAccountInfo) {
- if ($gameAccountInfo['auth_status'] == 3) {
- $isVerified = 1;
- $membersTwoInfo['realname'] = trim($gameAccountInfo['real_name']);
- $membersTwoInfo['idcard'] = trim($gameAccountInfo['idcard_num']);
- } else if ($gameAccountInfo['auth_status'] == 1) {
- $isVerified = 1;
- $membersTwoInfo['realname'] = trim($gameAccountInfo['real_name']);
- $membersTwoInfo['idcard'] = trim($gameAccountInfo['idcard_num']);
- } else {
- $isVerified = 0;
- $membersTwoInfo['realname'] = '';
- $membersTwoInfo['idcard'] = '';
- }
- } else {
- $isVerified = 0;
- $membersTwoInfo['realname'] = '';
- $membersTwoInfo['idcard'] = '';
- }
- } else { //平台实名认证
- if (empty($membersTwoInfo) || empty($membersTwoInfo['realname']) || empty($membersTwoInfo['idcard'])) {
- $isVerified = 0;
- } else if ((-1 == $membersTwoInfo['realname']) && (-1 == $membersTwoInfo['idcard'])) {
- $isVerified = 0;
- } else {
- $isVerified = 1;
- }
- }
- return ['isVerified' => $isVerified, 'membersTwoInfo' => $membersTwoInfo];
- }
- }
|