LoginController.php 3.8 KB
<?php
/**
 * Created by PhpStorm.
 * User: ruidiudiu
 * Date: 2018/11/26
 * Time: 14:49
 */

namespace app\portal\controller;


use cmf\controller\HomeBaseController;
use think\Db;
use wxapp\aes\WXBizDataCrypt;

/**
 * @title 登录相关接口
 * @description 登录相关接口
 * @group 登录相关接口
 */
class LoginController extends HomeBaseController{
    private $appId="wxf10f3237c752f947";
    private $appSecret="f1953d8a76217dee600dc44038496cfc";
    /**
     * @title 登录凭证校验
     * @description 接口说明
     * @author 董瑞恩
     * @url /portal/login/login
     * @method post
     *
     * @param name:code  type:String require:1 default:null  desc:登录凭证
     *
     * @return users_id:用户id
     * @return type:是否注册(0、未注册,1、已注册)
     * @return is_use:是否在使用设备(0:空闲,1:在用)
     */
    public function login(){
        $code=$this->request->param('code');
        //登录凭证校验接口
        $loginUrl="https://api.weixin.qq.com/sns/jscode2session?appid=".$this->appId."&secret=".$this->appSecret."&js_code=".$code."&grant_type=authorization_code";
        $loginData=json_decode(file_get_contents($loginUrl),true);
        if(isset($loginData['openid'])){
            $users = Db::name('users')->where('open_id', $loginData['openid'])->find();
            if (empty($users)){
                $users_id=Db::name('users')->insertGetId(['open_id'=>$loginData['openid'],'create_time'=>time()]);
                $this->apiResponse(200,'success',['users_id'=>$users_id,'type'=>0,'is_use'=>0]);
            }else{
                if (empty($users['phone'])){
                    $this->apiResponse(200,'success',['users_id'=>$users['id'],'type'=>0,'is_use'=>$users['is_use']]);
                }else{
                    $this->apiResponse(200,'success',['users_id'=>$users['id'],'type'=>1,'is_use'=>$users['is_use']]);
                }
            }
        }else{
            $this->apiResponse(301,'获取登录凭证失败',$loginData);
        }
    }

    /**
     * @title 获取手机号
     * @description 获取手机号
     * @author 董瑞恩
     * @url /portal/login/getPhone
     * @method GET
     *
     * @param name:code type:String require:1 default:无 other: desc:code
     * @param name:encrypted_data type:String require:1 default:无 other: desc:encrypted_data
     * @param name:iv type:String require:1 default:无 other: desc:iv
     *
     * @return users_id:用户id
     * @return type:是否注册(0、未注册,1、已注册)
     * @return is_use:是否在使用设备(0:空闲,1:在用)
     */
    public function getPhone(){
        $param = $this->request->param();
        $loginUrl="https://api.weixin.qq.com/sns/jscode2session?appid=".$this->appId."&secret=".$this->appSecret."&js_code=".$param['code']."&grant_type=authorization_code";
        $response=cmf_curl_get($loginUrl);
        $response=json_decode($response,true);
        if (!empty($response['errcode'])) {
            $this->apiResponse(303,'获取session_key失败');
        }
        $openid     = $response['openid'];
        $sessionKey = $response['session_key'];

        $pc      = new WXBizDataCrypt($this->appId, $sessionKey);
        $errCode = $pc->decryptData($param['encrypted_data'], $param['iv'], $wxUserData);
        if ($errCode != 0) {
            $this->apiResponse(301,'操作失败');
        }
        $phone=$wxUserData['phoneNumber'];
        $users=Db::name('users')->where('open_id',$openid)->find();
        try{
            Db::name('users')->where('open_id',$openid)->update(['phone'=>$phone]);
        }catch (\Exception $exception){
            $this->apiResponse(302,'error:'.$exception->getMessage());
        }
        $this->apiResponse(200,'success',['users_id'=>$users['id'],'type'=>1,'is_use'=>$users['is_use']]);
    }



}