// +---------------------------------------------------------------------- namespace Home\Controller; use OT\DataDictionary; use User\Api\PromoteApi; use User\Api\UserApi; use Org\WeixinSDK\Weixin; use Org\JubaobarSDK\Jubaobar; use Org\JtpaySDK\Jtpay; use Org\HeepaySDK\HeepaySDK; use Org\GoldPig\GoldPig; use Org\SwiftpassSDK\Swiftpass; use Com\Wechat; use Com\WechatAuth; use Home\Model\UserPlayModel; use Home\Model\PromoteModel; use Base\Service\PromoteService; use Base\Service\ApplyService; /** * 前台首页控制器 * 主要获取首页聚合数据 */ class PromoteController extends BaseController { //系统首页 public function index($p=1) { header("Content-type:text/html;charset=utf-8"); $user = D('Promote')->isLogin(); if (empty($user)) { $this->redirect("Home/Index/index"); } $today = $this->total(1); $month = $this->total(3); $total = $this->total(); $yesterday = $this->total(5); $lastmonth = $this->total(6); $this->assign("today", $today); $this->assign("month", $month); $this->assign("total", $total); $this->assign("lastmonth", $lastmonth); $this->assign("yesterday", $yesterday); $document = D('Document'); $row = 10; $list = $document->listspage(56,$p,$row,'level desc,id desc'); $count = $document->listCount(56); if($count > $row){ $page = new \Think\Page($count, $row); $list=array_slice($spend,$page->firstRow,$page->listRows); $page->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%'); $this->assign('_page',$page->show()); } $this->assign('list',$list); $url = "http://" . $_SERVER['HTTP_HOST'] . __ROOT__ . "/media.php/member/preg/pid/" . get_pid(); $this->assign("url", $url); $this->meta_title = "首页"; $this->display(); } private function total($type=0) { if ($_REQUEST['promote_id'] === null || $_REQUEST['promote_id'] === '0') { $map['parent_id'] = get_pid(); $map['grand_id'] = get_pid(); $map['_logic'] = 'or'; $ids = M('Promote', 'tab_')->where($map)->getfield("id", true); if (empty($ids)) { $ids = array(get_pid()); } array_unshift($ids, get_pid()); } else { $ids = array($_REQUEST['promote_id']); } $where['promote_id'] = array('in', $ids); $where['pay_status'] = 1; $where['is_check'] = array('NEQ', 2); switch ($type) { case 1: { // 今天 $start = mktime(0, 0, 0, date('m'), date('d'), date('Y')); $end = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; }; break; case 3: { // 本月 $start = mktime(0, 0, 0, date('m'), 1, date('Y')); $end = mktime(0, 0, 0, date('m') + 1, 1, date('Y')) - 1; }; break; case 4: { // 本年 $start = mktime(0, 0, 0, 1, 1, date('Y')); $end = mktime(0, 0, 0, 1, 1, date('Y') + 1) - 1; }; break; case 5: { // 昨天 $start = mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')); $end = mktime(0, 0, 0, date('m'), date('d'), date('Y')); }; break; case 6:{ $start = mktime(0,0,0,date('m')-1,1,date('Y')); $end = mktime(0,0,0,date('m'),1,date('Y'))-1; };break; case 9: { // 前七天 $start = mktime(0, 0, 0, date('m'), date('d') - 6, date('Y')); $end = mktime(date('H'), date('m'), date('s'), date('m'), date('d'), date('Y')); }; break; default: ; } if (isset($start) && isset($end)) { $where['pay_time'] = array("BETWEEN", array($start, $end)); } $total = M('spend', "tab_")->field("SUM(pay_amount) as amount")->where($where)->select(); $total = $this->huanwei($total[0]['amount']); return $total; } private function huanwei($total) { $total = empty($total) ? '0' : trim($total . ' '); $len = strlen($total) - 3; if ($len > 16) { // 兆 $len = $len - 20; $total = $len > 0 ? ($len > 4 ? ($len > 8 ? round(($total / 1e28), 4) . '万亿兆' : round(($total / 1e24), 4) . '亿兆') : round(($total / 1e20), 4) . '万兆') : round(($total / 1e16), 4) . '兆'; } else if ($len > 8) { // 亿 $len = $len - 12; $total = $len > 0 ? (round(($total / 1e12), 4) . '万亿') : round(($total / 1e8), 4) . '亿'; } else if ($len > 4) { // 万 $total = (round(($total / 10000), 4)) . '万'; } return $total; } /** * 我的基本信息 */ public function base_info() { if (IS_POST) { $type = $_REQUEST['type']; $map['id'] = get_pid(); $se = array(); foreach ($_REQUEST as $key => $value) { $_REQUEST[$key] = trim($value); } switch ($type) { case 0: //if (empty($_REQUEST['nickname']) ) { // $this->error('请输入昵称', U('Promote/base_info')); // exit(); //} if ( empty($_REQUEST['real_name']) ) { $this->error('请输入联系人姓名', U('Promote/base_info')); exit(); } $pattern = "/^[\x{4e00}-\x{9fa5}]+$/u"; if(!preg_match($pattern,$_REQUEST['real_name'])){ $this->error('联系人姓名错误', U('Promote/base_info')); exit(); } if ( empty($_REQUEST['email'])) { $this->error('请输入电子邮箱', U('Promote/base_info')); exit(); } $pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i"; if ( !preg_match( $pattern, $_REQUEST['email'] ) ){ $this->error('邮箱地址错误', U('Promote/base_info'));exit; } if (empty($_REQUEST['alipay_account']) ) { $this->error('请输入支付宝账号', U('Promote/base_info')); exit(); } $se['nickname'] = $_REQUEST['nickname']; $se['real_name'] = $_REQUEST['real_name']; $se['email'] = $_REQUEST['email']; $se['alipay_account'] = $_REQUEST['alipay_account']; break; case 1: if(empty($_REQUEST['mobile_phone']) ){ $this->error('结算手机号不能为空', U('Promote/base_info')); return false; } $pattern = "/^1[3|5|7|8]\\d{9}$/i"; if ( !preg_match( $pattern, $_REQUEST['mobile_phone'] ) ){ $this->error('您输入的手机号码格式不合法', U('Promote/base_info')); } if ($_REQUEST['s_county'] === "市、县级市") { $this->error('开户城市填写不完整', U('Promote/base_info')); return false; exit(); } if(empty($_REQUEST['account_openin']) ){ $this->error('开户网点不能为空', U('Promote/base_info')); return false; } $account_openin_pattern = "/^[\x{4e00}-\x{9fa5}]{2,}$/u"; if(!preg_match($account_openin_pattern,$_REQUEST['account_openin'])){ $this->error('开户网点错误', U('Promote/base_info')); exit(); } if(empty($_REQUEST['bank_name']) ){ $this->error('收款银行不能为空', U('Promote/base_info')); return false; } if(empty($_REQUEST['bank_card']) ){ $this->error('银行卡号不能为空', U('Promote/base_info')); return false; } if(!is_numeric($_REQUEST['bank_card'])){ $this->error('卡号格式错误', U('Promote/base_info')); return false; } $bank_card_pattern = "/^\d{10,19}$/u"; if(!preg_match($bank_card_pattern,$_REQUEST['bank_card'])){ $this->error('卡号格式错误', U('Promote/base_info')); exit(); } if(empty($_REQUEST['bank_account']) ){ $this->error('银行户名不能为空', U('Promote/base_info')); return false; } $bank_account_pattern = "/^[\x{4e00}-\x{9fa5}]{2,}$/u"; if(!preg_match($bank_account_pattern,$_REQUEST['bank_account'])){ $this->error('银行卡开户人姓名错误', U('Promote/base_info')); exit(); } if(empty($_REQUEST['idcard']) ){ $this->error('证件号码不能为空', U('Promote/base_info')); exit(); } if(!is_idcard($_REQUEST['idcard'])) { $this->error('证件号码错误', U('Promote/base_info')); exit(); } $se['mobile_phone'] = $_REQUEST['mobile_phone']; $se['bank_name'] = $_REQUEST['bank_name']; $se['bank_card'] = $_REQUEST['bank_card']; $se['bank_account'] = $_REQUEST['bank_account']; $se['account_openin'] = $_REQUEST['account_openin']; $se['bank_area'] = $_REQUEST['s_province'] . ',' . $_REQUEST['s_city'] . ',' . $_REQUEST['s_county']; $se['idcard'] = $_REQUEST['idcard']; break; case 2: if($_REQUEST['old_password'] !="0" && empty($_REQUEST['old_password']) ){ $this->error('旧密码不能为空', U('Promote/base_info')); return false; } if(strlen($_REQUEST['old_password']) <6 ){ $this->error('旧密码不正确', U('Promote/base_info')); return false; } if($_REQUEST['password'] != "0" && empty($_REQUEST['password']) ){ $this->error('新密码不能为空', U('Promote/base_info')); return false; } if(strlen($_REQUEST['password']) <6 ){ $this->error('新密码最短6位', U('Promote/base_info')); return false; } if( empty($_REQUEST['confirm_password'])){ $this->error('确认密码不能为空', U('Promote/base_info')); return false; } if(strlen($_REQUEST['confirm_password'])<6 ){ $this->error('确认密码最短6位', U('Promote/base_info')); return false; } $prp = M("promote", "tab_")->where($map)->find(); $ue = new UserApi(); if($_REQUEST['password'] !== $_REQUEST['confirm_password']){ $this->error('新密码和确认密码不一致', U('Promote/base_info')); return false; } else { $se['password'] = $this->think_ucenter_md5($_REQUEST['confirm_password'], UC_AUTH_KEY); } if($this->think_ucenter_md5($_REQUEST['old_password'], UC_AUTH_KEY) !== $prp['password']) { $this->error('请输入正确的旧密码', U('Promote/base_info')); return false; exit(); } break; case 3: $prp = M("promote", "tab_")->where($map)->find(); $ue = new UserApi(); if($_REQUEST['old_second_pwd'] != "0" && empty($_REQUEST['old_second_pwd']) && !empty($prp['second_pwd'])){ $this->error('旧二级密码不能为空', U('Promote/base_info')); return false; } if(strlen($_REQUEST['old_second_pwd']) <6 && !empty($prp['second_pwd'])){ $this->error('旧二级密码不正确', U('Promote/base_info')); return false; } if($_REQUEST['second_pwd'] !="0" && empty($_REQUEST['second_pwd']) ){ $this->error('新二级密码不能为空', U('Promote/base_info')); return false; } if(strlen($_REQUEST['second_pwd']) <6 ){ $this->error('新二级密码长度不能小于6', U('Promote/base_info')); return false; } if (empty($_REQUEST['confirm_second_pwd'])){ $this->error('请输入确认密码', U('Promote/base_info')); return false; } if ($_REQUEST[''] != $_REQUEST['']){ $this->error('新耳机密码和确认密码不一致', U('Promote/base_info')); return false; } if ($this->think_ucenter_md5($_REQUEST['old_second_pwd'], UC_AUTH_KEY) != $prp['second_pwd']) { $this->error('旧二级密码错误', U('Promote/base_info')); return false; exit(); } else if ($_REQUEST['second_pwd'] !== $_REQUEST['confirm_second_pwd']) { $this->error('新二级密码和确认密码不一致', U('Promote/base_info')); return false; } else { $se['second_pwd'] = $this->think_ucenter_md5($_REQUEST['confirm_second_pwd'], UC_AUTH_KEY); } break; default: $se['nickname'] = $_REQUEST['nickname']; $se['real_name'] = $_REQUEST['real_name']; $se['email'] = $_REQUEST['email']; break; } $res = M("promote", "tab_")->where($map)->save($se); if ($res !== false) { $this->success("修改成功", U('Promote/base_info?type=' . $type)); } else { $this->error('修改失败', U('Promote/base_info')); } } else { $model = M('Promote', 'tab_'); $data = $model->find(session("promote_auth.pid")); $data['bank_area'] = explode(',', $data['bank_area']); $this->meta_title = "基本信息"; $this->assign("data", $data); $this->wxQrcode($data); $this->display(); } } public function think_ucenter_md5($str, $key = 'ThinkUCenter') { return '' === $str ? '' : md5(sha1($str) . $key); } /** *子账号 */ public function mychlid($p = 0) { $account = I('account', ''); $idcard = I('idcard', ''); $mobile = I('mobile', ''); $realName = I('real_name', ''); $status = I('status', 'all'); $promoteId = session("promote_auth.pid"); $model = new PromoteModel(); $promotes = $model->field(['id', 'account'])->where('parent_id=' . $promoteId)->select(); $subPromotes = $model->field(['id', 'account'])->where('parent_id='. $promoteId . ' or grand_id=' . $promoteId . ' or id=' . $promoteId)->select(); $map = []; if ($account) { $map['account'] = ['like', '%' . $account . '%']; } if ($mobile) { $map['mobile_phone'] = ['like', '%' . $mobile . '%']; } if ($idcard) { $map['idcard'] = ['like', '%' . $idcard . '%']; } if ($realName) { $map['real_name'] = ['like', '%' . $realName . '%']; } if ($status != 'all') { $map['status'] = ['eq', $status]; } $map['parent_id'] = session("promote_auth.pid"); $appendCallback = function($data) { $promote = new PromoteModel(); $player = new UserPlayModel(); $ids = array_column($data, 'id'); $parentIds = array_column($data, 'parent_id'); if (count($ids) == 0) { return [ 'hasChildList' => [], 'hasPlayerList' => [], 'hasShiftList' => [], 'hasShiftPlayerList' => [], 'parentPromotes' => [], ]; } $parentList = $promote->field(['id', 'account'])->where(['id' => ['in', $parentIds]])->select(); $parentPromotes = []; foreach($parentList as $parent) { $parentPromotes[$parent['id']] = $parent['account']; } $countList = $promote->field(['count(*)' => 'count', 'parent_id' => 'parent_id'])->where(['parent_id' => ['in', $ids]])->group('parent_id')->select(); $playerList = $player->field(['count(*)' => 'count', 'promote_id' => 'promote_id'])->where(['promote_id' => ['in', $ids]])->group('promote_id')->select(); $shiftList = M('ShiftTask')->field(['count(*)' => 'count', 'from_promote_id' => 'from_promote_id'])->where(['status' => 0, 'type' => 1, 'promote_id' => ['in', $ids]])->group('from_promote_id')->select(); $shiftPlayerList = M('ShiftTask')->field(['count(*)' => 'count', 'from_promote_id' => 'from_promote_id'])->where(['status' => 0, 'type' => 2, 'promote_id' => ['in', $ids]])->group('from_promote_id')->select(); return [ 'hasChildList' => array_column($countList, 'parent_id'), 'hasPlayerList' => array_column($playerList, 'promote_id'), 'hasShiftList' => array_column($shiftList, 'from_promote_id'), 'hasShiftPlayerList' => array_column($shiftPlayerList, 'from_promote_id'), 'parentPromotes' => $parentPromotes, ]; }; $this->assign('subPromotes', $subPromotes); $this->assign('promotes', $promotes); parent::lists("Promote", $p, $map, $appendCallback); } /** *子账号 */ public function mygrand($p = 0) { $account = I('account', ''); $idcard = I('idcard', ''); $mobile = I('mobile', ''); $realName = I('real_name', ''); $status = I('status', 'all'); $promoteId = session("promote_auth.pid"); $model = new PromoteModel(); $promotes = $model->field(['id', 'account'])->where('parent_id=' . $promoteId)->select(); $subPromotes = $model->field(['id', 'account'])->where('parent_id='. $promoteId . ' or grand_id=' . $promoteId . ' or id=' . $promoteId)->select(); $map = []; if ($account) { $map['account'] = ['like', '%' . $account . '%']; } if ($mobile) { $map['mobile_phone'] = ['like', '%' . $mobile . '%']; } if ($idcard) { $map['idcard'] = ['like', '%' . $idcard . '%']; } if ($realName) { $map['real_name'] = ['like', '%' . $realName . '%']; } if ($status != 'all') { $map['status'] = ['eq', $status]; } $promote = D('promote')->where(['id' => session('promote_auth.pid')])->find(); $isGrand = false; if ($promote['parent_id'] == 0 && $promote['grand_id'] == 0) { $map['grand_id'] = session("promote_auth.pid"); $isGrand = true; } else { $map['parent_id'] = session("promote_auth.pid"); } $appendCallback = function($data) use($promote) { $promoteModel = new PromoteModel(); $player = new UserPlayModel(); $ids = array_column($data, 'id'); $parentIds = array_column($data, 'parent_id'); if (count($ids) == 0) { return [ 'hasPlayerList' => [], 'hasShiftList' => [], 'hasShiftPlayerList' => [], 'parentPromotes' => [], ]; } $parentList = $promoteModel->field(['id', 'account'])->where(['id' => ['in', $parentIds]])->select(); $parentPromotes = []; foreach($parentList as $parent) { $parentPromotes[$parent['id']] = $parent['account']; } $list = []; foreach($data as $key => $item) { if ($promote['parent_id'] > 0 && $promote['grand_id'] == 0) { $item['idcard'] = hideStar($item['idcard'], 4, 10); $item['mobile_phone'] = hideStar($item['mobile_phone'], 3, 4); } $list[$key] = $item; } $playerList = $player->field(['count(*)' => 'count', 'promote_id' => 'promote_id'])->where(['promote_id' => ['in', $ids]])->group('promote_id')->select(); $shiftList = M('ShiftTask')->field(['count(*)' => 'count', 'from_promote_id' => 'from_promote_id'])->where(['status' => 0, 'type' => 1, 'promote_id' => ['in', $ids]])->group('from_promote_id')->select(); $shiftPlayerList = M('ShiftTask')->field(['count(*)' => 'count', 'from_promote_id' => 'from_promote_id'])->where(['status' => 0, 'type' => 2, 'promote_id' => ['in', $ids]])->group('from_promote_id')->select(); return [ 'list_data' => $list, 'hasPlayerList' => array_column($playerList, 'promote_id'), 'hasShiftList' => array_column($shiftList, 'from_promote_id'), 'hasShiftPlayerList' => array_column($shiftPlayerList, 'from_promote_id'), 'parentPromotes' => $parentPromotes, ]; }; $this->assign('isGrand', $isGrand); $this->assign('subPromotes', $subPromotes); $this->assign('promotes', $promotes); parent::lists("Promote", $p, $map, $appendCallback); } public function add_chlid() { if (IS_POST) { $parentId = 0; if (isset($_POST['promote_type']) && $_POST['promote_type'] == 2 && isset($_POST['parent_id'])) { if ($_POST['parent_id'] == 0) { $this->ajaxReturn(array('status'=>-1,'msg'=>'请选择上级渠道')); } $parentId = $_POST['parent_id']; } else { $parentId = session('promote_auth.pid'); } $user = new PromoteApi(); $promote = D('promote')->where(['id' => $parentId])->find(); $status = promoteCan(session('promote_auth.pid'), function($level) use ($promote) { if ($level == 1) { return true; } elseif ($level == 2) { return true; } elseif ($level == 3) { return false; } }); if (!$status) { $this->ajaxReturn(array('status'=>-1, 'msg'=>'无权限操作')); } $_POST['ba_id'] = $promote['ba_id']; $_POST['parent_id'] = $parentId; $_POST['parent_account'] = $promote['account']; //三级渠道 if($promote['parent_id']>0){ $_POST['grand_id'] = $promote['parent_id']; $_POST['grand_account'] = $promote['promote_account']; } if (isset($_POST['mobile_phone'])) { if(!preg_match("/^1[3456789]{1}\d{9}$/", $_POST['mobile_phone'])){ $this->ajaxReturn(array('status'=>-1,'msg'=>'手机号格式错误')); } } if (isset($_POST['idcard'])) { if(!$this->isIdcard($_POST['idcard'])){ $this->ajaxReturn(array('status'=>-1,'msg'=>'身份证格式错误')); } } $res = $user->promote_add($_POST); if (is_numeric($res)) { $ba = new \Admin\Model\BusinessAffairsModel(); $ba->add_child($_POST['ba_id'],$res); $this->ajaxReturn(array('status'=>1,'msg'=>"添加成功")); } else { $msg = $res =="渠道账号已存在"?"子渠道账号已存在":$res; $this->ajaxReturn(array('status'=>-1,'msg'=>$msg)); } } else { $type = I('type', 0); $status = promoteCan(session('promote_auth.pid'), function($level) use ($type) { if ($level == 1) { return true; } elseif ($level == 2) { if ($type == 1) { return false; } return true; } elseif ($level == 3) { return false; } }); if (!$status) { $this->error('无权限操作'); } $model = new PromoteModel(); $promotes = $model->field(['id', 'account'])->where('parent_id=' . session("promote_auth.pid"))->select(); $this->assign('promotes', $promotes); $this->meta_title = "添加子渠道"; $this->display(); } } public function resetPassword() { $promoteId = I('promote_id', 0); if ($promoteId == 0) { $this->ajaxReturn(['status'=>0,'msg'=>"参数错误"]); } $promoteService = new PromoteService(); if ($password = $promoteService->resetPassword($promoteId)) { $this->ajaxReturn(['status'=>1, 'msg'=> '重置密码成功', 'data' => ['password' => $password]]); } else { $this->ajaxReturn(['status'=>0, 'msg'=> '重置密码失败']); } } public function froze() { $promoteId = I('promote_id', 0); if ($promoteId == 0) { $this->ajaxReturn(['status'=>0,'msg'=>"参数错误"]); } $promoteService = new PromoteService(); if ($promoteService->froze($promoteId)) { $this->ajaxReturn(['status'=>1, 'msg'=> '冻结成功']); } else { $this->ajaxReturn(['status'=>0, 'msg'=> '冻结失败']); } } public function unfreeze() { $promoteId = I('promote_id', 0); if ($promoteId == 0) { $this->ajaxReturn(['status'=>0,'msg'=>"参数错误"]); } $promoteService = new PromoteService(); if ($promoteService->unfreeze($promoteId)) { $this->ajaxReturn(['status'=>1, 'msg'=> '解冻成功']); } else { $this->ajaxReturn(['status'=>0, 'msg'=> '解冻失败']); } } public function edit_chlid($id = 0) { if (IS_POST) { $type = $_REQUEST['type']; $map['id'] = $id; $se = array(); foreach ($_REQUEST as $key => $value) { $_REQUEST[$key] = trim($value); } switch ($type) { case 0: if (empty($_REQUEST['nickname']) ) { $this->error('子账号昵称不能为空', U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',0)))); exit(); } if ($_POST['password'] != "0" && empty($_POST['password'])) { unset($_POST['password']); }else{ if(strlen($_REQUEST['password'])<6 ){ $this->error('登录密码不能小于6位字符', U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',0)))); return false; } } if ( empty($_REQUEST['real_name']) ) { $this->error('联系人姓名不能为空', U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',0)))); exit(); } $pattern = "/^[\x{4e00}-\x{9fa5}]+$/u"; if(!preg_match($pattern,$_REQUEST['real_name'])){ $this->error('您输入的联系人姓名格式不正确', U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',0)))); exit(); } if(empty($_REQUEST['mobile_phone']) ){ $this->error('手机号不能为空', U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',0)))); return false; } $pattern = "/^1[3|5|7|8]\\d{9}$/i"; if ( !preg_match( $pattern, $_REQUEST['mobile_phone'] ) ){ $this->error('您输入的手机号码格式不合法', U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',0)))); } if(empty($_REQUEST['email']) ){ $this->error('电子邮箱不能为空', U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',0)))); return false; } $pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i"; if ( !preg_match( $pattern, $_REQUEST['email'] ) ){ $this->error('您输入的电子邮箱地址不合法', U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',0)))); }; $user = new PromoteApi(); $res = $user->edit($_POST); if ($res !== false) { $this->success("子账号修改成功", U('Promote/mychlid')); } else { $this->error("修改子账号失败"); } break; case 1: if ($_REQUEST['s_county'] === "市、县级市") { $this->error('开户城市填写不完整',U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',1)))); return false; exit(); } if(empty($_REQUEST['account_openin']) ){ $this->error('开户网点不能为空', U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',1)))); return false; } if(empty($_REQUEST['bank_name']) ){ $this->error('收款银行不能为空', U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',1)))); return false; } if(empty($_REQUEST['bank_card']) ){ $this->error('银行卡号不能为空', U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',1)))); return false; } if(!is_numeric($_REQUEST['bank_card']) ){ $this->error('请输入正确的银行卡号', U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',1)))); return false; } if(empty($_REQUEST['bank_account']) ){ $this->error('银行户名不能为空', U('Promote/edit_chlid',array('id'=>$id,'type'=>I('type',1)))); return false; } $se['mobile_phone'] = $_REQUEST['mobile_phone']; $se['bank_name'] = $_REQUEST['bank_name']; $se['bank_card'] = $_REQUEST['bank_card']; $se['bank_account'] = $_REQUEST['bank_account']; $se['account_openin'] = $_REQUEST['account_openin']; $se['bank_area'] = $_REQUEST['s_province'] . ',' . $_REQUEST['s_city'] . ',' . $_REQUEST['s_county']; $res = M("promote", "tab_")->where($map)->save($se); if ($res !== false) { $this->success("修改成功", U('Promote/edit_chlid',array('id'=>$id,'type'=>$type))); } else { $this->error('修改失败', U('Promote/edit_chlid',array('id'=>$id,'type'=>$type))); } break; } } else { $promote = A('Promote', 'Event'); $this->meta_title = '子帐号'; $promote->baseinfo('edit_chlid', $id); } } /** * @param int $level * @param int $size */ public function qrcode($level=3,$size=4,$url=""){ Vendor('phpqrcode.phpqrcode'); $errorCorrectionLevel =intval($level) ;//容错级别 $matrixPointSize = intval($size);//生成图片大小 //生成二维码图片 ob_clean(); $object = new \QRcode(); echo $object->png(base64_decode(base64_decode($url)), false, $errorCorrectionLevel, $matrixPointSize, 2); } public function checkAccount($account){ $user = get_promote_entity($account, true); if($user){ $this->ajaxReturn(array('status'=>1)); }else{ $this->ajaxReturn(array('status'=>0)); } } public function balance() { if (IS_POST) { $real_amount = $amount = I('amount'); if(!is_numeric($amount)){ $res_msg = '充值金额不是数字'; $this->show_balance(); echo "; return false;"; $this->redirect('balance', array('status'=>1), 3, ''); } if($amount<0) { $res_msg = '充值金额不正确'; $this->show_balance(); echo "; return false;"; $this->redirect('balance', array('status'=>1), 3, ''); } $amount = abs($amount); // $amount = 0.01;//测试金额 if (empty($_REQUEST['account'])) { $user = get_promote_entity(PID); } else { $user = get_promote_entity($_REQUEST['account'], true); } $order_no = "TB_" . date('Ymd') . date('His') . sp_random_string(4); $create['amount'] = $amount; $create['pay_order_number'] = $order_no; $vo = new \Think\Pay\PayVo(); $vo->setBody("账户余额") ->setFee($amount)//支付金额 ->setTitle("余额充值") ->setOrderNo($order_no) ->setSignType("MD5") ->setPayMethod("direct_tb") ->setTable("balance") ->setUserId($user['id']) ->setAccount($user['account']) ->setPromoteId(PID) ->setPromoteName(PROMOTE_ACCOUNT) ->setMoney($user['balance_coin']); switch (I('pay_type')) { case 'swiftpass': //判断是否开启微信充值 if (pay_set_status('wei_xin') == 0 && pay_set_status('weixin') == 0) { $this->error("网站未开启微信充值", '', 1); exit(); } if (get_wx_type() == 0) { $weixn = new Weixin(); $is_pay = json_decode($weixn->weixin_pay("余额充值", $order_no, $real_amount), true); if ($is_pay['status'] === 1) { $json_['out_trade_no'] = $order_no; $json_['amount'] = $amount; $json_['pay_money'] = $real_amount; $json_['code_img_url'] = U('qrcode', array('level' => 3, 'size' => 4, 'url' => base64_encode(base64_encode($is_pay['url'])))); } $create['pay_way'] = 2; $this->add_balance($user, $create); $this->show_balance(); echo ""; } else { $vo->setService("pay.weixin.native") ->setPayWay(2); $pay = new \Think\Pay('swiftpass', C('weixin')); $all = $pay->buildRequestForm($vo); $all['amount'] = $vo->getMoney(); $this->show_balance(); echo ""; } break; case 'goldpig': if (pay_set_status('goldpig') == 0) { $this->error("网站未开启金猪充值", '', 1); exit(); } if(empty(C('goldpig.partner'))||empty(C('goldpig.wooolid'))) { $this->error("网站未配置金猪充值", '', 1); exit(); } if($amount<1) { $this->error("单笔金额不小于1", '', 1); exit(); } $sign=think_encrypt(md5($real_amount.$order_no)); $create['pay_way'] = 8; $this->add_balance($user, $create); file_put_contents("./Application/Home/OrderNo/".$order_no.'.txt',json_encode($create)); redirect(U('goldpig_pay',array('userid'=>$user['id'],'account' =>$user['account'],'pay_amount'=>$real_amount,'sign'=>$sign,'pay_order_number'=>$order_no))); break; default: //判断是否开启支付宝充值 if (pay_set_status('alipay') == 0) { $this->error("网站未开启支付宝充值", '', 1); exit(); } $vo->setService("create_direct_pay_by_user") ->setPayWay(1); $pay = new \Think\Pay('alipay', C('alipay')); echo $pay->buildRequestForm($vo); break; } } else { $model = M('Promote', 'tab_'); $data = $model->find(session("promote_auth.pid")); $data['bank_area'] = explode(',', $data['bank_area']); $this->assign('data',$data); $this->meta_title = '账户余额'; $this->display(); } } public function balance_recharge() { if (IS_POST) { $real_amount = $amount = I('amount',0,'intval'); //$real_amount = $amount = 0.01; if(!is_numeric($amount)){ $this->ajaxReturn(['status'=>0,'info'=>'充值金额不是数字']); } if($amount<0){ $this->ajaxReturn(['status'=>0,'info'=>'充值金额错误']); } if (empty($_REQUEST['account'])) { $user = get_promote_entity(PID); } else { $user = get_promote_entity($_REQUEST['account'], true); } $order_no = "TB_" . date('Ymd') . date('His') . sp_random_string(4); $create['amount'] = $amount; $create['pay_order_number'] = $order_no; $vo = new \Think\Pay\PayVo(); $vo->setBody("账户余额") ->setFee($amount)//支付金额 ->setTitle("余额充值") ->setOrderNo($order_no) ->setSignType("MD5") ->setPayMethod("direct_tb") ->setTable("balance") ->setUserId($user['id']) ->setAccount($user['account']) ->setPromoteId(PID) ->setPromoteName(PROMOTE_ACCOUNT) ->setMoney($user['balance_coin']); switch (I('pay_type')) { case 'swiftpass': //判断是否开启微信充值 if (pay_set_status('wei_xin') == 0 && pay_set_status('weixin') == 0) { $this->ajaxReturn(['status'=>0,'info'=>'网站未开启微信充值']); } if (get_wx_type() == 0) { $weixn = new Weixin(); $is_pay = json_decode($weixn->weixin_pay("余额充值", $order_no, $real_amount), true); if ($is_pay['status'] === 1) { $json_['out_trade_no'] = $order_no; $json_['amount'] = $amount; $json_['pay_money'] = $real_amount; $json_['code_img_url'] = U('qrcode', array('level' => 3, 'size' => 4, 'url' => base64_encode(base64_encode($is_pay['url'])))); } $create['pay_way'] = 2; $this->add_balance($user, $create); $this->ajaxReturn(['status'=>1,'info'=>'','data'=>$json_]); } else { $vo->setService("pay.weixin.native") ->setPayWay(2); $pay = new \Think\Pay('swiftpass', C('weixin')); $all = $pay->buildRequestForm($vo); $all['amount'] = $vo->getMoney(); $this->ajaxReturn(['status'=>1,'info'=>'','data'=>$all]); } break; default: //判断是否开启支付宝充值 if (pay_set_status('alipay') == 0) { $this->ajaxReturn(['status'=>0,'info'=>'网站未开启支付宝充值']); } $vo->setService("create_direct_pay_by_user") ->setPayWay(1); $pay = new \Think\Pay('alipay', C('alipay')); $url = $pay->buildRequestForm($vo); $this->ajaxReturn(['status'=>1,'info'=>'','url'=>$url]); } } else { $this->ajaxReturn(['status'=>0,'info'=>'请求有误']); } } /** * 金猪支付 * @return [type] [description] * @author cb <[email address]> */ public function goldpig_pay(){ if(IS_POST){ SafeFilter($_POST); $msign=think_encrypt(md5($_POST['amount'].$_POST['pay_order_number'])); if($msign!==$_POST['sign']){ $this->error('验证失败',U('promote/balance'));exit; } if($_POST['amount']<=0){ $this->error('金额有误'); } $url="./Application/Home/OrderNo/".$_POST['pay_order_number'].'.txt'; if(!file_exists($url) ){ $this->error('操作有误',U('promote/balance'));exit; } $user = M('Promote','tab_')->field('id,account')->where(['account'=>$_POST['UserName']])->find(); if (empty($user)) { $this->error("账号不存在"); exit(); } $baseurl = 'http://api.357p.com/?'; $url = $baseurl . "UserName={$_POST['UserName']}&Price={$_POST['amount']}&shouji={$_POST['shouji']}&PayID={$_POST['PayID']}&userid={$_POST['userid']}&wooolID={$_POST['wooolID']}&jinzhua={$_POST['pay_order_number']}&jinzhub={$_POST['jinzhub']}&jinzhuc={$_POST['jinzhuc']}&jinzhue={$_POST['pay_order_number']}"; redirect($url);exit; }else{ $this->display(); } } public function show_balance() { $model = M('Promote', 'tab_'); $data = $model->find(session("promote_auth.pid")); $data['bank_area'] = explode(',', $data['bank_area']); $this->assign('data',$data); $this->meta_title = '账户余额'; $this->display('balance'); } public function checkOrder($order_number){ $map['pay_order_number'] = $order_number; $data = M('Balance','tab_') ->where($map) ->field('pay_status') ->find(); if ($data['pay_status'] == 1){ $this->success('支付成功'); }else{ $this->error('暂未支付'); } } public function add_balance($promote,$data){ $balance = M("Balance","tab_"); $balance_data['order_number'] = ""; $balance_data['pay_order_number'] = $data['pay_order_number']; $balance_data['money'] = $data['amount']; $balance_data['balance'] = $promote['balance_coin']; $balance_data['pay_status'] = 0; $balance_data['recharge_type'] = $data['pay_way']; $balance_data['create_time'] = time(); $balance_data['recharge_id'] = $promote['id']; $balance_data['recharge_account'] = $promote['account']; $balance_data['promote_id'] = PID; $balance_data['promote_account'] = PROMOTE_ACCOUNT; $balance->create($balance_data); $result = $balance->add(); return $result; } public function wxQrcode($promote='') { if (C('wechat.status')>0) { $appid = C('wechat.appid'); $appsecret = C('wechat.appsecret'); $token = session("token"); if($token){ $auth = new WechatAuth($appid, $appsecret, $token); } else { $auth = new WechatAuth($appid, $appsecret); $token = $auth->getAccessToken(); session(array('expire' => $token['expires_in'])); session("token", $token['access_token']); } if (empty($promote)) { $promote = D('promote')->detail(); } $sign = $promote['weixin_openid_sign']?$promote['weixin_openid_sign']:rand(1,99999); $ticket = $auth->qrcodeCreate($sign,604800); $this->assign('wxQrcodeUrl',$ticket['url']); } else { $this->assign('wxQrcodeUrl',null); } } public function wxQrcodeRedirect() { $xml_str = $GLOBALS['HTTP_RAW_POST_DATA']; $this->logger($xml_str); if(!empty($xml_str)){ libxml_disable_entity_loader(true); $request_xml = simplexml_load_string($xml_str, 'SimpleXMLElement', LIBXML_NOCDATA); switch ($request_xml->MsgType){ case 'event': $this->_setOpenid($request_xml); break; } } else { die(''); } } public function _setOpenid($data,$type) { $event = strtolower($data->Event); $openid = $data->FromUserName; // 用户 $auth = new WechatAuth(C('wechat.appid'), C('wechat.appsecret')); $model = D('Promote'); $promote = $model->detail(); $data = array('id'=>$promote['id']); $user = $auth->userInfo($openid); switch($event) { case 'subscribe':{ // 关注事件 if (!empty($promote['weixin_openid'])) { $auth->setText($openid,date('Y-m-d H:i:s').' 请先解绑微信');exit; } if (str_replace('qrscene_', '', $data['EventKey']) != $promote['weixin_openid_sign']) { $auth->setText($openid,date('Y-m-d H:i:s').' 页面错误,请刷新页面重试');exit; } $data['weixin_account']=emoji_encode($user['nickname']); $data['weixin_openid']=$openid; $res = $model->update($data); if ($res) { $auth->sendText($openid,date('Y-m-d H:i:s').' 微信绑定成功'); } else { $auth->sendText($openid,date('Y-m-d H:i:s').' 微信绑定失败'); } };break; case 'scan':{ // 关注以后 if ($user['subscribe'] != 1) {$auth->setText($openid,date('Y-m-d H:i:s').' 你未关注微信');exit;} if (empty($promote['weixin_openid'])) { $auth->setText($openid,date('Y-m-d H:i:s').' 请先绑定微信');exit; } };break; case 'unsubscribe':{ // 取消关注 if ($promote['weixin_openid'] != $openid) { $auth->setText($openid,date('Y-m-d H:i:s').' 对不起,你没有权限');exit; } if (str_replace('qrscene_', '', $data['EventKey']) != $promote['weixin_openid_sign']) { $auth->setText($openid,date('Y-m-d H:i:s').' 页面错误,请刷新页面重试');exit; } if (empty($promote['weixin_openid'])) { $auth->setText($openid,date('Y-m-d H:i:s').' 暂未绑定微信');exit; } $data['weixin_account']=''; $data['weixin_openid']=''; $res = $model->update($data); if ($res) { $auth->sendText($openid,date('Y-m-d H:i:s').' 微信解绑成功'); } else { $auth->sendText($openid,date('Y-m-d H:i:s').' 微信解绑失败'); } };break; } } public function logger($log_content) { $fg_str="\n============================================================\n"; $max_size = 500000; $log_filename = __ROOT__."/Uploads/Logs/log".date('Ymd').".xml"; if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){ unlink($log_filename); } if(is_array($log_content)){ file_put_contents($log_filename, date('Y-m-d H:i:s')."\n".json_encode($log_content).$fg_str, FILE_APPEND); }else{ file_put_contents($log_filename, date('Y-m-d H:i:s')."\n".$log_content.$fg_str, FILE_APPEND); } } public function promoteList($p=1){ switch ($_GET['type']) { case '': case 1: $this->promoteLists($p); break; default: $this->siteApplyList($p); break; } } // 推广员列表 const model_name = 'Promote'; public function promoteLists($p){ $map = []; $map['_string'] = 'id='. session('promote_auth.pid') . ' or parent_id=' . session('promote_auth.pid') . ' or grand_id=' . session('promote_auth.pid'); $selectMap = $map; if(isset($_REQUEST['promote_id'])){ $promoteid = $_REQUEST['promote_id']; unset($_REQUEST['promote_id']); if(isset($_REQUEST['parent_id'])) { $parent_id = $_REQUEST['parent_id']; unset($_REQUEST['parent_id']); if($promoteid == $parent_id) { $map['id'] = $promoteid; } else { $maps['parent_id'] = $parent_id; $maps['grand_id'] = $parent_id; $maps['_logic'] = 'or'; $pro = M('promote','tab_')->field('id,account')->where([array('id'=>$promoteid),$maps])->select(); if (!empty($pro_ids)){ $map['id'] = array('eq',-1); } } } else { $map['id'] = $promoteid; /* $maps['parent_id'] = $promoteid; $maps['grand_id'] = $promoteid; $maps['_logic'] = 'or'; $pro = M('promote','tab_')->field('id,account')->where($maps)->select(); $pro_ids = array_column($pro,'id'); $pro_ids[] = $promoteid; if (!empty($pro_ids)){ $map['id'] = ['in',$pro_ids]; }else{ $map['id'] = array('eq',-1); } */ } } else { if (isset($_REQUEST['parent_id'])) { if ($_REQUEST['parent_id']=='全部') { unset($_REQUEST['parent_id']); } $zid=get_zi_promote_id($_REQUEST['parent_id']); if($zid){ $zid=$zid.','.$_REQUEST['parent_id']; }else{ $zid=$_REQUEST['parent_id']; } $map['id']=array('in',$zid); unset($_REQUEST['parent_id']); } } if(isset($_REQUEST['admin_id'])){ if($_REQUEST['admin_id']=="全部"){ unset($_REQUEST['admin']); }else{ $map['ba_id']=$_REQUEST['admin_id']; } } if(I('promote_level') == 1){ $map['parent_id'] = 0; }elseif(I('promote_level') == 2){ $map['parent_id'] = ['neq',0]; $map['grand_id'] = 0; }elseif (I('promote_level') == 3) { $map['parent_id'] = ['neq',0]; $map['grand_id'] = ['neq',0]; } $model = new PromoteModel(); $promotes = $model->field(['id', 'account'])->where($selectMap)->select(); $this->assign('promotes', $promotes); self::order_lists(self::model_name, $p, $map); } /** * [数组分页,二维数组字段排序] * @param [type] $model [description] * @param integer $p [description] * @param array $extend_map [description] * @return [type] [description] * @author [yyh] <[email address]> */ public function order_lists($model = null, $p = 0,$extend_map = array()){ $model || $this->error('模型名标识必须!'); $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据 $arraypage = $page; //默认显示第一页数据 //获取模型信息 $model = M('Model')->getByName($model); $model || $this->error('模型不存在!'); //解析列表规则 $fields = array(); $grids = preg_split('/[;\r\n]+/s', trim($model['list_grid'])); foreach ($grids as &$value) { if(trim($value) === ''){ continue; } // 字段:标题:链接 $val = explode(':', $value); // 支持多个字段显示 $field = explode(',', $val[0]); $value = array('field' => $field, 'title' => $val[1]); if(isset($val[2])){ // 链接信息 $value['href'] = $val[2]; // 搜索链接信息中的字段信息 preg_replace_callback('/\[([a-z_]+)\]/', function($match) use(&$fields){$fields[]=$match[1];}, $value['href']); } if(strpos($val[1],'|')){ // 显示格式定义 list($value['title'],$value['format']) = explode('|',$val[1]); } foreach($field as $val){ $array = explode('|',$val); $fields[] = $array[0]; } } $fields[] = 'grand_id'; // 过滤重复字段信息 $fields = array_unique($fields); // 关键字搜索 $map = $extend_map; $key = $model['search_key']?$model['search_key']:'title'; if(isset($_REQUEST[$key])){ $map[$key] = array('like','%'.$_GET[$key].'%'); unset($_REQUEST[$key]); } // 条件搜索 foreach($_REQUEST as $name=>$val){ if(in_array($name,$fields)){ $map[$name] = $val; } } if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;} //读取模型数据列表 if($model['extend']){ $name = get_table_name($model['id']); $parent = get_table_name($model['extend']); $fix = C("DB_PREFIX"); $key = array_search('id', $fields); if(false === $key){ array_push($fields, "{$fix}{$parent}.id as id"); } else { $fields[$key] = "{$fix}{$parent}.id as id"; } /* 查询记录数 */ $count = D($parent)->join("INNER JOIN {$fix}{$name} ON {$fix}{$parent}.id = {$fix}{$name}.id")->where($map)->count(); // 查询数据 $data = D($parent) ->join("INNER JOIN {$fix}{$name} ON {$fix}{$parent}.id = {$fix}{$name}.id") /* 查询指定字段,不指定则查询所有字段 */ ->field(empty($fields) ? true : $fields) // 查询条件 ->where($map) /* 默认通过id逆序排列 */ ->order("{$fix}{$parent}.id DESC") /* 数据分页 */ // ->page($page, $row) 需要查询所有数据 后面用数组分页,原因: 页面要排序 /* 执行查询 */ ->select(); } else { if($model['need_pk']){ in_array('id', $fields) || array_push($fields, 'id'); } $name = parse_name(get_table_name($model['id']), true); $data = D($name) /* 查询指定字段,不指定则查询所有字段 */ ->field(empty($fields) ? true : $fields) // 查询条件 ->where($map) /* 默认通过id逆序排列 */ ->order(empty($map['order'])?"id desc":$map['order']) /* 数据分页 */ // ->page($page, $row)//需要查询所有数据 后面用数组分页,原因: 页面要排序 /* 执行查询 */ ->select(); /* 查询记录总数 */ $count = count($data); } //分页 $page = set_pagination($count,$row); if($page) {$this->assign('_page', $page);} $data = $this->parseDocumentList($data,$model['id']); if(isset($extend_map['for_show_pic_list'])){ if($extend_map['for_show_pic_list']=='icon'){ foreach ($data as $key => $value) { $data[$key]['pic_path']=get_cover($value['icon'],'path'); } } if($extend_map['for_show_pic_list']=='novice'){ foreach ($data as $key => $value) { $data[$key]['novice']=arr_count($value['novice']); } } } if($_REQUEST['data_order']!=''){ $data_order=reset(explode(',',$_REQUEST['data_order'])); $data_order_type=end(explode(',',$_REQUEST['data_order'])); $this->assign('userarpu_order',$data_order); $this->assign('userarpu_order_type',$data_order_type); } $data=my_sort($data,$data_order_type,(int)$data_order); $size=$row;//每页显示的记录数 $pnum = ceil(count($data) / $size); //总页数,ceil()函数用于求大于数字的最小整数 //用array_slice(array,offset,length) 函数在数组中根据条件取出一段值;array(数组),offset(元素的开始位置),length(组的长度) $data = array_slice($data, ($arraypage-1)*$size, $size); $this->assign('model', $model); $this->assign('list_grids', $grids); $this->assign('list_data', $data); $this->meta_title = $model['title'].'列表'; $this->display($model['template_list']); } /** * 处理文档列表显示 * @param array $list 列表数据 * @param integer $model_id 模型id */ protected function parseDocumentList($list,$model_id=null){ $model_id = $model_id ? $model_id : 1; $attrList = get_model_attribute($model_id,false,'id,name,type,extra'); // 对列表数据进行显示处理 if(is_array($list)){ foreach ($list as $k=>$data){ foreach($data as $key=>$val){ if(isset($attrList[$key])){ $extra = $attrList[$key]['extra']; $type = $attrList[$key]['type']; if('select'== $type || 'checkbox' == $type || 'radio' == $type || 'bool' == $type) { // 枚举/多选/单选/布尔型 $options = parse_field_attr($extra); if($options && array_key_exists($val,$options)) { $data[$key] = $options[$val]; } }elseif('date'==$type){ // 日期型 $data[$key] = date('Y-m-d',$val); }elseif('datetime' == $type){ // 时间型 $data[$key] = date('Y-m-d H:i:s',$val); } } } $data['model_id'] = $model_id; $list[$k] = $data; } } return $list; } public function shift() { $promoteService = new PromoteService(); $result = $promoteService->addShiftTask($_POST); $this->ajaxReturn($result); } public function cancelShift() { $promoteService = new PromoteService(); $result = $promoteService->cancelShift($_POST); $this->ajaxReturn($result); } public function downGame() { $gameId = $_POST['game_id']; $promoteId = $_POST['promote_id']; $applyService = new ApplyService(); $applyService->cancelGame($gameId, $promoteId); $this->ajaxReturn(['status' => true, 'msg' => '下架成功']); } public function isIdcard($id) { $id = strtoupper($id); $regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/"; $arr_split = array(); if(!preg_match($regx, $id)) { return false; } if (15==strlen($id)) { $regx = "/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/"; @preg_match($regx, $id, $arr_split); //检查生日日期是否正确 $dtm_birth = "19".$arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4]; if(!strtotime($dtm_birth)) { return false; } else { return true; } } else { $regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/"; @preg_match($regx, $id, $arr_split); $dtm_birth = $arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4]; if(!strtotime($dtm_birth)) { return false; } else { //检验18位身份证的校验码是否正确。 //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 $arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); $arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); $sign = 0; for ( $i = 0; $i < 17; $i++ ) { $b = (int) $id{$i}; $w = $arr_int[$i]; $sign += $b * $w; } $n = $sign % 11; $val_num = $arr_ch[$n]; if ($val_num != substr($id,17, 1)) { return false; } else { return true; } } } } }