作者 何书鹏
1 个管道 的构建 通过 耗费 0 秒

微信授权登录

@@ -28,6 +28,7 @@ use app\mobile\model\TopicAppraiseGood; @@ -28,6 +28,7 @@ use app\mobile\model\TopicAppraiseGood;
28 use app\mobile\model\UserJob; 28 use app\mobile\model\UserJob;
29 use app\mobile\model\CompanyJob; 29 use app\mobile\model\CompanyJob;
30 use app\mobile\model\Statistic; 30 use app\mobile\model\Statistic;
  31 +use app\mobile\model\UserThird;
31 use addons\epay\library\Service; 32 use addons\epay\library\Service;
32 use Endroid\QrCode\QrCode; 33 use Endroid\QrCode\QrCode;
33 34
@@ -303,6 +304,104 @@ class User extends Api @@ -303,6 +304,104 @@ class User extends Api
303 } 304 }
304 305
305 /** 306 /**
  307 + * 第三方登录
  308 + * @ApiWeigh (91)
  309 + *
  310 + * @ApiTitle (第三方登录)
  311 + * @ApiSummary (第三方登录)
  312 + * @ApiMethod (POST)
  313 + *
  314 + * @ApiParams (name="nickname", type="integer", required=true, description="第三方账号昵称")
  315 + * @ApiParams (name="avatar", type="integer", required=false, description="第三方账号头像")
  316 + * @ApiParams (name="gender", type="integer", required=false, description="第三方性别")
  317 + * @ApiParams (name="openid", type="string", required=true, description="第三方登录返回的唯一识别数据")
  318 + * @ApiParams (name="unionid", type="string", required=false, description="第三方用户多个产品中的唯一id,如:微信开放平台")
  319 + *
  320 + * @ApiReturn ({
  321 + 'code':'1',
  322 + 'msg':'返回成功',
  323 + "data": {
  324 + "token": 用户token
  325 + }
  326 + })
  327 + */
  328 + public function userThird() {
  329 + $param = $this->request->param();
  330 + $validate = new Validate([
  331 + 'nickname' => 'require',
  332 + 'openid' => 'require',
  333 + ]);
  334 + $validate->message([
  335 + 'nickname.require' => '缺少参数nickname!',
  336 + 'openid.require' => '缺少参数openid!',
  337 + ]);
  338 + if (!$validate->check($param)) {
  339 + $this->error($validate->getError());
  340 + }
  341 + // 判断用户是否已绑定该openid
  342 + $time = time();
  343 + $ip = request()->ip();
  344 + $third = UserThird::where('openid',$param['openid'])->find();
  345 + Db::startTrans();
  346 + if($third) {
  347 + // 修改第三方信息
  348 + $result = UserThird::where('id',$third['id'])->update([
  349 + 'openname' => $param['nickname'],
  350 + 'logintime'=>$time
  351 + ]);
  352 + // 修改用户信息
  353 + $user = \app\common\model\User::get($third['user_id']);
  354 + if(!empty($param['nickname']) && empty($user['nickname'])){
  355 + $user->nickname = $param['nickname'];
  356 + }
  357 + if(!empty($param['avatar']) && (empty($user['image']) || stripos($user['image'], 'http') !== false)){
  358 + $user->image = $param['avatar'];
  359 + }
  360 + if(!empty($param['gender']) && !isset($user['sex'])){
  361 + $user->sex = $param['gender'] == 2 ? 0 : $param['gender'];
  362 + }
  363 + $user->loginip = $ip;
  364 + $user->logintime = $time;
  365 + $user->updatetime = $time;
  366 + $results = $user->save();
  367 + // 登录
  368 + $login = $this->auth->direct($third['user_id']);
  369 + } else {
  370 + // 添加用户信息
  371 + $result = \app\common\model\User::create([
  372 + 'nickname' => $param['nickname'],
  373 + 'sex' => $param['gender'] == 2 ? 0 : $param['gender'],
  374 + 'image' => $param['avatar'],
  375 + 'status' => 'normal',
  376 + 'jointime' => $time,
  377 + 'joinip' => $ip,
  378 + 'logintime' => $time,
  379 + 'loginip' => $ip,
  380 + 'prevtime' => $time
  381 + ]);
  382 + // 添加第三方信息
  383 + $results = UserThird::create([
  384 + 'user_id' => $result['id'],
  385 + 'openname' => $param['nickname'],
  386 + 'platform' => 'wechat',
  387 + 'openid' => $param['openid'],
  388 + 'createtime' => $time,
  389 + 'updatetime' => $time,
  390 + 'logintime' => $time,
  391 + 'unionid' => $param['unionid'],
  392 + ]);
  393 + // 登录
  394 + $login = $this->auth->direct($result['id']);
  395 + }
  396 + if(!$result || !$results || !$login) {
  397 + Db::rollback();
  398 + $this->error('授权登录失败');
  399 + }
  400 + Db::commit();
  401 + $this->success('成功',['token'=>$this->auth->getToken()]);
  402 + }
  403 +
  404 + /**
306 * @ApiWeigh (89) 405 * @ApiWeigh (89)
307 * @ApiTitle (忘记密码) 406 * @ApiTitle (忘记密码)
308 * @ApiSummary (忘记密码) 407 * @ApiSummary (忘记密码)
@@ -507,6 +606,85 @@ class User extends Api @@ -507,6 +606,85 @@ class User extends Api
507 } 606 }
508 607
509 /** 608 /**
  609 + * @ApiWeigh (77)
  610 + * @ApiTitle (绑定微信)
  611 + * @ApiSummary (绑定微信)
  612 + * @ApiMethod (POST)
  613 + *
  614 + * @ApiParams (name="nickname", type="integer", required=true, description="第三方账号昵称")
  615 + * @ApiParams (name="avatar", type="integer", required=false, description="第三方账号头像")
  616 + * @ApiParams (name="gender", type="integer", required=false, description="第三方性别")
  617 + * @ApiParams (name="openid", type="string", required=true, description="第三方登录返回的唯一识别数据")
  618 + * @ApiParams (name="unionid", type="string", required=false, description="第三方用户多个产品中的唯一id,如:微信开放平台")
  619 + *
  620 + * @ApiReturn ({
  621 + 'code':'1',
  622 + 'msg':'返回成功',
  623 + "data": {
  624 + "token": 用户token
  625 + }
  626 + })
  627 + */
  628 + public function bindThird() {
  629 + $param = $this->request->param();
  630 + $validate = new Validate([
  631 + 'nickname' => 'require',
  632 + 'openid' => 'require',
  633 + ]);
  634 + $validate->message([
  635 + 'nickname.require' => '缺少参数nickname!',
  636 + 'openid.require' => '缺少参数openid!',
  637 + ]);
  638 + if (!$validate->check($param)) {
  639 + $this->error($validate->getError());
  640 + }
  641 + // 判断用户是否已绑定该openid
  642 + $time = time();
  643 + $ip = request()->ip();
  644 + $third = UserThird::where('openid',$param['openid'])->find();
  645 + Db::startTrans();
  646 + if($third) {
  647 + $user = \app\common\model\User::get($third['user_id']);
  648 + if($user['id'] != $this->auth->id){
  649 + $this->error('该微信已绑定其他账号');
  650 + }
  651 + $result = UserThird::where('id',$third['id'])->update([
  652 + 'openname' => $param['nickname'],
  653 + ]);
  654 + } else {
  655 + UserThird::where('user_id',$this->auth->id)->delete();
  656 + $user = \app\common\model\User::get($this->auth->id);
  657 + $result = UserThird::create([
  658 + 'user_id' => $this->auth->id,
  659 + 'openname' => $param['nickname'],
  660 + 'platform' => 'wechat',
  661 + 'openid' => $param['openid'],
  662 + 'createtime' => $time,
  663 + 'updatetime' => $time,
  664 + 'logintime' => $time,
  665 + 'unionid' => $param['unionid'],
  666 + ]);
  667 + }
  668 + if(!empty($param['nickname']) && empty($user['nickname'])){
  669 + $user->nickname = $param['nickname'];
  670 + }
  671 + if(!empty($param['avatar']) && (empty($user['image']) || stripos($user['image'], 'http') !== false)){
  672 + $user->image = $param['avatar'];
  673 + }
  674 + if(!empty($param['gender']) && !isset($user['sex'])){
  675 + $user->sex = $param['gender'] == 2 ? 0 : $param['gender'];
  676 + }
  677 + $user->updatetime = $time;
  678 + $results = $user->save();
  679 + if(!$result || !$results) {
  680 + Db::rollback();
  681 + $this->error('绑定微信失败');
  682 + }
  683 + Db::commit();
  684 + $this->success('成功');
  685 + }
  686 +
  687 + /**
510 * @ApiWeigh (76) 688 * @ApiWeigh (76)
511 * @ApiTitle (加入企业-查询企业) 689 * @ApiTitle (加入企业-查询企业)
512 * @ApiSummary (加入企业-查询企业) 690 * @ApiSummary (加入企业-查询企业)
@@ -928,6 +1106,7 @@ class User extends Api @@ -928,6 +1106,7 @@ class User extends Api
928 { 1106 {
929 $user = \app\mobile\model\User::get($this->auth->id); 1107 $user = \app\mobile\model\User::get($this->auth->id);
930 empty($user['image']) && $this->error('请先上传用户头像'); 1108 empty($user['image']) && $this->error('请先上传用户头像');
  1109 + empty($user['exam']) && $this->error('请先选择考试');
931 //将用户的头像保存到本地 1110 //将用户的头像保存到本地
932 $user_dir = 'uploads/user'; 1111 $user_dir = 'uploads/user';
933 if (!file_exists($user_dir)){ 1112 if (!file_exists($user_dir)){
  1 +<?php
  2 +namespace app\mobile\model;
  3 +
  4 +use think\Model;
  5 +
  6 +class UserThird extends Model
  7 +{
  8 + // 表名
  9 + protected $name = 'mobile_user_third';
  10 + // 开启自动写入时间戳字段
  11 + protected $autoWriteTimestamp = 'int';
  12 + // 定义时间戳字段名
  13 + protected $createTime = 'createtime';
  14 + protected $updateTime = 'updatetime';
  15 +}