Browse Source

wesmiler 提交

wesmiler 6 months ago
parent
commit
95bad90dd0

+ 2 - 5
app/Http/Controllers/Admin/IndexController.php

@@ -106,17 +106,14 @@ class IndexController extends Backend
 
         RedisService::keyDel("caches:adm*");
         RedisService::keyDel("caches:index*");
-        RedisService::keyDel("caches:good*");
-        RedisService::keyDel("caches:advert*");
         RedisService::keyDel("caches:count*");
         RedisService::keyDel("caches:account*");
         RedisService::keyDel("caches:article*");
         RedisService::keyDel("caches:member*");
         RedisService::keyDel("caches:config*");
-        RedisService::keyDel("caches:deposit*");
+        RedisService::keyDel("caches:mpQrcode*");
         RedisService::keyDel("caches:order*");
-        RedisService::keyDel("laravel_cache:model*");
-        //Cache::flush();
+        RedisService::keyDel(env('APP_NAME').'_cache:*');
         return message(MESSAGE_OK, true);
     }
 

+ 0 - 31
app/Http/Controllers/Api/v1/ArticleController.php

@@ -4,7 +4,6 @@ namespace App\Http\Controllers\Api\v1;
 
 use App\Http\Controllers\Api\webApp;
 use App\Services\Api\ArticleService;
-use App\Services\ConfigService;
 
 /**
  * 司文章管理
@@ -46,36 +45,6 @@ class ArticleController extends webApp
 
 
     /**
-     * 客服推荐数据
-     */
-    public function customRecommend()
-    {
-        $cateList = ArticleService::make()->getCateList(2);
-        $cateId = isset($cateList[0])? $cateList[0]['id'] : 0;
-        $datas = [
-            'category'=> $cateList,
-            'recommend'=> ArticleService::make()->getCustomRecommend($cateId),
-        ];
-        return message(1010, true, $datas);
-    }
-
-    /**
-     * 客服咨询数据
-     */
-    public function custom()
-    {
-        $type = request()->post('type',0);
-        $keyword = request()->post('keyword','');
-        $num = request()->post('num',6);
-        $datas = ArticleService::make()->getCustomRecommend($type, $num, $keyword, $type==0?true:false);
-        if($datas){
-            return message(1010, true, $datas);
-        }else{
-            return message(1009, false);
-        }
-    }
-
-    /**
      * 单页数据
      */
     public function page()

+ 0 - 72
app/Http/Controllers/Api/v1/DepositController.php

@@ -1,72 +0,0 @@
-<?php
-
-namespace App\Http\Controllers\Api\v1;
-
-use App\Http\Controllers\Api\webApp;
-use App\Services\Api\DepositService;
-
-/**
- * 保证金管理
- * @package App\Http\Controllers\Api
- */
-class DepositController extends webApp
-{
-
-    /**
-     * 记录
-     */
-    public function index()
-    {
-        $params =request()->post();
-        $pageSize = request()->post('pageSize', 15);
-        $params['user_id'] = isset($params['user_id'])? $params['user_id'] : $this->userId;
-        if($info = DepositService::make()->getDataList($params,$pageSize)){
-            return message(DepositService::make()->getError(), true, $info);
-        }else{
-            return message(DepositService::make()->getError(), false);
-        }
-    }
-
-    /**
-     * 充值
-     */
-    public function pay()
-    {
-        $params = request()->all();
-        if($info = DepositService::make()->pay($this->userId, $params)){
-            return message(DepositService::make()->getError(), true, $info);
-        }else{
-            return message(DepositService::make()->getError(), false);
-        }
-    }
-
-    /**
-     * 退保
-     */
-    public function refund()
-    {
-        $params = request()->all();
-        if($info = DepositService::make()->refund($this->userId, $params)){
-            return message(DepositService::make()->getError(), true, $info);
-        }else{
-            return message(DepositService::make()->getError(), false);
-        }
-    }
-
-    /**
-     * 详情
-     */
-    public function info()
-    {
-        $id = request()->post('id',0);
-        if($id<=0){
-            return message(1036, false);
-        }
-        $info = DepositService::make()->getInfo($id);
-        if($info){
-            return message(1010, true, $info);
-        }else{
-            return message(1009, false);
-        }
-    }
-}

+ 0 - 60
app/Http/Controllers/Api/v1/GoodsController.php

@@ -1,60 +0,0 @@
-<?php
-
-namespace App\Http\Controllers\Api\v1;
-
-use App\Http\Controllers\Api\webApp;
-use App\Services\Api\GoodsService;
-use App\Services\Api\MemberService;
-
-/**
- * 商品管理
- * @package App\Http\Controllers\Api
- */
-class GoodsController extends webApp
-{
-
-    /**
-     * 列表
-     * @return array
-     */
-    public function index()
-    {
-        $params =request()->post();
-        $pageSize = request()->post('pageSize', 12);
-        $params['picker_status'] = 1;
-        $params['user_id'] = $this->userId;
-        $userInfo = MemberService::make()->getInfo($this->userId,[], true);
-        $confirmStatus = isset($userInfo['confirm_status'])? $userInfo['confirm_status'] : 0;
-        $pickerStatus = isset($userInfo['picker_status'])? $userInfo['picker_status'] : 0;
-        if($confirmStatus != 1 || $pickerStatus!= 1){
-            return message(2043, false);
-        }
-        $datas = GoodsService::make()->getDataList($params, $pageSize);
-        return message(1010, true, $datas);
-    }
-
-    /**
-     * 详情
-     */
-    public function info()
-    {
-        $params = request()->all();
-        $id = isset($params['id'])? intval($params['id']) : 0;
-        if(empty($id)){
-            return message(1036, false);
-        }
-
-        $userInfo = MemberService::make()->getInfo($this->userId,[], true);
-        $confirmStatus = isset($userInfo['confirm_status'])? $userInfo['confirm_status'] : 0;
-        $pickerStatus = isset($userInfo['picker_status'])? $userInfo['picker_status'] : 0;
-        if($confirmStatus != 1 || $pickerStatus!= 1){
-            return message(2043, false,[],405);
-        }
-
-        if($info = GoodsService::make()->getInfo($id)){
-            return message(1010, true, $info);
-        }else{
-            return message(1009, false);
-        }
-    }
-}

+ 1 - 0
app/Http/Controllers/Api/v1/IndexController.php

@@ -7,6 +7,7 @@ use App\Services\Api\AccountService;
 use App\Services\Api\MemberService;
 use App\Services\Api\OrderService;
 use App\Services\ConfigService;
+use App\Services\MpService;
 use App\Services\RedisService;
 
 /**

+ 9 - 6
app/Http/Controllers/Api/v1/LoginController.php

@@ -6,6 +6,7 @@ use App\Http\Controllers\Api\webApp;
 use App\Http\Validator\MemberValidator;
 use App\Services\Api\MemberService;
 use App\Services\ConfigService;
+use App\Services\MpService;
 use App\Services\RedisService;
 use App\Services\SmsService;
 use App\Services\WechatService;
@@ -39,22 +40,24 @@ class LoginController extends webApp
     }
 
     /**
-     * 账号注册
+     * 小程序授权登录
+     * @param MemberValidator $validator
      * @return array
      */
