* Date: 2018-4-3 */ namespace app\api\controller\v1; use think\Db; class Api extends Base { /** * 初始化操作 */ public function _initialize() { parent::_initialize(); } /** * 首页 */ public function index() { $data = $this->apiLogic->taglibData(); $this->renderSuccess($data); } /** * 分类页面 * @return [type] [description] */ public function category() { $data = []; $show_type = input('param.show_type/d'); // 模板风格类型 if (35 == $show_type) { // 商品分类列表 // $result = model('v1.Category')->getProductCategory(); // $data['list'] = !empty($result['list']) ? array_values($result['list']) : []; // $data['arclist'] = !empty($result['arclist']) ? array_values($result['arclist']): []; } else { $data = $this->apiLogic->taglibData(); $data['channel'][0]['data'] = array_values($data['channel'][0]['data']); } $this->renderSuccess($data); } // 查询商品信息 public function get_product_data() { if (IS_AJAX_POST) { $typeid = input('post.typeid/d'); if (empty($typeid)) $this->error('数据异常'); $ArchivesData = model('v1.Category')->GetProductData($typeid); $this->success('查询成功', null, $ArchivesData); } } /** * 文档列表 * @param string $typeid 栏目ID * @return array 返回值 */ public function archivesList($typeid = '') { $data = $this->apiLogic->taglibData(); $this->renderSuccess($data); } /** * 文档详情页 * @param string $aid 文档ID * @param string $typeid 分类ID * @return array 返回值 */ public function archivesView($aid = '', $typeid = '') { $aid = intval($aid); $typeid = intval($typeid); if (empty($aid) && !empty($typeid)) { // 单页栏目详情页 $data = $this->apiLogic->taglibData(); $this->renderSuccess($data); } else { // 普通文档详情 $users = $this->getUser(false); $view = model('v1.Api')->getArchivesView($aid, $users); $data = $this->apiLogic->taglibData($users); $data = array_merge($view, $data); $this->renderSuccess($data); } } /** * 联系我们 * @param string $aid 文档ID * @return array 返回值 */ public function contact() { $data = model('v1.Api')->getContact(); $this->renderSuccess($data); } /** * 留言栏目 */ public function guestbook_form() { $data = $this->apiLogic->taglibData(); $this->renderSuccess($data); } /** * 发送邮箱 * @return array 返回值 */ public function sendemail() { // 超时后,断掉邮件发送 function_exists('set_time_limit') && set_time_limit(10); $type = input('param.type/s'); // 留言发送邮件 if (IS_POST && 'gbook_submit' == $type) { $aid = input('param.aid/d'); $typeid = input('param.typeid/d'); $form_type = input('param.form_type/d', 0); $send_email_scene = config('send_email_scene'); $scene = $send_email_scene[1]['scene']; $web_name = tpCache('web.web_name'); // 判断标题拼接 if (!empty($form_type) && 1 === intval($form_type)) { $form_name = M('form')->where('form_id', $typeid)->getField('form_name'); $web_name = $form_name.'-'.$web_name; } else { $arctype = M('arctype')->field('typename')->find($typeid); $web_name = $arctype['typename'].'-'.$web_name; } // 拼装发送的字符串内容 $row = M('guestbook_attribute')->field('a.attr_name, b.attr_value') ->alias('a') ->join('__GUESTBOOK_ATTR__ b', 'a.attr_id = b.attr_id AND a.typeid = '.$typeid, 'LEFT') ->where([ 'b.aid' => $aid, ]) ->order('a.attr_id sac') ->select(); $content = ''; foreach ($row as $key => $val) { if(10 == $val['attr_input_type']){ $val['attr_value'] = date('Y-m-d H:i:s',$val['attr_value']); }if (preg_match('/(\.(jpg|gif|png|bmp|jpeg|ico|webp))$/i', $val['attr_value'])) { if (!stristr($val['attr_value'], '|')) { $val['attr_value'] = get_absolute_url(handle_subdir_pic($val['attr_value'])); $val['attr_value'] = ""; } } else { $val['attr_value'] = str_replace(PHP_EOL, ' | ', $val['attr_value']); } $content .= $val['attr_name'] . ':' . $val['attr_value'].'
'; } $html = "

{$web_name}

{$content}

"; if (isWeixinApplets()) { $html .= "

——来源:小程序端

"; } else if (isMobile()) { $html .= "

——来源:移动端

"; } else { $html .= "

——来源:电脑端

"; } // 发送邮件 $res = send_email(null,null,$html, $scene); if (intval($res['code']) == 1) { $this->renderSuccess($res); } else { $this->error($res['msg']); } } } // 发送留言短信 private function sendGbookSms($type = 'gbook_submit', $send_scene = 11) { // 超时后,断掉邮件发送 function_exists('set_time_limit') && set_time_limit(10); // 留言发送短信 if ('gbook_submit' == $type) { $sms_config = tpCache('sms'); // 配置不接收留言短信提醒 if (!empty($sms_config['sms_guestbook_send'])) { // 短信模板无内容 $sms_type = $sms_config['sms_type'] ? intval($sms_config['sms_type']) : 1; $tpl_content = Db::name('sms_template')->where(["send_scene" => $send_scene, "sms_type" => $sms_type])->value('tpl_content'); // 发送短信 if (!empty($tpl_content)) sendSms($send_scene, $sms_config['sms_test_mobile'], []); } } } /** * 用户自动登录 * @return array * @throws \app\common\exception\BaseException * @throws \think\Exception * @throws \think\exception\DbException */ public function users_login() { if (empty($this->globalConfig['web_users_switch'])) { $this->error('后台会员中心尚未开启!'); } $userModel = model('v1.User'); return $this->renderSuccess([ 'users_id' => $userModel->login(input('post.', null, 'htmlspecialchars_decode')), 'token' => $userModel->getToken() ]); } /** * 获取当前用户信息 * @return array * @throws \app\common\exception\BaseException * @throws \think\Exception * @throws \think\exception\DbException */ public function users_detail() { if (empty($this->globalConfig['web_users_switch'])) { $this->error('后台会员中心尚未开启!'); } // 当前用户信息 $users = $this->getUser(false); $data = [ 'userInfo' => $users, ]; // 开启商城中心 if (!empty($this->usersConfig['shop_open'])) { $shopModel = model('v1.Shop'); $data['orderCount'] = [ 'payment' => $shopModel->getOrderCount($users, 'payment'), 'delivery' => $shopModel->getOrderCount($users, 'delivery'), 'received' => $shopModel->getOrderCount($users, 'received'), ]; $data['coupon'] = model('v1.api')->getCouponCount($users); // 优惠券数量 $data['product'] = model('v1.api')->getRecomProduct(); // 可能你还想要 } // 是否安装积分商城插件 $data['showPointsShop'] = false; $weappInfo = model('ShopPublicHandle')->getWeappPointsShop(); if (!empty($weappInfo)) { // 调用积分商城逻辑层方法 $pointsShopLogic = new \app\plugins\logic\PointsShopLogic($users); $data['showPointsShop'] = $pointsShopLogic->showPointsShop($weappInfo); } // 是否安装订单核销插件 $data['showVerifyOrder'] = false; $weappInfo = model('ShopPublicHandle')->getWeappVerifyInfo(); if (!empty($weappInfo)) { // 调用订单核销逻辑层方法 $verifyLogic = new \app\plugins\logic\VerifyLogic($users); $data['showVerifyOrder'] = $verifyLogic->showVerifyOrder($weappInfo); } // 是否安装抽奖插件 $data['showLotterydraw'] = false; $weappInfo = model('ShopPublicHandle')->getWeappInfo("Lotterydraw"); if (!empty($weappInfo)) { // 调用订单核销逻辑层方法 $lotterydrawLogic = new \weapp\Lotterydraw\logic\LotterydrawLogic(); $data['showLotterydraw'] = $lotterydrawLogic->showLotterydraw($weappInfo); } $tagData = $this->apiLogic->taglibData($users); $data = array_merge($data, $tagData); return $this->renderSuccess($data); } /** * 微信支付成功异步通知 (shop_order) * @throws BaseException * @throws \Exception * @throws \think\exception\DbException */ public function wxpay_notify() { // $xml = << // // // // // // // // // // // // // // // // // 1 // // // // EOF; $userModel = model('v1.User'); if (!$xml = file_get_contents('php://input')) { $userModel->returnCode(false, 'Not found DATA'); } // 将服务器返回的XML数据转化为数组 $data = $userModel->fromXml($xml); // 订单信息 $order = Db::name("shop_order")->where(['order_code' => $data['out_trade_no']])->find(); empty($order) && $userModel->returnCode(false, '订单不存在'); // 保存微信服务器返回的签名sign $dataSign = $data['sign']; // sign不参与签名算法 unset($data['sign']); // 生成签名 $sign = $userModel->makeSign($data); // 判断签名是否正确 判断支付状态 if ( ($sign !== $dataSign) || ($data['return_code'] !== 'SUCCESS') || ($data['result_code'] !== 'SUCCESS') ) { $userModel->returnCode(false, '签名失败'); } // 订单支付成功业务处理 $openid = Db::name('wx_users')->where(['users_id'=>$order['users_id']])->getField('openid'); $PostData = [ 'openid' => $openid, 'users_id' => $order['users_id'], 'order_id' => $order['order_id'], 'order_code' => $order['order_code'], ]; $redata = model('v1.Shop')->WechatAppletsPayDealWith($PostData, true); if (isset($redata['code']) && empty($redata['code'])) { $userModel->returnCode(false, $redata['msg']); } // 返回状态 $userModel->returnCode(true, 'OK'); } /** * 微信支付成功异步通知 (users_money表) * @throws BaseException * @throws \Exception * @throws \think\exception\DbException */ public function wxpay_notify_users() { $userModel = model('v1.User'); if (!$xml = file_get_contents('php://input')) { $userModel->returnCode(false, 'Not found DATA'); } // 将服务器返回的XML数据转化为数组 $data = $userModel->fromXml($xml); // 订单信息 $order = Db::name("users_money")->where(['order_number' => $data['out_trade_no']])->find(); empty($order) && $userModel->returnCode(false, '订单不存在'); // 保存微信服务器返回的签名sign $dataSign = $data['sign']; // sign不参与签名算法 unset($data['sign']); // 生成签名 $sign = $userModel->makeSign($data); // 判断签名是否正确 判断支付状态 if ( ($sign !== $dataSign) || ($data['return_code'] !== 'SUCCESS') || ($data['result_code'] !== 'SUCCESS') ) { $userModel->returnCode(false, '签名失败'); } // 订单支付成功业务处理 $openid = Db::name('wx_users')->where(['users_id'=>$order['users_id']])->getField('openid'); $PostData = [ 'openid' => $openid, 'users_id' => $order['users_id'], 'moneyid' => $order['moneyid'], 'order_number' => $order['order_number'], ]; $redata = model('v1.Shop')->WechatAppletsPayDealWithUsersMoney($PostData, true); if (isset($redata['code']) && empty($redata['code'])) { $userModel->returnCode(false, $redata['msg']); } // 返回状态 $userModel->returnCode(true, 'OK'); } /** * 微信支付成功异步通知 (meida_order表) * @throws BaseException * @throws \Exception * @throws \think\exception\DbException */ public function wxpay_notify_media() { $userModel = model('v1.User'); if (!$xml = file_get_contents('php://input')) { $userModel->returnCode(false, 'Not found DATA'); } // 将服务器返回的XML数据转化为数组 $data = $userModel->fromXml($xml); // 订单信息 $order = Db::name("meida_order")->where(['order_code' => $data['out_trade_no']])->find(); empty($order) && $userModel->returnCode(false, '订单不存在'); // 保存微信服务器返回的签名sign $dataSign = $data['sign']; // sign不参与签名算法 unset($data['sign']); // 生成签名 $sign = $userModel->makeSign($data); // 判断签名是否正确 判断支付状态 if ( ($sign !== $dataSign) || ($data['return_code'] !== 'SUCCESS') || ($data['result_code'] !== 'SUCCESS') ) { $userModel->returnCode(false, '签名失败'); } // 订单支付成功业务处理 $openid = Db::name('wx_users')->where(['users_id'=>$order['users_id']])->getField('openid'); $PostData = [ 'openid' => $openid, 'users_id' => $order['users_id'], 'order_id' => $order['order_id'], 'order_code' => $order['order_code'], ]; $redata = model('v1.Shop')->WechatAppletsPayDealWithMedia($PostData, true); if (isset($redata['code']) && empty($redata['code'])) { $userModel->returnCode(false, $redata['msg']); } // 返回状态 $userModel->returnCode(true, 'OK'); } // 生成商品二维码海报 public function createGoodsShareQrcodePoster() { if (IS_AJAX_POST) { // 海报模型 $diyminiproMallPosterModel = model('v1.Poster'); // 调用接口生成海报 $post = input('post.'); $post['aid'] = intval($post['aid']); $post['typeid'] = intval($post['typeid']); $users = $this->getUser(false); $post['mid'] = !empty($users['users_id']) ? $users['users_id'] : 0; if (!empty($users['dealer']) && !empty($users['dealer']['users_id']) && !empty($users['dealer']['dealer_id'])) { $post['users_id'] = intval($users['dealer']['users_id']); $post['dealer_id'] = intval($users['dealer']['dealer_id']); } $qrcodePoster = $diyminiproMallPosterModel->getCreateGoodsShareQrcodePoster($post, 2); if (!empty($qrcodePoster) && !empty($qrcodePoster['poster'])) { $this->success('海报生成成功', null, $qrcodePoster); } else { $this->error('生成失败'.$qrcodePoster['errmsg']); } } } // 生成文章二维码海报 public function createArticleShareQrcodePoster() { if (IS_AJAX_POST) { // 海报模型 $diyminiproMallPosterModel = model('v1.Poster'); // 调用接口生成海报 $post = input('post.'); $post['aid'] = intval($post['aid']); $post['typeid'] = intval($post['typeid']); $QrcodePoster = $diyminiproMallPosterModel->GetCreateGoodsShareQrcodePoster($post, 1); if (!empty($QrcodePoster) && !empty($QrcodePoster['poster'])) { $this->success('海报生成成功', null, $QrcodePoster); } else { $this->error('生成失败'.$QrcodePoster['errmsg']); } } } // 提交文章评论 public function submitArticleComment() { if (IS_AJAX) { if (!is_dir('./weapp/Comment/')){ $this->error('请先安装评论插件'); } $param = input('param.'); if (empty($param['aid'])) $this->error('数据错误,刷新重试'); if (empty($param['content'])) $this->error('请输入您的评论内容'); $users = $this->getUser(false); // 添加文章评论模型 $res = model('v1.Api')->addArticleComment($param, $users); if (0 < $res['code']) { $this->success($res['msg'], null, ['is_show'=>$res['is_show']]); } else { $this->error($res['msg']); } } } /** * 购物车列表 */ public function shop_cart_list() { if (IS_AJAX) { $users = $this->getUser(false); if (!empty($users)) { // 商城模型 $ShopModel = model('v1.Shop'); // 获取商品信息生成订单并支付 $ShopCart = $ShopModel->ShopCartList($users['users_id'], $users['level_discount'], $users['level_id']); } else { $ShopCart = []; } $this->renderSuccess($ShopCart); } } /** * 上传评论图片 * @return array */ public function uploads() { if (IS_AJAX_POST) { $file_type = input('param.file_type/s',""); $data = func_common('file', 'minicode',$file_type); $is_absolute = input('param.is_absolute/d',0); if ($is_absolute && !empty($data['img_url'])){ $data['img_url'] = get_absolute_url($data['img_url'],'default',true); } $this->success('上传成功!','',$data); } $this->error('非法上传!'); } /** * 获取评论列表 */ public function get_goods_comment_list() { if (IS_AJAX) { $param = input('param.'); // 获取商品信息生成订单并支付 $commentList = model('v1.Api')->getGoodsCommentList($param); $this->success('success','',$commentList); // $this->renderSuccess($commentList); } } /** * 获取秒杀列表 */ public function get_sharp_index() { // 商城模型 $ShopModel = model('v1.Shop'); // 获取秒杀tabbar $tabbar = $ShopModel->GetSharpTabbar(); $SharpList = []; if (!empty($tabbar)){ // 获取秒杀列表 $SharpList = $ShopModel->GetSharpIndex($tabbar[0]['active_time_id']); } $this->renderSuccess(['goodsList'=>$SharpList,'tab'=>$tabbar]); } /** * 获取秒杀商品列表 */ public function get_sharp_goods_index($active_time_id = '', $page = 1) { // 商城模型 $DiyminiproModel = model('v1.Shop'); // 获取秒杀商品分页列表 $SharpList = $DiyminiproModel->GetSharpIndex($active_time_id,$page); $this->renderSuccess(['goodsList'=>$SharpList]); } /** * 获取秒杀商品详情 */ public function get_sharp_goods($aid=0,$active_time_id=0) { // 文档详情 $data = model('v1.Api')->GetSharpGoods($aid); $data['detail']['active_time_id'] = $active_time_id; // 商城模型 $ShopModel = model('v1.User'); // 获取秒杀商品活动场次信息 $data['active'] = $ShopModel->GetSharp($active_time_id,$aid); $this->renderSuccess($data); } //上传头像 public function upload_head_pic() { if (IS_AJAX_POST) { $data = func_common('file', 'minicode'); if (0 == $data['errcode'] && !empty($data['img_url'])){ $data['url'] = $data['img_url']; if (!is_http_url($data['img_url'])) { $data['img_url'] = request()->domain().ROOT_DIR.$data['img_url']; } } $this->success('上传成功!','',$data); } $this->error('非法上传!'); } //获取购物车数量 public function get_cart_total_num() { $data['cart_total_num'] = model('v1.Shop')->getCartTotalNum(); $this->renderSuccess($data); } /** * 获取限时折扣列表 */ public function get_discount_index() { $param = input('param.'); if (empty($param['active_id'])){ $this->error('缺少必要参数!'); } // 商城模型 $ShopModel = model('v1.Shop'); $DiscountGoodsList = $ShopModel->GetDiscountIndex($param); $this->renderSuccess(['goodsList'=>$DiscountGoodsList]); } /** * 获取限时折扣商品详情 */ public function get_discount_goods($aid=0,$active_id=0) { // 文档详情 $data = model('v1.Api')->GetDiscountGoods($aid); $data['detail']['active_id'] = $active_id; // 商城模型 $ShopModel = model('v1.Shop'); // 获取秒杀商品活动场次信息 $data['active'] = $ShopModel->GetDiscount($active_id); $this->renderSuccess($data); } /** * 添加我的浏览足迹 */ public function set_footprint() { $aid = input('param.aid/d'); $users = $this->getUser(false); if (empty($users['users_id']) || empty($aid)) { $this->success('不达到记录的条件'); } $users_id = intval($users['users_id']); //查询标题模型缩略图信息 $arc = Db::name('archives') ->field('aid,channel,typeid,title,litpic') ->find($aid); if (!empty($arc)) { $count = Db::name('users_footprint')->where([ 'users_id' => $users_id, 'aid' => $aid, ])->count(); if (empty($count)) { // 足迹记录条数限制 $user_footprint_limit = config('global.user_footprint_limit'); if (!$user_footprint_limit) { $user_footprint_limit = 100; config('global.user_footprint_limit',$user_footprint_limit); } $user_footprint_record = Db::name('users_footprint')->where(['users_id'=>$users_id])->count("id"); if ($user_footprint_record == $user_footprint_limit) { Db::name('users_footprint')->where(['users_id' => $users_id])->order("update_time ASC")->limit(1)->delete(); }elseif ($user_footprint_record > $user_footprint_limit) { $del_count = $user_footprint_record-$user_footprint_limit+1; $del_ids = Db::name('users_footprint')->field("id")->where(['users_id' => $this->users_id])->order("update_time ASC")->limit($del_count)->select(); $del_ids = get_arr_column($del_ids,'id'); Db::name('users_footprint')->where(['id' => ['IN',$del_ids]])->delete(); } $arc['users_id'] = $users_id; $arc['lang'] = $this->home_lang; $arc['add_time'] = getTime(); $arc['update_time'] = getTime(); Db::name('users_footprint')->add($arc); } else { Db::name('users_footprint')->where([ 'users_id' => $users_id, 'aid' => $aid ])->update([ 'update_time' => getTime(), ]); } $this->success('保存成功'); } } /** * 留言栏目数据提交 */ public function guestbook($typeid = '') { $param = input('param.'); if (IS_POST && !isset($param['apiGuestbookform'])) { $post = input('post.'); $typeid = !empty($post['typeid']) ? intval($post['typeid']) : $typeid; $form_type = !empty($post['form_type']) ? intval($post['form_type']) : 0; if (empty($typeid)) $this->error('post接口缺少typeid的参数与值!'); /*留言间隔限制*/ $channel_guestbook_interval = tpSetting('channel_guestbook.channel_guestbook_interval'); $channel_guestbook_interval = is_numeric($channel_guestbook_interval) ? intval($channel_guestbook_interval) : 60; if (0 < $channel_guestbook_interval) { $map = array( 'ip' => clientIP(), 'typeid' => $typeid, 'form_type' => $form_type, 'add_time' => array('gt', getTime() - $channel_guestbook_interval), ); $count = Db::name('guestbook')->where($map)->count('aid'); if (!empty($count)) { $this->error("同一个IP在{$channel_guestbook_interval}秒之内不能重复提交!"); } } /*end*/ // 提取表单令牌的token变量名 $token = '__token__'; foreach ($post as $key => $val) { if (preg_match('/^__token__/i', $key)) { $token = $key; continue; } } //判断必填项 $ContentArr = []; // 添加站内信所需参数 foreach ($post as $key => $value) { if (stripos($key, "attr_") !== false) { //处理得到自定义属性id $attr_id = substr($key, 5); $attr_id = intval($attr_id); $ga_data = Db::name('guestbook_attribute')->where([ 'attr_id' => $attr_id, ])->find(); if ($ga_data['required'] == 1 && empty($value)) { $this->error($ga_data['attr_name'] . '不能为空!'); } if ($ga_data['validate_type'] == 6 && !empty($value)) { $pattern = "/^1\d{10}$/"; if (!preg_match($pattern, $value)) { $this->error($ga_data['attr_name'] . '格式不正确!'); } } elseif ($ga_data['validate_type'] == 7 && !empty($value)) { $pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i"; if (preg_match($pattern, $value) == false) { $this->error($ga_data['attr_name'] . '格式不正确!'); } } // 添加站内信所需参数 array_push($ContentArr, $value); } } $users = $this->getUser(false); $newData = array( 'typeid' => $typeid, 'form_type' => $form_type, 'users_id' => !empty($users['users_id']) ? $users['users_id'] : 0, 'channel' => 8, 'ip' => clientIP(), 'lang' => get_main_lang(), 'add_time' => getTime(), 'update_time' => getTime(), ); $data = array_merge($post, $newData); /*表单令牌*/ $token_value = !empty($data[$token]) ? $data[$token] : ''; $session_path = \think\Config::get('session.path'); $session_file = ROOT_PATH . $session_path . "/sess_".str_replace('__token__', '', $token); $filesize = @filesize($session_file); if(file_exists($session_file) && !empty($filesize)) { $fp = fopen($session_file, 'r'); $token_v = fread($fp, $filesize); fclose($fp); if ($token_v != $token_value) { $this->error('表单令牌无效!'); } } else { $this->error('表单令牌无效!'); } /*end*/ $guestbookRow = []; /*处理是否重复表单数据的提交*/ $formdata = $data; foreach ($formdata as $key => $val) { if (in_array($key, ['typeid', 'lang']) || preg_match('/^attr_(\d+)$/i', $key)) { continue; } unset($formdata[$key]); } $md5data = md5(serialize($formdata)); $data['md5data'] = $md5data; $guestbookRow = M('guestbook')->field('aid')->where(['md5data' => $md5data])->find(); /*--end*/ $aid = !empty($guestbookRow['aid']) ? $guestbookRow['aid'] : 0; if (empty($guestbookRow)) { // 非重复表单的才能写入数据库 $aid = M('guestbook')->insertGetId($data); if ($aid > 0) { $res = model('v1.Api')->saveGuestbookAttr($post, $aid, $typeid, $form_type); if ($res){ $this->error($res); } } } else { // 存在重复数据的表单,将在后台显示在最前面 Db::name('guestbook')->where('aid', $aid)->update([ 'add_time' => getTime(), 'update_time' => getTime(), ]); } @unlink($session_file); // 发送站内信给后台 SendNotifyMessage($ContentArr, 1, 1, 0); // 发送留言短信 $this->sendGbookSms(); $this->renderSuccess(['aid'=>$aid], '提交成功'); } $this->error('请求错误!'); } /** * 获取下级地区 */ public function get_region() { if (IS_AJAX) { $pid = input('pid/d', 0); $res = Db::name('region')->where('parent_id',$pid)->select(); if (!empty($res)){ array_unshift($res,['id'=>'','name'=>'请选择']); } $this->success('请求成功', null, $res); } } //问题列表 public function get_ask_list() { $data = model('v1.Ask')->getAskList(); $this->renderSuccess($data); } //问题类型列表 public function get_ask_type_list(){ $typeList = model('v1.Ask')->getTypeList(); $data['typeList'] = $typeList; $this->renderSuccess($data); } //问题详情 public function get_ask_details() { $users = $this->getUser(false); $data = model('v1.Ask')->GetAskDetails($users); $this->success('success','',$data); } /** * 索引页 */ public function repertory() { $page = input('param.page/d', 1); $data = model('v1.Api')->getRepertory($page); $this->success('请求成功', null, $data); } //获取表单令牌 public function get_token() { $type = input('param.type/s'); $type = !empty($type) ? $type : 'mobile'; /*表单令牌*/ $token_name = md5($type.'_token_'.md5(getTime().uniqid(mt_rand(), TRUE))); $token_value = md5($_SERVER['REQUEST_TIME_FLOAT']); $session_path = \think\Config::get('session.path'); $session_file = ROOT_PATH . $session_path . "/sess_".$token_name; $fp = fopen($session_file, "w+"); if (!empty($fp)) { if (fwrite($fp, $token_value)) { fclose($fp); } } else { file_put_contents ( $session_file, $token_value); } /*end*/ $result = array( 'token' => [ 'name' => '__token__'.$token_name, 'value' => $token_value, ], ); $this->success('success','',$result); } /** * 手机短信发送 */ public function send_mobile_code() { // 超时后,断掉发送 function_exists('set_time_limit') && set_time_limit(5); // \think\Session::pause(); // 暂停session,防止session阻塞机制 // 发送手机验证码 if (IS_AJAX_POST) { $post = input('post.'); $mobile = $post['mobile']; if (empty($mobile)) $this->error('手机号不能为空!'); if (!check_mobile($mobile)) $this->error('手机号格式不正确!'); $scene = !empty($post['scene']) ? $post['scene'] : 0; // 提取表单令牌的token变量名 $token = '__token__'; foreach ($post as $key => $val) { if (preg_match('/^__token__/i', $key)) { $token = $key; continue; } } /*表单令牌*/ $token_value = !empty($post[$token]) ? $post[$token] : ''; $session_path = \think\Config::get('session.path'); $session_file = ROOT_PATH . $session_path . "/sess_".str_replace('__token__', '', $token); $filesize = @filesize($session_file); if(file_exists($session_file) && !empty($filesize)) { $fp = fopen($session_file, 'r'); $token_v = fread($fp, $filesize); fclose($fp); if ($token_v != $token_value) { $this->error('表单令牌无效!'); } } else { $this->error('表单令牌无效!'); } /*end*/ /*是否存在手机号码*/ $where = ['mobile' => $mobile]; $Result = Db::name('users')->where($where)->count(); /* END */ if (0 == $scene) { if (!empty($Result)) $this->error('手机号码已注册'); } else if (2 == $scene) { if (empty($Result)) $this->error('手机号码未注册'); } else if (4 == $scene) { if (empty($Result)) $this->error('手机号码不存在'); } else { if (!empty($Result)) $this->error('手机号码已存在'); } /*是否允许再次发送*/ $where = [ 'mobile' => $mobile, 'source' => $scene, 'status' => 1, 'is_use' => 0, 'add_time' => ['>', getTime() - 120] ]; $Result = Db::name('sms_log')->where($where)->order('id desc')->count(); if (!empty($Result) && false == config('sms_debug')) $this->error('120秒内只能发送一次!'); /* END */ /*发送并返回结果*/ $Result = sendSms($scene, $mobile, array('content' => mt_rand(1000, 9999))); if (intval($Result['status']) == 1) { @unlink($session_file); $this->success('发送成功!'); } else { $this->error($Result['msg']); } /* END */ } } /** * 用户手机号注册 */ public function users_mobile_reg() { if (empty($this->globalConfig['web_users_switch'])) { $this->error('后台会员中心尚未开启!'); } $userModel = model('v1.User'); return $this->renderSuccess([ 'users_id' => $userModel->mobile_reg(input('post.', null, 'htmlspecialchars_decode')), 'token' => $userModel->getToken() ]); } /** * 用户账号密码注册 */ public function users_account_reg() { if (empty($this->globalConfig["web_users_switch"])) { $this->error("后台会员中心尚未开启!"); } $userModel = model("v1.User"); return $this->renderSuccess([ "users_id" => $userModel->account_reg(input("post.", null, "htmlspecialchars_decode")), "token" => $userModel->getToken() ]); } /** * 用户手机号验证码/手机号密码登录 */ public function users_mobile_login() { if (empty($this->globalConfig['web_users_switch'])) { $this->error('后台会员中心尚未开启!'); } $userModel = model('v1.User'); return $this->renderSuccess([ 'users_id' => $userModel->mobile_login(input('post.', null, 'htmlspecialchars_decode')), 'token' => $userModel->getToken() ]); } /** * 用户账号密码登录 */ public function users_account_login() { if (empty($this->globalConfig['web_users_switch'])) { $this->error('后台会员中心尚未开启!'); } $userModel = model('v1.User'); return $this->renderSuccess([ 'users_id' => $userModel->account_login(input('post.', null, 'htmlspecialchars_decode')), 'token' => $userModel->getToken() ]); } // 获取自由表单 public function get_form() { $data = $this->apiLogic->taglibData(); $this->renderSuccess($data); } /** * 记录视频播放进程 */ public function record_media_process() { $aid = input('post.aid/d', 0); $file_id = input('post.file_id/d', 0); $timeDisplay = input('post.timeDisplay/d', 0); $users = $this->getUser(false); if (empty($users) || 0 == $timeDisplay) { $this->success('success'); } $users_id = intval($users['users_id']); $where = ['users_id' => $users_id, 'aid' => $aid, 'file_id' => $file_id]; $count = Db::name('media_play_record')->where($where)->find(); $data = [ 'users_id' => $users_id, 'aid' => intval($aid), 'file_id' => intval($file_id), 'play_time' => $timeDisplay, 'update_time' => getTime(), ]; if (!empty($count)) { $timeDisplay = $timeDisplay + $count['play_time']; $file_time = Db::name('media_file')->where('file_id', $file_id)->value('file_time'); $data['play_time'] = $timeDisplay > $file_time ? $file_time : $timeDisplay; $data['play_time'] = intval($data['play_time']); //更新 Db::name('media_play_record')->where($where)->update($data); } else { $data['add_time'] = getTime(); Db::name('media_play_record')->insert($data); } $this->success('success'); } // 积分商城插件操作(集合方法) public function points_shop_action() { if (IS_AJAX) { // 是否安装积分商城插件 $weappInfo = model('ShopPublicHandle')->getWeappPointsShop(); if (!empty($weappInfo)) { // 调用积分商城逻辑层方法 $users = $this->getUser(false); $pointsShopLogic = new \app\plugins\logic\PointsShopLogic($users); $pointsShopLogic->pointsShopAction($weappInfo); } } $this->error('请求错误!'); } // 开源小程序插件操作(集合方法) public function applets_weapp_action() { if (IS_AJAX) { // 是否安装开源小程序插件 $weappInfo = model('ShopPublicHandle')->getWeappInfo('Suibian'); if (!empty($weappInfo)) { // 调用开源小程序逻辑层方法 $users = $this->getUser(false); $suibianLogic = new \app\plugins\logic\SuibianLogic($users); $suibianLogic->suibianAction($weappInfo); } } $this->error('请求错误!'); } }