Files
2019-02-28 19:48:21 +08:00

472 lines
17 KiB
PHP

<?php
/**
* tpshop
* ============================================================================
* 版权所有 2015-2027 深圳搜豹网络科技有限公司,并保留所有权利。
* 网站地址: http://www.tp-shop.cn
* ----------------------------------------------------------------------------
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
* 不允许对程序代码以任何形式任何目的的再发布。
* 采用最新Thinkphp5助手函数特性实现单字母函数M D U等简写方式
* ============================================================================
* Author: JY
* Date: 2015-09-23
*/
namespace app\home\controller;
use app\common\logic\User;
use app\common\logic\UsersLogic;
use app\common\model\Shop;
use app\common\model\Users;
use app\common\util\TpshopException;
use think\Db;
use think\Session;
use think\Verify;
use think\Cookie;
class Api extends Base
{
public $send_scene;
public function _initialize()
{
parent::_initialize();
session('user');
}
/*
* 获取地区
*/
public function getRegion()
{
$parent_id = I('get.parent_id/d');
$selected = I('get.selected', 0);
$data = M('region')->where("parent_id", $parent_id)->select();
$html = '';
if ($data) {
foreach ($data as $h) {
if ($h['id'] == $selected) {
$html .= "<option value='{$h['id']}' selected>{$h['name']}</option>";
}
$html .= "<option value='{$h['id']}'>{$h['name']}</option>";
}
}
echo $html;
}
public function getTwon()
{
$parent_id = I('get.parent_id/d');
$data = M('region')->where("parent_id", $parent_id)->select();
$html = '';
if ($data) {
foreach ($data as $h) {
$html .= "<option value='{$h['id']}'>{$h['name']}</option>";
}
}
if (empty($html)) {
echo '0';
} else {
echo $html;
}
}
/**
* 获取省
*/
public function getProvince()
{
$province = Db::name('region')->field('id,name')->where(array('level' => 1))->cache(true)->select();
$res = array('status' => 1, 'msg' => '获取成功', 'result' => $province);
exit(json_encode($res));
}
public function area()
{
$province_id = input('province_id/d');
$city_id = input('city_id/d');
$district_id = input('district_id/d');
$province_list = Db::name('region')->field('id,name')->where('level', 1)->cache(true)->select();
$city_list = Db::name('region')->field('id,name')->where('parent_id', $province_id)->cache(true)->select();
$district_list = Db::name('region')->field('id,name')->where('parent_id', $city_id)->cache(true)->select();
$town_list = Db::name('region')->field('id,name')->where('parent_id', $district_id)->cache(true)->select();
$this->ajaxReturn(['status' => 1, 'msg' => '获取成功',
'result' => ['province_list' => $province_list, 'city_list' => $city_list, 'district_list' => $district_list, 'town_list' => $town_list]]);
}
/**
* 获取市或者区
*/
public function getRegionByParentId()
{
$parent_id = input('parent_id');
$res = array('status' => 0, 'msg' => '获取失败,参数错误', 'result' => '');
if ($parent_id) {
$region_list = Db::name('region')->field('id,name')->where(['parent_id' => $parent_id])->select();
$res = array('status' => 1, 'msg' => '获取成功', 'result' => $region_list);
}
exit(json_encode($res));
}
/*
* 获取下级分类
*/
public function get_category()
{
$parent_id = I('get.parent_id/d'); // 商品分类 父id
$list = M('goods_category')->where("parent_id", $parent_id)->select();
if ($list) {
$this->ajaxReturn(['status' => 1, 'msg' => '获取成功!', 'result' => $list]);
}
$this->ajaxReturn(['status' => -1, 'msg' => '获取失败!', 'result' =>[]]);
}
/**
* 前端发送短信方法: APP/WAP/PC 共用发送方法
*/
public function send_validate_code()
{
$this->send_scene = C('SEND_SCENE');
$type = I('type');
$scene = I('scene'); //发送短信验证码使用场景
$mobile = I('mobile');
$sender = I('send');
$verify_code = I('verify_code');
$mobile = !empty($mobile) ? $mobile : $sender;
$session_id = I('unique_id', session_id());
session("scene", $scene);
//注册
if ($scene == 1 && !empty($verify_code)) {
$verify = new Verify();
if (!$verify->check($verify_code, 'user_reg')) {
ajaxReturn(array('status' => -1, 'msg' => '图像验证码错误'));
}
}
if ($type == 'email') {
//发送邮件验证码
$logic = new UsersLogic();
$res = $logic->send_email_code($sender);
ajaxReturn($res);
} else {
//发送短信验证码
$res = checkEnableSendSms($scene);
if ($res['status'] != 1) {
ajaxReturn($res);
}
//判断是否存在验证码
$data = M('sms_log')->where(array('mobile' => $mobile, 'session_id' => $session_id, 'status' => 1))->order('id DESC')->find();
//获取时间配置
$sms_time_out = tpCache('sms.sms_time_out');
$sms_time_out = $sms_time_out ? $sms_time_out : 120;
//120秒以内不可重复发送
if ($data && (time() - $data['add_time']) < $sms_time_out) {
$return_arr = array('status' => -1, 'msg' => $sms_time_out . '秒内不允许重复发送');
ajaxReturn($return_arr);
}
//随机一个验证码
$code = rand(1000, 9999);
$params['code'] = $code;
//发送短信
$resp = sendSms($scene, $mobile, $params, $session_id);
if ($resp['status'] == 1) {
//发送成功, 修改发送状态位成功
M('sms_log')->where(array('mobile' => $mobile, 'code' => $code, 'session_id' => $session_id, 'status' => 0))->save(array('status' => 1));
$return_arr = array('status' => 1, 'msg' => '发送成功,请注意查收');
} else {
$return_arr = array('status' => -1, 'msg' => '发送失败' . $resp['msg']);
}
ajaxReturn($return_arr);
}
}
/**
* 验证短信验证码: APP/WAP/PC 共用发送方法
*/
public function check_validate_code()
{
$code = I('post.code');
$mobile = I('mobile');
$send = I('send');
$sender = empty($mobile) ? $send : $mobile;
$type = I('type');
$session_id = I('unique_id', session_id());
$scene = I('scene', -1);
$logic = new UsersLogic();
$res = $logic->check_validate_code($code, $sender, $type, $session_id, $scene);
ajaxReturn($res);
}
/**
* 检测手机号是否已经存在
*/
public function issetMobile()
{
$mobile = I("mobile", '0');
$users = M('users')->where('mobile', $mobile)->find();
if ($users)
exit ('1');
else
exit ('0');
}
public function issetMobileOrEmail()
{
$mobile = I("mobile", '0');
$users = M('users')->where("email", $mobile)->whereOr('mobile', $mobile)->find();
if ($users)
exit ('1');
else
exit ('0');
}
/**
* 查询物流
*/
public function queryExpress()
{
$express_switch = tpCache('express.express_switch');
$express_switch_input = input('express_switch/d');
$express_switch = is_null($express_switch_input) ? $express_switch : $express_switch_input;
if ($express_switch == 1) {
require_once(PLUGIN_PATH . 'kdniao/kdniao.php');
$kdniao = new \kdniao();
$data['OrderCode'] = empty(I('order_sn')) ? date('YmdHis') : I('order_sn');
$data['ShipperCode'] = I('shipping_code');
$data['LogisticCode'] = I('invoice_no');
$res = $kdniao->getOrderTracesByJson(json_encode($data));
$res = json_decode($res, true);
if ($res['State'] == 3) {
foreach ($res['Traces'] as $val) {
$tmp['context'] = $val['AcceptStation'];
$tmp['time'] = $val['AcceptTime'];
$res['data'][] = $tmp;
}
$res['status'] = "200";
} else {
$res['message'] = $res['Reason'];
}
return json($res);
} else {
$shipping_code = input('shipping_code');
$invoice_no = input('invoice_no');
if (empty($shipping_code) || empty($invoice_no)) {
return json(['status' => 0, 'message' => '参数有误', 'result' => '']);
}
return json(queryExpress($shipping_code, $invoice_no));
}
}
/**
* 检查订单状态
*/
public function check_order_pay_status()
{
$order_id = I('order_id/d');
if (empty($order_id)) {
$res = ['message' => '参数错误', 'status' => -1, 'result' => ''];
$this->AjaxReturn($res);
}
$recharge = I('recharge/d');
if ($recharge == 1) {
// 充值查询
$order = M('recharge')->field('pay_status')->where(['order_id' => $order_id])->find();
if ($order['pay_status'] == 1) {
$res = ['message' => '已支付', 'status' => 1, 'result' => $order];
} else {
$res = ['message' => '未支付', 'status' => 0, 'result' => $order];
}
}else{
$order = M('order')->field('pay_status')->where(['order_id' => $order_id])->find();
if ($order['pay_status'] != 0) {
$res = ['message' => '已支付', 'status' => 1, 'result' => $order];
} else {
$res = ['message' => '未支付', 'status' => 0, 'result' => $order];
}
}
$this->AjaxReturn($res);
}
/**
* 广告位js
*/
public function ad_show()
{
$pid = I('pid/d', 1);
$where = array(
'pid' => $pid,
'enable' => 1,
'start_time' => array('lt', strtotime(date('Y-m-d H:00:00'))),
'end_time' => array('gt', strtotime(date('Y-m-d H:00:00'))),
);
$ad = D("ad")->where($where)->order("orderby desc")->cache(true, TPSHOP_CACHE_TIME)->find();
$this->assign('ad', $ad);
return $this->fetch();
}
/**
* 搜索关键字
* @return array
*/
public function searchKey()
{
$searchKey = input('key');
$searchKeyList = Db::name('search_word')
->where('keywords', 'like', $searchKey . '%')
->whereOr('pinyin_full', 'like', $searchKey . '%')
->whereOr('pinyin_simple', 'like', $searchKey . '%')
->limit(10)
->select();
if ($searchKeyList) {
return json(['status' => 1, 'msg' => '搜索成功', 'result' => $searchKeyList]);
} else {
return json(['status' => 0, 'msg' => '没记录', 'result' => $searchKeyList]);
}
}
/**
* 根据ip设置获取的地区来设置地区缓存
*/
public function doCookieArea()
{
// $ip = '183.147.30.238';//测试ip
$address = input('address/a', []);
if (empty($address) || empty($address['province'])) {
$this->setCookieArea();
return;
}
$province_id = Db::name('region')->where(['level' => 1, 'name' => ['like', '%' . $address['province'] . '%']])->limit('1')->value('id');
if (empty($province_id)) {
$this->setCookieArea();
return;
}
if (empty($address['city'])) {
$city_id = Db::name('region')->where(['level' => 2, 'parent_id' => $province_id])->limit('1')->order('id')->value('id');
} else {
$city_id = Db::name('region')->where(['level' => 2, 'parent_id' => $province_id, 'name' => ['like', '%' . $address['city'] . '%']])->limit('1')->value('id');
}
if (empty($address['district'])) {
$district_id = Db::name('region')->where(['level' => 3, 'parent_id' => $city_id])->limit('1')->order('id')->value('id');
} else {
$district_id = Db::name('region')->where(['level' => 3, 'parent_id' => $city_id, 'name' => ['like', '%' . $address['district'] . '%']])->limit('1')->value('id');
}
$this->setCookieArea($province_id, $city_id, $district_id);
}
/**
* 设置地区缓存
* @param $province_id
* @param $city_id
* @param $district_id
*/
private function setCookieArea($province_id = 1, $city_id = 2, $district_id = 3)
{
Cookie::set('province_id', $province_id);
Cookie::set('city_id', $city_id);
Cookie::set('district_id', $district_id);
}
public function shop()
{
$province_id = input('province_id/d', 0);
$city_id = input('city_id/d', 0);
$district_id = input('district_id/d', 0);
$shop_address = input('shop_address/s', '');
$longitude = input('longitude/s', 0);
$latitude = input('latitude/s', 0);
if (empty($province_id) && empty($province_id) && empty($district_id)) {
$this->ajaxReturn([]);
}
$where = ['deleted' => 0, 'shop_status' => 1, 'province_id' => $province_id, 'city_id' => $city_id, 'district_id' => $district_id];
$field = '*';
$order = 'shop_id desc';
if ($longitude) {
$field .= ',round(SQRT((POW(((' . $longitude . ' - longitude)* 111),2))+ (POW(((' . $latitude . ' - latitude)* 111),2))),2) AS distance';
$order = 'distance ASC';
}
if($shop_address){
$where['shop_name|shop_address'] = ['like', '%'.$shop_address.'%'];
}
$Shop = new Shop();
$shop_list = $Shop->field($field)->where($where)->order($order)->select();
$origins = $destinations = [];
if ($shop_list) {
$shop_list = collection($shop_list)->append(['phone','area_list','work_time','work_day'])->toArray();
$shop_list_length = count($shop_list);
for ($shop_cursor = 0; $shop_cursor < $shop_list_length; $shop_cursor++) {
$origin = $latitude . ',' . $longitude;
array_push($origins, $origin);
$destination = $shop_list[$shop_cursor]['latitude'] . ',' . $shop_list[$shop_cursor]['longitude'];
array_push($destinations, $destination);
}
$url = 'http://api.map.baidu.com/routematrix/v2/driving?output=json&origins=' . implode('|', $origins) . '&destinations=' . implode('|', $destinations) . '&ak=Sgg73Hgc2HizzMiL74TUj42o0j3vM5AL';
$result = httpRequest($url, "get");
$data = json_decode($result, true);
if (!empty($data['result'])) {
for ($shop_cursor = 0; $shop_cursor < $shop_list_length; $shop_cursor++) {
$shop_list[$shop_cursor]['distance_text'] = $data['result'][$shop_cursor]['distance']['text'];
}
}else{
for ($shop_cursor = 0; $shop_cursor < $shop_list_length; $shop_cursor++) {
$shop_list[$shop_cursor]['distance_text'] = $data['message'];
}
}
}
$this->ajaxReturn($shop_list);
}
/**
* 检查绑定账号的合法性
*/
public function checkBindMobile()
{
$mobile = input('mobile/s');
if(empty($mobile)){
$this->ajaxReturn(['status' => 0, 'msg' => '参数错误', 'result' => '']);
}
if(!check_mobile($mobile)){
$this->ajaxReturn(['status' => 0, 'msg' => '手机格式错误', 'result' => '']);
}
//1.检查账号密码是否正确
$users = Users::get(['mobile'=>$mobile]);
if (empty($users)) {
$this->ajaxReturn(['status' => 0, 'msg' => '账号不存在', 'result' => '']);
}
$user = new User();
try{
$user->setUser($users);
$user->checkOauthBind();
$this->ajaxReturn(['status' => 1, 'msg' => '该手机可绑定', 'result' => '']);
}catch (TpshopException $t){
$error = $t->getErrorArr();
$this->ajaxReturn($error);
}
}
/**
* 检查注册账号的合法性
*/
public function checkRegMobile()
{
$mobile = input('mobile/s');
if(empty($mobile)){
$this->ajaxReturn(['status' => 0, 'msg' => '参数错误', 'result' => '']);
}
if(!check_mobile($mobile)){
$this->ajaxReturn(['status' => 0, 'msg' => '手机格式错误', 'result' => '']);
}
//1.检查账号密码是否正确
$users = Db::name('users')->where("mobile", $mobile)->find();
if ($users) {
$this->ajaxReturn(['status' => 0, 'msg' => '该手机号已被注册', 'result' => '']);
}
$this->ajaxReturn(['status' => 1, 'msg' => '该手机可注册', 'result' => '']);
}
}