-    public function register(MemberValidator $validator)
+    public function mpAuth(MemberValidator $validator)
     {
         $params = request()->all();
-        $params = $validator->check($params, 'register');
+        $params = $validator->check($params, 'mp');
         if (!is_array($params)) {
             return showJson($params, false);
         }
 
-        if(!$result = MemberService::make()->register($params)){
-            return showJson(MemberService::make()->getError(), false);
+        $code = isset($params['code'])? $params['code'] : '';
+        if($result = MemberService::make()->mpAuth($code, $params)){
+            return showJson(MemberService::make()->getError(), true, $result);
         }
 
-        return showJson(MemberService::make()->getError(), true, $result);
+        return showJson(MemberService::make()->getError(), false);
     }
 
     /**

+ 6 - 18
app/Http/Controllers/Api/v1/MemberController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api\v1;
 
 use App\Http\Controllers\Api\webApp;
 use App\Services\Api\MemberService;
+use App\Services\MpService;
 use Illuminate\Http\Request;
 
 /**
@@ -19,6 +20,8 @@ class MemberController extends webApp
      */
     public function info()
     {
+        $url = MpService::make()->getServiceUrl();
+        var_dump($url);
         $userId = request()->post('user_id', 0);
         $info = MemberService::make()->getInfo($userId ? $userId : $this->userId);
         if ($info) {
@@ -28,30 +31,15 @@ class MemberController extends webApp
         }
     }
 
-    /**
-     * 注册资料
-     * @return array
-     */
-    public function profile()
-    {
-        $userId = request()->post('user_id', 0);
-        $field = ['id', 'user_type', 'realname', 'mobile', 'nickname','balance','deposit','car_type','car_number','driving_license','confirm_at','confirm_remark','confirm_status','drivers_license','create_time', 'code', 'openid', 'status', 'avatar'];
-        $info = MemberService::make()->getInfo($userId ? $userId : $this->userId, $field);
-        if ($info) {
-            return showJson(1010, true, $info);
-        } else {
-            return showJson(1004, false, [], '403');
-        }
-    }
 
     /**
-     * 注册资料重新提交
+     * 设置入口类型
      * @return array
      */
-    public function profileModify()
+    public function setEntry()
     {
         $params = request()->all();
-        if (!MemberService::make()->profileModify($this->userId, $params)) {
+        if (!MemberService::make()->setEntry($this->userId, $params)) {
             return showJson(MemberService::make()->getError(), false);
         } else {
             return showJson(1013, true);

+ 5 - 0
app/Http/Controllers/Api/v1/NotifyController.php

@@ -109,4 +109,9 @@ class NotifyController extends webApp
             return message($msg ? $msg : 2635, false);
         }
     }
+
+    public function kf()
+    {
+        RedisService::set("caches:kf:", request()->all(), 600);
+    }
 }

+ 0 - 3
app/Http/Controllers/Api/webApp.php

@@ -11,12 +11,9 @@
 
 namespace App\Http\Controllers\Api;
 
-use App\Helpers\Jwt;
 use App\Http\Controllers\BaseController;
 use App\Models\MemberModel;
-use App\Services\ConfigService;
 use App\Services\RedisService;
-use Illuminate\Support\Facades\DB;
 
 /**
  * 控制器基类

+ 2 - 11
app/Http/Validator/MemberValidator.php

@@ -12,10 +12,6 @@ class MemberValidator extends BaseValidator
         'sms_code' => 'required|min:4|max:6',
         'password' => 'required|pwd|min:6|max:30',
         'realname' => 'required|min:2|max:30',
-        'car_number' => 'required|min:2|max:30',
-        'car_type' => 'required|min:2|max:50',
-        'driving_license' => 'required',
-        'drivers_license' => 'required',
         'scene' => 'required',
         'access_token' => 'required',
 
@@ -44,20 +40,15 @@ class MemberValidator extends BaseValidator
         'mobile' => '手机账号',
         'realname' => '姓名',
         'sms_code' => '验证码',
-        'car_number' => '车牌号码',
-        'car_type' => '车型',
-        'driving_license' => '驾驶证',
-        'drivers_license' => '行驶证',
     ];
 
     // 当前模型所有验证场景
     public static $scenes = [
         'info'=> ['id'],
+        'mp'=> ['code'],
         'wx_login'=> ['openid','access_token'],
         'login'=> ['mobile','password'],
-        'register'=> ['mobile','sms_code','password','realname','car_number','car_type','driving_license','drivers_license'],
-        'confirm'=> ['mobile','realname','car_number','car_type','driving_license','drivers_license'],
-        'modify'=> ['id'],
+        'register'=> ['mobile','sms_code','password'],
         'sms'=> ['mobile','scene'],
         'reset_password'=> ['mobile','password','sms_code'],
     ];

+ 0 - 101
app/Models/GoodsModel.php

@@ -1,101 +0,0 @@
-<?php
-// +----------------------------------------------------------------------
-// | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
-// +----------------------------------------------------------------------
-// | 版权所有 2017~2021 LARAVEL研发中心
-// +----------------------------------------------------------------------
-// | 官方网站: http://www.laravel.cn
-// +----------------------------------------------------------------------
-// | Author: laravel开发员 <laravel.qq.com>
-// +----------------------------------------------------------------------
-
-namespace App\Models;
-
-/**
- * 商品管理-模型
- * @author laravel开发员
- * @since 2020/11/11
- * @package App\Models
- */
-class GoodsModel extends BaseModel
-{
-    // 设置数据表
-    protected $table = 'goods';
-
-    // 封面图
-    public function getThumbAttribute($value)
-    {
-        $thumb = $value? get_image_url($value) : get_image_url('/images/goods/goods.jpeg');
-        return $thumb;
-    }
-
-    public function setThumbAttribute($value)
-    {
-
-        return $value? get_image_path($value) : '';
-    }
-
-    public function getInfo($id)
-    {
-        $info = parent::getInfo($id); // TODO: Change the autogenerated stub
-        if($info){
-
-            $info['shipper_area'][] = isset($info['shipper_province_id'])? $info['shipper_province_id'] : 0;
-            $info['shipper_area'][] = isset($info['shipper_city_id'])? $info['shipper_city_id'] : 0;
-            $info['shipper_area'][] = isset($info['shipper_district_id'])? $info['shipper_district_id'] : 0;
-
-            $info['receiver_area'][] = isset($info['receiver_province_id'])? $info['receiver_province_id'] : 0;
-            $info['receiver_area'][] = isset($info['receiver_city_id'])? $info['receiver_city_id'] : 0;
-            $info['receiver_area'][] = isset($info['receiver_district_id'])? $info['receiver_district_id'] : 0;
-        }
-
-        return $info;
-    }
-
-    /**
-     * 订单信息
-     * @return \Illuminate\Database\Eloquent\Relations\HasOne
-     */
-    public function order()
-    {
-        return $this->hasOne(OrderModel::class, 'goods_id','id')
-            ->where(['mark'=>1])
-            ->whereIn('status',[2,3]);
-    }
-
-    /**
-     * 寄货城市
-     * @return \Illuminate\Database\Eloquent\Relations\HasOne
-     */
-    public function shipperCity()
-    {
-        return $this->hasOne(CityModel::class, 'citycode','shipper_city_id');
-    }
-
-    /**
-     * 寄货县/区
-     * @return \Illuminate\Database\Eloquent\Relations\HasOne
-     */
-    public function shipperDistrict()
-    {
-        return $this->hasOne(CityModel::class, 'citycode','shipper_district_id');
-    }
-
-    /**
-     * 收货城市
-     * @return \Illuminate\Database\Eloquent\Relations\HasOne
-     */
-    public function receiverCity()
-    {
-        return $this->hasOne(CityModel::class, 'citycode','receiver_city_id');
-    }
-
-    /**
-     * 收货县/区
-     * @return \Illuminate\Database\Eloquent\Relations\HasOne
-     */
-    public function receiverDistrict()
-    {
-        return $this->hasOne(CityModel::class, 'citycode','receiver_district_id');
-    }
-}

+ 0 - 53
app/Models/MemberModel.php

@@ -24,59 +24,6 @@ class MemberModel extends BaseModel
     protected $table = 'member';
 
     /**
-     * 仓库
-     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
-     */
-    public function stock()
-    {
-        return $this->belongsTo(StockModel::class, 'stock_id','stock_id')
-            ->where(['mark'=>1])
-            ->select(['stock_id','stock_name','status']);
-    }
-
-    /**
-     * 线路
-     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
-     */
-    public function line()
-    {
-        return $this->belongsTo(LineModel::class, 'line_id','line_id')
-            ->where(['mark'=>1])
-            ->select(['line_id','line_name','status']);
-    }
-
-    /**
-     * 推荐人
-     */
-    public function parent()
-    {
-        return $this->hasOne(MemberModel::class, 'id','parent_id')
-            ->where(['status'=>1,'mark'=>1])
-            ->select(['id', 'nickname', 'username', 'mobile', 'status']);
-    }
-
-    /**
-     * 订单
-     * @return \Illuminate\Database\Eloquent\Relations\HasMany
-     */
-    public function order1()
-    {
-        return $this->hasMany(OrderModel::class, 'user_id','id')
-            ->where(['mark'=>1])->where('status','>=', 1);
-    }
-
-    /**
-     * 待捡货订单
-     * @return \Illuminate\Database\Eloquent\Relations\hasMany
-     */
-    public function order2()
-    {
-        return $this->hasMany(OrderModel::class, 'user_id','id')
-            ->where(['mark'=>1])->where('status', 2);
-    }
-
-
-    /**
      * 获取会员信息
      * @param int $id 会员ID
      * @return array|string

+ 5 - 14
app/Models/OrderModel.php

@@ -25,32 +25,23 @@ class OrderModel extends BaseModel
 
 
     /**
-     * 接单人员
+     * 下单用户
      * @return \Illuminate\Database\Eloquent\Relations\HasOne
      */
     public function user()
     {
         return $this->hasOne(MemberModel::class, 'id','user_id')
-            ->select(['id','mobile','nickname','balance','picker_order_num','picker_status','confirm_status','status']);
+            ->select(['id','openid','mobile','nickname','balance','status']);
     }
 
-    /**
-     * 经手人
-     * @return \Illuminate\Database\Eloquent\Relations\HasOne
-     */
-    public function adminUser()
-    {
-        return $this->hasOne(UserModel::class, 'id','confirm_admin_id')
-            ->select(['id','nickname','mobile','realname','status']);
-    }
 
     /**
-     * 订单商品
+     * VIP
      * @return \Illuminate\Database\Eloquent\Relations\HasOne
      */
-    public function goods()
+    public function vip()
     {
-        return $this->hasOne(GoodsModel::class, 'id','goods_id')->with(['shipperCity','shipperDistrict','receiverCity','receiverDistrict']);
+        return $this->hasOne(VipModel::class, 'id','goods_id');
     }
 
 

+ 6 - 7
app/Services/Api/ArticleService.php

@@ -84,7 +84,7 @@ class ArticleService extends BaseService
     public function getDataList($params, $pageSize = 15)
     {
         $query = $this->getQuery($params);
-        $list = $query->select(['a.id','a.type','a.title','a.cover','a.views','a.create_time','a.content','a.status'])
+        $list = $query->select(['a.id','a.type','a.title','a.cover','a.view_num','a.create_time','a.description','a.status'])
             ->orderBy('a.create_time','desc')
             ->paginate($pageSize > 0 ? $pageSize : 9999999);
         $list = $list? $list->toArray() :[];
@@ -92,7 +92,6 @@ class ArticleService extends BaseService
             foreach($list['data'] as &$item){
                 $item['create_time'] = $item['create_time']? datetime($item['create_time'],'Y-m-d H.i.s') : '';
                 $item['cover'] = $item['cover']? get_image_url($item['cover']) : '';
-                $item['content'] = $item['content']? get_format_content($item['content']) : '';
             }
         }
 
@@ -145,15 +144,15 @@ class ArticleService extends BaseService
         }
 
         $info = $this->model->where(['id'=> $id,'status'=>1,'mark'=>1])
-            ->select(['id','title','cover','views','create_time','type','content'])
+            ->select(['id','title','type','cover','view_num','author','description','create_time','type','content'])
             ->first();
         $info = $info? $info->toArray() : [];
         if($info){
-            $info['create_time'] = $info['create_time']? datetime($info['create_time'],'Y-m-d H.i.s') : '';
+            $info['create_time'] = $info['create_time']? datetime($info['create_time'],'Y-m-d') : '';
             $info['cover'] = get_image_url($info['cover']);
             $info['content'] = get_format_content($info['content']);
-            $this->model->where(['id'=> $id])->increment('views',1);
-            $info['views'] += intval($info['views']);
+            $this->model->where(['id'=> $id])->increment('view_num',1);
+            $info['view_num'] += intval($info['view_num']);
             RedisService::set($cacheKey, $info, rand(5,10));
         }
 
@@ -196,7 +195,7 @@ class ArticleService extends BaseService
 
     /**
      * 获取文章推荐分类
-     * @param int $type 1-普通文章分类,2-客服回复文章分类
+     * @param int $type 1-普通文章分类
      * @return array|mixed
      */
     public function getCateList($type=2)

+ 143 - 195
app/Services/Api/MemberService.php

@@ -15,10 +15,11 @@ use App\Helpers\Jwt;
 use App\Models\ActionLogModel;
 use App\Models\MemberModel;
 use App\Services\BaseService;
+use App\Services\MpService;
 use App\Services\RedisService;
 use App\Services\SmsService;
-use Illuminate\Support\Facades\DB;
 use phpQrcode\QRcode;
+use Illuminate\Support\Facades\DB;
 
 /**
  * 会员管理-服务类
@@ -134,238 +135,162 @@ class MemberService extends BaseService
     }
 
     /**
-     * 重置密码
-     * @param $params
+     * 授权登录
+     * @param $code
+     * @param array $params
      * @return array|false
      */
-    public function forget($params)
+    public function mpAuth($code, $params=[])
     {
         // 账号登录
-        $mobile = isset($params['mobile']) ? trim($params['mobile']) : '';
-        $password = isset($params['password']) ? trim($params['password']) : '';
-        if (empty($params) || empty($mobile) || empty($password)) {
+        if (empty($code)) {
             $this->error = 1041;
             return false;
         }
 
-        // 验证码验证
-        $smsCode = isset($params['sms_code']) ? trim($params['sms_code']) : '';
-        if (!SmsService::make()->check($mobile, $smsCode, 'reset_password')) {
-            $this->error = SmsService::make()->getError();
-            return false;
-        }
-
-        // 验证是否注册
-        if (!$userId = $this->model->where(['mobile' => $mobile, 'mark' => 1])->value('id')) {
-            $this->error = 1038;
-            return false;
-        }
-
-        if(!$this->model->where(['id'=>$userId])->update(['password'=> get_password($password),'update_time'=>time()])){
-            $this->error = 2030;
-            return false;
+        // 获取授权用户信息
+        $phone = '';
+        $pcode = isset($params['pcode'])? $params['pcode'] : '';
+        if($pcode){
+            $phoneData = MpService::make()->getPhoneNumber($pcode);
+            $phoneData = isset($phoneData['phone_info'])? $phoneData['phone_info'] : [];
+            $phone = isset($phoneData['phoneNumber'])? $phoneData['phoneNumber'] : '';
         }
 
-        // 操作日志
-        ActionLogModel::setRecord($userId,['type'=>2,'title'=>'重置密码','content'=>'重置登录密码','module'=>'member']);
-        ActionLogModel::record();
-
-        $this->error = 2031;
-        return true;
-    }
-
-    /**
-     * 账号注册
-     * @param $params
-     * @return array|false
-     */
-    public function register($params)
-    {
-        // 账号登录
-        $mobile = isset($params['mobile']) ? trim($params['mobile']) : '';
-        $password = isset($params['password']) ? trim($params['password']) : '';
-        $nickname = isset($params['nockname']) ? trim($params['nockname']) : '';
-        if (empty($params) || empty($mobile) || empty($password)) {
-            $this->error = 1041;
+        $userInfo = MpService::make()->getUserInfo($code);
+        $openid = isset($userInfo['openid'])? $userInfo['openid'] : '';
+        if(empty($userInfo)){
+            $this->error = MpService::make()->getError();
             return false;
         }
 
-        // 验证码验证
-        $smsCode = isset($params['sms_code'])? trim($params['sms_code']) : '';
-        if (!SmsService::make()->check($mobile, $smsCode, 'register')) {
-            $this->error = SmsService::make()->getError();
+        if(empty($openid)){
+            $this->error = 1042;
             return false;
         }
 
-        // 验证是否注册
-        if($this->model->where(['mobile' => $mobile, 'mark' => 1])->value('id')){
-            $this->error = 2002;
-            return false;
+        $where = ['openid' => $openid, 'mark' => 1];
+        if($phone){
+            $where['mobile'] = $phone;
         }
 
-        // 驾驶证
-        $drivingLicense = isset($params['driving_license']) && $params['driving_license']? get_image_path($params['driving_license']) : '';
-        if (empty($drivingLicense)) {
-            $this-> error = 2007;
+        // 验证是否注册,没有则注册
+        $data = $this->model->where($where)
+            ->select(['id','openid', 'mobile', 'user_type', 'nickname','entry_type','need_paper', 'code', 'status'])
+            ->first();
+        $data = $data ? $data->toArray() : [];
+        $userId = isset($data['id']) ? $data['id'] : 0;
+        $status = isset($data['status']) ? $data['status'] : 0;
+        $entryType = isset($data['entry_type']) ? $data['entry_type'] : 0;
+        $needPaper = isset($data['need_paper']) ? $data['need_paper'] : 0;
+        if ($data && $userId && $status != 1) {
+            $this->error = 2011;
             return false;
         }
 
-        // 行驶证
-        $driversLicense = isset($params['drivers_license']) && $params['drivers_license']? get_image_path($params['drivers_license'])  : '';
-        if (empty($driversLicense)) {
-            $this-> error = 2008;
-            return false;
-        }
 
-        $id = $this->model->max('id') + 1;
         $system = isset($params['system'])? $params['system'] : [];
         $system = $system && !is_array($system)? json_decode($system,true) : $system;
-        $appSources = isset($system['app_sources']) ? $system['app_sources'] : '';
-        $uuid = isset($system['uuid']) ? $system['uuid'] : '';
-        $data = [
-            'mobile'=> $mobile,
-            'user_type'=> 2,
-            'avatar'=> '',
-            'nickname'=> $nickname ? $nickname : 'DU'.rand(10,99).substr($mobile,-6,6),
-            'realname'=> isset($params['realname'])? trim($params['realname']) : '',
-            'password'=> get_password($password),
-            'car_number'=> isset($params['car_number'])? trim($params['car_number']) : '',
-            'car_type'=> isset($params['car_type'])? trim($params['car_type']) : '',
-            'driving_license'=> $drivingLicense,
-            'drivers_license'=> $driversLicense,
-            'code'=> strtoupper(get_random_code(9, 'D', "{$id}")),
-            'app_uuid' => $uuid,
-            'device' => $appSources == 'android' ? 2 : 1,
-            'create_time'=> time(),
-            'status' => 1,
-            'picker_status' => 1,
-            'confirm_remark' => '',
-            'confirm_status' => 2,
-            'balance' => 0,
-            'deposit' => 0,
-            'mark' => 1,
-            'login_ip' => get_client_ip(),
-        ];
+        $appSources = isset($system['app_sources']) && $system['app_sources']? $system['app_sources'] : 'ios';
+        $uuid = isset($system['uuid'])? $system['uuid'] : '';
+        $version = isset($system['app_version'])? $system['app_version'] : '';
+        if(empty($data)){
+            // 手机号码验证
+            if($this->model->where(['mobile'=> $phone,'mark'=>1])->value('id')){
+                $this->error = 2013;
+                return false;
+            }
 
-        if(!$userId = $this->model->insertGetId($data)){
-            $this-> error = 2003;
-            return false;
+            $userId = $this->model->max('id')+1;
+            $data = [
+                'nickname'=> $phone? '微信用户'.substr($phone,-6,6) : '微信用户'.$userId,
+                'openid'=> $openid,
+                'mobile'=> $phone,
+                'login_ip'=> get_client_ip(),
+                'create_time'=> time(),
+                'login_time'=> time(),
+                'login_count'=> DB::raw("login_count+1"),
+                'app_version'=> $version,
+                'app_uuid'=> $uuid,
+                'device'=> $appSources=='ios'? 1 : 2,
+            ];
+            if($this->model->insertGetId($data)){
+                $this->error = 2012;
+                return false;
+            }
         }
-
+        // 更新登录信息
+        else if(!RedisService::get("caches:members:login_{$userId}")){
+            $updateData = [
+                'login_ip'=> get_client_ip(),
+                'create_time'=> time(),
+                'login_time'=> time(),
+                'app_uuid'=> $uuid,
+                'login_count'=> DB::raw("login_count+1"),
+                'app_version'=> $version,
+                'device'=> $appSources=='ios'? 1 : 2,
+            ];
+            $this->model->where(['id'=> $userId])->update($updateData);
+            RedisService::set("caches:members:login_{$userId}",$updateData, rand(180,300));
+        }
+ 
         // 获取登录授权token
         $jwt = new Jwt('jwt_jd_app');
         $token = $jwt->getToken($userId);
 
         // 结果返回
+        $setEntry = $entryType && $needPaper? 1 : 0;
         $result = [
             'access_token' => $token,
-            'info' => ['uid' => $userId,'nickname' => $data['nickname']],
+            'info' => ['uid' => $userId,'openid'=>$openid,'set_entry'=>$setEntry,'nickname' => $data['nickname']],
         ];
 
-        // 注册成功
-        $this->error = 2004;
+        // 用户缓存信息
+        $this->error = 2013;
         $data['token'] = $token;
-        unset($data['password']);
         unset($data['mobile']);
-        RedisService::keyDel("caches:members:count*");
         RedisService::set("auths:info:{$userId}", $data, 24 * 3600);
         return $result;
     }
 
-
     /**
-     * 注册资料重新提交
-     * @param $userId
+     * 重置密码
      * @param $params
-     * @return bool
+     * @return array|false
      */
-    public function profileModify($userId, $params)
+    public function forget($params)
     {
-        $cacheLockKey = "caches:members:profile_modify_{$userId}";
-        if(RedisService::get($cacheLockKey)){
-            $this->error = 1034;
+        // 账号登录
+        $mobile = isset($params['mobile']) ? trim($params['mobile']) : '';
+        $password = isset($params['password']) ? trim($params['password']) : '';
+        if (empty($params) || empty($mobile) || empty($password)) {
+            $this->error = 1041;
             return false;
         }
 
-        // 用户验证
-        RedisService::set($cacheLockKey, ['user_id'=> $userId,'params'=>$params], rand(2,3));
-        $info = $this->model->where(['id' => $userId, 'mark' => 1])
-            ->select(['id', 'password','confirm_status', 'status'])
-            ->first();
-        $confirmStatus = isset($info['confirm_status']) ? $info['confirm_status'] : 0;
-        if (!$info || $info['status'] != 1) {
-            $this->error = 2016;
-            RedisService::clear($cacheLockKey);
+        // 验证码验证
+        $smsCode = isset($params['sms_code']) ? trim($params['sms_code']) : '';
+        if (!SmsService::make()->check($mobile, $smsCode, 'reset_password')) {
+            $this->error = SmsService::make()->getError();
             return false;
         }
 
-        if($confirmStatus == 1){
-            $this->error = 2041;
-            RedisService::clear($cacheLockKey);
+        // 验证是否注册
+        if (!$userId = $this->model->where(['mobile' => $mobile, 'mark' => 1])->value('id')) {
+            $this->error = 1038;
             return false;
         }
 
-        // 验证码验证(不传不验证)
-        $mobile = isset($params['mobile'])? trim($params['mobile']) : '';
-        $smsCode = isset($params['sms_code'])? trim($params['sms_code']) : '';
-        if (isset($params['sms_code']) && !SmsService::make()->check($mobile, $smsCode, 'profile')) {
-            $this->error = SmsService::make()->getError();
+        if(!$this->model->where(['id'=>$userId])->update(['password'=> get_password($password),'update_time'=>time()])){
+            $this->error = 2030;
             return false;
         }
 
-        //
-        $data = ['confirm_status'=>2,'confirm_remark'=>'','create_time'=>time(),'update_time' => time()];
-
-        // 修改数据(不传不修改)
-        if (isset($params['mobile']) && $mobile) {
-            $data['mobile'] = $mobile;
-        }
-
-        $realname = isset($params['realname']) ? trim($params['realname']) : '';
-        if (isset($params['realname']) && $realname) {
-            $data['realname'] = $realname;
-        }
-
-        $carType = isset($params['car_type']) ? trim($params['car_type']) : '';
-        if (isset($params['car_type']) && $carType) {
-            $data['car_type'] = $carType;
-        }
-
-        $carNumber = isset($params['car_number']) ? trim($params['car_number']) : '';
-        if (isset($params['car_number']) && $carNumber) {
-            $data['car_number'] = $carNumber;
-        }
-
-        // 驾驶证
-        $drivingLicense = isset($params['driving_license']) && $params['driving_license']? get_image_path($params['driving_license']) : '';
-        if (isset($params['driving_license'])){
-            if(empty($drivingLicense)) {
-                $this-> error = 2007;
-                return false;
-            }
-
-            $data['driving_license'] = $drivingLicense;
-        }
-
-        // 行驶证
-        $driversLicense = isset($params['drivers_license']) && $params['drivers_license']? get_image_path($params['drivers_license'])  : '';
-        if(isset($params['drivers_license'])){
-            if (empty($driversLicense)) {
-                $this-> error = 2008;
-                return false;
-            }
-
-            $data['drivers_license'] = $driversLicense;
-        }
-
-        if (!$this->model->where(['id' => $userId])->update($data)) {
-            $this->error = 2010;
-            RedisService::clear($cacheLockKey);
-            return false;
-        }
+        // 操作日志
+        ActionLogModel::setRecord($userId,['type'=>2,'title'=>'重置密码','content'=>'重置登录密码','module'=>'member']);
+        ActionLogModel::record();
 
-        $this->error = 2011;
-        RedisService::clear($cacheLockKey);
+        $this->error = 2031;
         return true;
     }
 
@@ -382,7 +307,7 @@ class MemberService extends BaseService
             return $info;
         }
 
-        $defaultField = ['id', 'user_type', 'realname', 'mobile', 'nickname','balance','deposit', 'code', 'openid','picker_status','confirm_status', 'status', 'avatar'];
+        $defaultField = ['id', 'user_type', 'realname', 'mobile', 'nickname','balance', 'code', 'openid', 'status', 'avatar'];
         $field = $field ? $field : $defaultField;
         if (is_array($where)) {
             $info = $this->model->where(['mark' => 1])->where($where)->select($field)->first();
@@ -396,14 +321,6 @@ class MemberService extends BaseService
                 $info['avatar'] = $info['avatar'] ? get_image_url($info['avatar']) : '';
             }
 
-            if (isset($info['driving_license'])) {
-                $info['driving_license'] = $info['driving_license'] ? get_image_url($info['driving_license']) : '';
-            }
-
-            if (isset($info['drivers_license'])) {
-                $info['drivers_license'] = $info['drivers_license'] ? get_image_url($info['drivers_license']) : '';
-            }
-
             if (isset($info['mobile'])) {
                 $info['mobile_text'] = $info['mobile'] ? format_mobile($info['mobile']) : '';
             }
@@ -412,12 +329,6 @@ class MemberService extends BaseService
                 $info['create_at'] = datetime(strtotime($info['create_time']));
             }
 
-            if(isset($info['confirm_remark'])){
-                $info['confirm_remark'] = $info['confirm_remark']?format_content($info['confirm_remark']):'';
-            }
-
-            $info['unread_count'] = intval(MessageService::make()->getUnreadCount($info['id']));
-
             RedisService::set($cacheKey, $info, rand(10, 20));
         }
 
@@ -511,11 +422,6 @@ class MemberService extends BaseService
             $data['mobile'] = $mobile;
         }
 
-        $address = isset($params['address']) ? $params['address'] : '';
-        if (isset($params['address']) && $address) {
-            $data['address'] = $address;
-        }
-
         $password = isset($params['password']) ? $params['password'] : '';
         $newPassword = isset($params['new_password']) ? $params['new_password'] : '';
         if (isset($params['password']) && $password) {
@@ -556,4 +462,46 @@ class MemberService extends BaseService
     }
 
 
+    /**
+     * 设置入口类型
+     * @param $userId
+     * @param $params
+     * @return bool
+     */
+    public function setEntry($userId, $params)
+    {
+        $cacheLockKey = "caches:members:entry_{$userId}";
+        if(RedisService::get($cacheLockKey)){
+            $this->error = 1034;
+            return false;
+        }
+
+        // 用户验证
+        RedisService::set($cacheLockKey, ['user_id'=> $userId,'params'=>$params], rand(2,3));
+        $info = $this->model->where(['id' => $userId, 'mark' => 1])
+            ->select(['id', 'password', 'status'])
+            ->first();
+        if (!$info || $info['status'] != 1) {
+            $this->error = 1043;
+            RedisService::clear($cacheLockKey);
+            return false;
+        }
+
+        // 密码校验
+        $data = [
+            'entry_type'=> isset($params['entry_type'])? intval($params['entry_type']) : 0,
+            'need_paper'=> isset($params['need_paper'])? intval($params['need_paper']) : 0,
+            'update_time' => time()
+        ];
+
+        if (!$this->model->where(['id' => $userId])->update($data)) {
+            $this->error = 1020;
+            RedisService::clear($cacheLockKey);
+            return false;
+        }
+
+        $this->error = 1019;
+        RedisService::clear($cacheLockKey);
+        return true;
+    }
 }

+ 0 - 1
app/Services/Api/OrderService.php

@@ -11,7 +11,6 @@
 
 namespace App\Services\Api;
 
-use App\Models\GoodsModel;
 use App\Models\MemberModel;
 use App\Models\OrderModel;
 use App\Services\BaseService;

+ 378 - 0
app/Services/MpService.php

@@ -0,0 +1,378 @@
+<?php
+
+namespace App\Services;
+
+/**
+ * 微信服务管理-服务类
+ * @author laravel开发员
+ * @since 2020/11/11
+ * Class WechatService
+ * @package App\Services
+ */
+class MpService extends BaseService
+{
+    // 静态对象
+    protected static $instance = null;
+
+    protected $debug = true;
+    protected $expireTime = 7200; // 缓存日志时长
+    protected $mpAppid = '';
+    protected $mpAppSecret = '';
+
+    // 接口地址
+    protected $apiUrls = [
+        // 授权登录
+        'auth'=> 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code',
+        // 授权跳转地址
+        'authorize'=>'https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_userinfo&state=%s#wechat_redirect',
+        // 获取token
+        'getToken'=>'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s',
+        // 获取二维码
+        'getQrcode'=>'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=%s&scene=%s&page=%s&env_version=%s',
+        // 获取用户信息
+        'getUserInfo'=>'https://api.weixin.qq.com/sns/jscode2session',
+        // 获取手机号
+        'getPhoneNumber'=>'https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=%s',
+        // 获取客服token
+        'getServiceToken'=>'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s',
+        // 获取客服地址
+        'getServiceUrl'=>'https://qyapi.weixin.qq.com/cgi-bin/kf/add_contact_way?access_token=%s',
+    ];
+
+
+    public function __construct()
+    {
+        $this->mpAppid = ConfigService::make()->getConfigByCode('wechat_mp_appid');
+        $this->mpAppSecret = ConfigService::make()->getConfigByCode('wechat_mp_appsecret');
+    }
+
+    /**
+     * 静态入口
+     * @return static|null
+     */
+    public static function make()
+    {
+        if (!self::$instance) {
+            self::$instance = new static();
+        }
+
+        return self::$instance;
+    }
+
+    /**
+     * web 授权
+     * @param $code
+     * @return array|false|mixed|string|string[]
+     */
+    public function auth($code)
+    {
+        try {
+
+
+            if(empty($this->mpAppid) || empty($this->mpAppSecret)){
+                $this->error = '小程序参数未配置';
+                return false;
+            }
+
+            // 没有code参数
+            if(empty($code)){
+                $uri=urlencode(env("WEB_URL")."/v1/mpAuth");
+                $state=get_random_code(16);
+                $url= sprintf($this->apiUrls['authorize'], $this->mpAppid, $this->mpAppSecret, $uri, $state);
+                return redirect($url);
+            }
+
+            $cacheKey = "caches:mpApp:mp_{$this->mpAppid}:";
+            $url = sprintf($this->apiUrls['auth'],$this->mpAppid, $this->mpAppSecret, $code);
+            $result = httpRequest($url, '', 'get','',5);
+            $this->saveLog($cacheKey.'auth:request', ['url'=>$url,'code'=>$code,'result'=>$result,'date'=>date('Y-m-d H:i:s')]);
+            if(empty($result)){
+                $this->error = '授权登录失败';
+                return "<script>alert('微信授权失败');window.close()</script>";
+            }
+            return $result;
+        }catch (\Exception $e){
+            $this->error = $e->getMessage();
+            $this->saveLog($cacheKey.'auth:error', ['code'=>$code,'error'=>$this->error,'trace'=>$e->getTrace(),'date'=>date('Y-m-d H:i:s')]);
+            return false;
+        }
+    }
+
+    /**
+     * 获取 access_token
+     * @param false $refresh
+     * @return false|mixed|string
+     */
+    public function getAccessToken($refresh = false)
+    {
+        try {
+            if(empty($this->mpAppid) || empty($this->mpAppSecret)){
+                $this->error = '小程序参数未配置';
+                return false;
+            }
+
+            $cacheKey = "caches:mpApp:mp_{$this->mpAppid}:";
+            $tokenData = RedisService::get($cacheKey.'access_token');
+            $token = isset($tokenData['access_token'])? $tokenData['access_token'] : '';
+            if($token && !$refresh){
+                return $token;
+            }
+
+            $url = sprintf($this->apiUrls['getToken'], $this->mpAppid, $this->mpAppSecret);
+            $result = httpRequest($url,'', 'get','',5);
+            $this->saveLog($cacheKey.'tokens:request', ['url'=>$url,'result'=>$result,'date'=>date('Y-m-d H:i:s')]);
+            $token = isset($result['access_token'])? $result['access_token'] : '';
+            if(empty($result) || empty($token)){
+                $this->error = '获取小程序TOKEN失败';
+                return false;
+            }
+
+            $result['date'] = date('Y-m-d H:i:s');
+            RedisService::set($cacheKey.'access_token', $result, 7000);
+            return $token;
+        }catch (\Exception $e){
+            $this->error = $e->getMessage();
+            $this->saveLog($cacheKey.'tokens:error', ['error'=>$this->error,'trace'=>$e->getTrace(),'date'=>date('Y-m-d H:i:s')]);
+            return false;
+        }
+    }
+
+    /**
+     * 小程序二维码
+     * @param $page 页面
+     * @param $scene 场景参数
+     * @param string $version 类型:release-永久
+     * @param false $refresh
+     * @return false|string
+     */
+    public function getMiniQrcode($page, $scene, $version='release', $refresh=false)
+    {
+        if (!in_array($version,['release','trial','develop'])) {
+            $version='release';
+        }
+
+        try {
+            if(empty($page) || empty($scene)){
+                $this->error = '缺少二维码参数';
+                return false;
+            }
+
+            if(empty($this->mpAppid) || empty($this->mpAppSecret)){
+                $this->error = '小程序参数未配置';
+                return false;
+            }
+
+            if(!$token = $this->getAccessToken())
+            {
+                $this->error = '获取token失败';
+                return false;
+            }
+
+            $cacheKey = "caches:mpQrcode:mp_{$this->mpAppid}:";
+            $filePath = base_path('public/uploads');
+            $qrFile = '/qrcodes/mp_'.date("YmdHis")."_".md5($page.$scene).".png";
+            $qrKey = md5($qrFile);
+            if(RedisService::get($cacheKey.$qrKey) && file_exists($filePath.'/'.$qrFile) && !$refresh){
+                return $qrFile;
+            }
+
+            if(!is_dir($filePath.'/qrcodes/')){
+                @mkdirs($filePath.'/qrcodes/');
+            }
+
+            $url = sprintf($this->apiUrls['getQrcode'], $token, $scene, $page, $version);
+            $result = curl_post($url, '');
+            $datas = $result? json_decode($result, true) : [];
+            $this->saveLog($cacheKey.'qrcode:request', ['page'=>$page,'scene'=>$scene,'url'=>$url,'result'=>$result,'date'=>date('Y-m-d H:i:s')]);
+            $errcode = isset($datas['errcode'])? $datas['errcode'] : '';
+            $errmsg = isset($datas['errmsg'])? $datas['errmsg'] : '';
+            if($errcode){
+                $this->error = $errmsg? $errmsg : '获取二维码失败';
+                return false;
+            }
+
+            file_put_contents($filePath.'/'.$qrFile, $result);
+            if(!file_exists($filePath.'/'.$qrFile)){
+                $this->error = '保存二维码失败';
+                return false;
+            }
+
+            $result['date'] = date('Y-m-d H:i:s');
+            RedisService::set($cacheKey.$qrKey, ['page'=>$page,'scene'=>$scene,'qrcode'=>$qrFile,'date'=>date('Y-m-d H:i:s')], 30 * 86400);
+            return $qrFile;
+        }catch (\Exception $e){
+            $this->error = $e->getMessage();
+            $this->saveLog($cacheKey.'qrcode:error', ['page'=>$page,'scene'=>$scene,'error'=>$this->error,'trace'=>$e->getTrace(),'date'=>date('Y-m-d H:i:s')]);
+            return false;
+        }
+    }
+
+    /**
+     * 获取用户信息
+     * @param $code
+     * @return array|false|mixed|string[]
+     */
+    public function getUserinfo($code)
+    {
+        try {
+            if(empty($code)){
+                $this->error = '缺少授权参数';
+                return false;
+            }
+
+            if(empty($this->mpAppid) || empty($this->mpAppSecret)){
+                $this->error = '小程序参数未配置';
+                return false;
+            }
+
+            $data=[
+                'appid' => $this->mpAppid,
+                'secret'=> $this->mpAppSecret,
+                'js_code'=>$code,
+                'grant_type'=>'authorization_code'
+            ];
+            $cacheKey = "caches:mpApp:mp_{$this->mpAppid}:";
+            $url = $this->apiUrls['getUserInfo'];
+            $result = httpRequest($url, $data,'get','',5);
+            $this->saveLog($cacheKey.'userInfo:request', ['code'=>$code,'url'=>$url,'query'=>$data,'result'=>$result,'date'=>date('Y-m-d H:i:s')]);
+            if(empty($result)){
+                $this->error = '获取用户信息失败';
+                return false;
+            }
+            return $result;
+        }catch (\Exception $e){
+            $this->error = $e->getMessage();
+            $this->saveLog($cacheKey.'userInfo:error', ['code'=>$code,'error'=>$this->error,'trace'=>$e->getTrace(),'date'=>date('Y-m-d H:i:s')]);
+            return false;
+        }
+    }
+
+    /**
+     * 获取用户手机号码
+     * @param $code
+     * @return array|false|mixed|string[]
+     */
+    public function getPhoneNumber($code)
+    {
+        try {
+            if(empty($code)){
+                $this->error = '缺少授权参数';
+                return false;
+            }
+
+            if(empty($this->mpAppid) || empty($this->mpAppSecret)){
+                $this->error = '小程序参数未配置';
+                return false;
+            }
+
+            if(!$token = $this->getAccessToken())
+            {
+                $this->error = '获取token失败';
+                return false;
+            }
+
+            $cacheKey = "caches:mpApp:mp_{$this->mpAppid}:";
+            $url = sprintf($this->apiUrls['getPhoneNumber'], $token);
+            $result = httpRequest($url, json_encode(['code'=>$code],256),'post','',5);
+            $this->saveLog($cacheKey.'phone:request', ['code'=>$code,'url'=>$url,'result'=>$result,'date'=>date('Y-m-d H:i:s')]);
+            if(empty($result)){
+                $this->error = '获取用户手机号失败';
+                return false;
+            }
+            return $result;
+        }catch (\Exception $e){
+            $this->error = $e->getMessage();
+            $this->saveLog($cacheKey.'phone:error', ['code'=>$code,'error'=>$this->error,'trace'=>$e->getTrace(),'date'=>date('Y-m-d H:i:s')]);
+            return false;
+        }
+    }
+
+    /**
+     * 获取 客服接口 access_token
+     * @param false $refresh
+     * @return false|mixed|string
+     */
+    public function getServiceToken($refresh = false)
+    {
+        try {
+            if(empty($this->mpAppid) || empty($this->mpAppSecret)){
+                $this->error = '小程序参数未配置';
+                return false;
+            }
+
+            $cacheKey = "caches:mpApp:mp_{$this->mpAppid}:";
+            $tokenData = RedisService::get($cacheKey.'kf_access_token');
+            $token = isset($tokenData['access_token'])? $tokenData['access_token'] : '';
+            if($token && !$refresh){
+                return $token;
+            }
+
+            $url = sprintf($this->apiUrls['getServiceToken'], $this->mpAppid, $this->mpAppSecret);
+            $result = httpRequest($url,'', 'get','',5);
+            var_dump($result);
+            $this->saveLog($cacheKey.'kfTokens:request', ['url'=>$url,'result'=>$result,'date'=>date('Y-m-d H:i:s')]);
+            $token = isset($result['access_token'])? $result['access_token'] : '';
+            if(empty($result) || empty($token)){
+                $this->error = '获取小程序客服TOKEN失败';
+                return false;
+            }
+
+            $result['date'] = date('Y-m-d H:i:s');
+            RedisService::set($cacheKey.'kf_access_token', $result, 7000);
+            return $token;
+        }catch (\Exception $e){
+            $this->error = $e->getMessage();
+            $this->saveLog($cacheKey.'kfTokens:error', ['error'=>$this->error,'trace'=>$e->getTrace(),'date'=>date('Y-m-d H:i:s')]);
+            return false;
+        }
+    }
+
+    /**
+     * 获取客服地址
+     * @return array|false|mixed|string[]
+     */
+    public function getServiceUrl()
+    {
+        try {
+            if(empty($this->mpAppid) || empty($this->mpAppSecret)){
+                $this->error = '小程序参数未配置';
+                return false;
+            }
+
+            if(!$token = $this->getServiceToken())
+            {
+                $this->error = '获取token失败';
+                return false;
+            }
+
+            $cacheKey = "caches:mpApp:mp_{$this->mpAppid}:";
+            $url = sprintf($this->apiUrls['getServiceUrl'], $token);
+            $result = httpRequest($url, '','post','',5);
+            $this->saveLog($cacheKey.'service:request', ['url'=>$url,'result'=>$result,'date'=>date('Y-m-d H:i:s')]);
+            if(empty($result)){
+                $this->error = '获取小程序客服地址失败';
+                return false;
+            }
+            return $result;
+        }catch (\Exception $e){
+            $this->error = $e->getMessage();
+            $this->saveLog($cacheKey.'service:error', ['error'=>$this->error,'trace'=>$e->getTrace(),'date'=>date('Y-m-d H:i:s')]);
+            return false;
+        }
+    }
+
+
+    /**
+     * 保存日志
+     * @param $cackekey
+     * @param $data
+     * @param $time
+     */
+    public function saveLog($cackekey, $data, $time=0)
+    {
+        if($this->debug){
+            RedisService::set($cackekey, $data, $time?$time : $this->expireTime);
+        }
+    }
+
+}

+ 4 - 11
bootstrap/cache/packages.php

@@ -26,14 +26,14 @@
   ),
   'laravel/socialite' => 
   array (
-    'providers' => 
-    array (
-      0 => 'Laravel\\Socialite\\SocialiteServiceProvider',
-    ),
     'aliases' => 
     array (
       'Socialite' => 'Laravel\\Socialite\\Facades\\Socialite',
     ),
+    'providers' => 
+    array (
+      0 => 'Laravel\\Socialite\\SocialiteServiceProvider',
+    ),
   ),
   'laravel/tinker' => 
   array (
@@ -67,11 +67,4 @@
       0 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
     ),
   ),
-  'socialiteproviders/manager' => 
-  array (
-    'providers' => 
-    array (
-      0 => 'SocialiteProviders\\Manager\\ServiceProvider',
-    ),
-  ),
 );

+ 6 - 10
bootstrap/cache/services.php

@@ -31,13 +31,12 @@
     27 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
     28 => 'Carbon\\Laravel\\ServiceProvider',
     29 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
-    30 => 'SocialiteProviders\\Manager\\ServiceProvider',
-    31 => 'App\\Providers\\AppServiceProvider',
-    32 => 'App\\Providers\\AuthServiceProvider',
-    33 => 'App\\Providers\\EventServiceProvider',
-    34 => 'App\\Providers\\RouteServiceProvider',
-    35 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
-    36 => 'Laravel\\Socialite\\SocialiteServiceProvider',
+    30 => 'App\\Providers\\AppServiceProvider',
+    31 => 'App\\Providers\\AuthServiceProvider',
+    32 => 'App\\Providers\\EventServiceProvider',
+    33 => 'App\\Providers\\RouteServiceProvider',
+    34 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
+    35 => 'Laravel\\Socialite\\SocialiteServiceProvider',
   ),
   'eager' => 
   array (
@@ -232,8 +231,5 @@
     'Laravel\\Tinker\\TinkerServiceProvider' => 
     array (
     ),
-    'SocialiteProviders\\Manager\\ServiceProvider' => 
-    array (
-    ),
   ),
 );

+ 0 - 6
composer.json

@@ -10,22 +10,16 @@
     "require": {
         "php": "^8.0",
         "ext-json": "*",
-        "alibabacloud/dysmsapi-20170525": "2.0.24",
         "cboden/ratchet": "^0.4.4",
         "fideloper/proxy": "^4.4",
         "fruitcake/laravel-cors": "^2.0",
         "fukuball/jieba-php": "dev-master",
-        "getuilaboratory/getui-pushapi-php-client-v2": "dev-master",
         "gregwar/captcha": "^1.1",
         "guzzlehttp/guzzle": "^7.0.1",
-        "jaeger/querylist": "^4.2",
         "laravel/framework": "^8.12",
         "laravel/socialite": "^5.6",
         "laravel/tinker": "^2.5",
         "maatwebsite/excel": "^3.1",
-        "socialiteproviders/weixin": "^4.1",
-        "socialiteproviders/weixin-web": "*",
-        "wechatpay/wechatpay-guzzle-middleware": "^0.2.2",
         "wxkxklmyt/pscws4": "^0.0.2",
         "yansongda/pay": "~3.4.0"
     },

File diff suppressed because it is too large
+ 1983 - 2136
composer.lock


+ 6 - 108
resources/lang/zh-cn/api.php

@@ -36,114 +36,12 @@ return [
     '1038' => '账号未注册',
     '1039' => '请输入新密码',
     '1040' => '账号被使用',
-    '1041' => '请填写账号或密码',
+    '1041' => '缺少微信授权码',
+    '1042' => '授权登录错误',
+    '1043' => '操作失败,请返回重试~',
 
     // 账户
-    '2001' => '账号错误',
-    '2002' => '账号已注册',
-    '2003' => '注册失败',
-    '2004' => '注册成功',
-    '2005' => '短信验证码发送成功',
-    '2006' => '短信验证码发送失败',
-    '2007' => '请先上传驾驶证',
-    '2008' => '请先上传行驶证',
-    '2009' => '修改注册资料成功,请等候审核~',
-    '2010' => '修改注册资料失败',
-    '2011' => '请不要频繁发送,稍后重试~',
-    '2012' => '短信验证码已失效',
-    '2013' => '短信验证码错误',
-    '2014' => '账号或密码错误',
-    '2015' => '账号已被冻结暂无法登录,请联系客服或管理员',
-    '2016' => '账号已被冻结无法操作,请联系客服或管理员',
-    '2017' => '登录密码错误',
-    '2018' => '登录失败',
-    '2019' => '登录成功',
-    '2030' => '密码重置失败',
-    '2031' => '密码重置成功',
-    '2041' => '账号资料已审核,无法操作',
-    '2042' => '账号资料待审核中,无法操作',
-    '2043' => '账号资料待审核中~',
-
-    '2051' => '保证金充值成功',
-    '2052' => '保证金充值失败',
-    '2053' => '保证金已缴纳',
-    '2054' => '保证金金额错误,请刷新重试',
-    '2055' => '保证金缴纳支付方式错误',
-    '2056' => '创建充值订单失败,请刷新重试',
-    '2057' => '您没有可退保金额',
-    '2058' => '退保金额错误,请刷新重试或联系客服',
-    '2059' => '退保申请处理失败,请刷新重试',
-    '2060' => '退保申请成功,请耐心等候审核~',
-    '2061' => '退保申请失败,请刷新重试',
-    '2062' => '退保申请失败,请先处理完所有订单后操作~',
-
-
-    '2171' => '保证金退款处理失败',
-    '2172' => '保证金微信退款处理失败',
-    '2173' => '保证金支付宝退款处理失败',
-    '2174' => '保证金余额退款处理失败',
-    '2175' => '订单已确认完成',
-    '2176' => '退款请求成功',
-    '2177' => '该订单已支付',
-    '2178' => '订单请求支付失败',
-    '2179' => '退款类型错误',
-    '2180' => '账户明细处理错误',
-    '2181' => '保证金入账失败',
-
-    '2201' => '接单信息不存在或已下架',
-    '2202' => '该货物订单已在进行中,无法抢单',
-    '2203' => '该货物订单已完成',
-    '2204' => '该货物订单运费金额错误,请联系客服',
-    '2205' => '您的账号暂无法接单,请联系客服',
-    '2206' => '请先充值缴纳保证金即可抢单',
-    '2207' => '接单失败,请刷新后重试',
-    '2208' => '接单成功接单中,目前有:num个用户正在抢单,请耐心等候审核~',
-    '2209' => '您有进行中的订单,请先完成再抢单~',
-
-    '2301' => '请输入提现金额',
-    '2302' => '请输入姓名或收款账号',
-    '2303' => '可提现金额不足',
-    '2304' => '提现功能暂未开放,请联系客服',
-    '2305' => '最低提现金额为:money元',
-    '2306' => '余额提现账户处理失败',
-    '2307' => '余额提现申请失败',
-    '2308' => '余额提现申请成功,请耐心等候审核打款~',
-
-
-    '2615' => '支付金额错误',
-    '2616' => '微信支付参数未配置',
-    '2617' => '微信支付调用成功',
-    '2618' => '微信支付调用失败',
-    '2619' => '支付宝支付参数未配置',
-    '2620' => '支付宝支付调用成功',
-    '2621' => '支付宝支付调用失败',
-    '2622' => '支付回调状态未成功',
-    '2623' => '支付回调订单参数错误',
-    '2624' => '支付回调付款金额错误',
-    '2625' => '支付请求信息错误',
-    '2626' => '订单已支付',
-    '2627' => '订单回调支付类型不一致',
-    '2628' => '订单付款金额错误',
-    '2629' => '支付订单不存在',
-    '2630' => '支付订单已处理',
-    '2631' => '交易场景参数错误',
-    '2632' => '支付信息处理错误',
-    '2633' => '支付订单处理错误',
-    '2634' => '用户账户入账错误',
-    '2635' => '支付回调处理失败',
-    '2636' => '订单不存在或参数错误',
-    '2637' => '订单支付信息错误,请联系客服',
-    '2638' => '退还保证金处理失败,请联系客服',
-    '2639' => '退还保证金审核状态参数错误',
-    '2640' => '订单参数错误',
-    '2642' => '保证金订单处理错误',
-    '2643' => '退还保证金失败,请刷新重试~',
-    '2644' => '请等候退保申请处理完后再操作~',
-
-    '2646' => '提现账户不存在或不可用~',
-    '2647' => '保证金余额不足,请确认后重试~',
-    '2648' => '收入余额不足,请确认后重试~',
-    '2652' => '订单已处理',
-
-
+    '2011'=>"授权登录失败,用户账号被冻结",
+    '2012'=>"授权登录失败",
+    '2013'=>"授权登录成功",
 ];

+ 4 - 6
routes/api.php

@@ -18,6 +18,8 @@ use Illuminate\Support\Facades\Route;
 // 用户端路由组
 Route::prefix('v1')->group(function() {
     // 登录
+    Route::post('/mpAuth', [\App\Http\Controllers\Api\v1\LoginController::class, 'mpAuth']);
+    Route::post('/mpPhone', [\App\Http\Controllers\Api\v1\LoginController::class, 'mpPhone']);
     Route::post('/login', [\App\Http\Controllers\Api\v1\LoginController::class, 'login']);
     // 注册
     Route::post('/register', [\App\Http\Controllers\Api\v1\LoginController::class, 'register']);
@@ -45,14 +47,9 @@ Route::prefix('v1')->middleware('web.login')->group(function() {
     Route::get('/logout', [\App\Http\Controllers\Api\v1\LoginController::class, 'logout']);
     Route::get('/index/data', [\App\Http\Controllers\Api\v1\IndexController::class, 'data']);
 
-    // 货物/接单信息
-    Route::post('/picker/index', [\App\Http\Controllers\Api\v1\GoodsController::class, 'index']);
-    Route::post('/picker/info', [\App\Http\Controllers\Api\v1\GoodsController::class, 'info']);
-
     // 用户信息
     Route::get('/user/info', [\App\Http\Controllers\Api\v1\MemberController::class, 'info']);
-    Route::get('/user/profile', [\App\Http\Controllers\Api\v1\MemberController::class, 'profile']);
-    Route::post('/user/profile/modify', [\App\Http\Controllers\Api\v1\MemberController::class, 'profileModify']);
+    Route::post('/user/setEntry', [\App\Http\Controllers\Api\v1\MemberController::class, 'setEntry']);
     Route::post('/user/modify', [\App\Http\Controllers\Api\v1\MemberController::class, 'modify']);
 
     // 账户
@@ -81,5 +78,6 @@ Route::prefix('v1')->middleware('web.login')->group(function() {
 Route::match(['get','post'],'/notify/refund/{payType}', [\App\Http\Controllers\Api\v1\NotifyController::class, 'refund']);
 Route::match(['get','post'],'/notify/depositRefund/{payType}', [\App\Http\Controllers\Api\v1\NotifyController::class, 'depositRefund']);
 Route::match(['get','post'],'/notify/{scene}/{payType}', [\App\Http\Controllers\Api\v1\NotifyController::class, 'callback']);
+Route::match(['get','post'],'/notify/kf', [\App\Http\Controllers\Api\v1\NotifyController::class, 'kf']);
 
 Route::match(['get','post'],'/test/check', [\App\Http\Controllers\Api\v1\TestController::class, 'check']);