微信小程序 微信授权登录 微信登录

一、调用接口获取临时登录凭证(code)

wx.login({
  success(res) {
    if (res.code) {
        // res.code => 登录凭证
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

二、调用 code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key

本接口应在后端服务器调用

  • 请求地址
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
  • 请求参数
属性 类型 默认值 必填 说明
appid string 小程序appid
secret string 小程序appSecret
js_code string 登录时获取的code
grant_type string 授权类型,此处只需要填写 authorization_code
  • 返回值
属性 类型 说明
openid string 用户唯一标识
session_key string 会话密钥
unionid string 用户在开放平台的唯一标识符,在满足 UnionID 下发条件的情况下会返回
errcode number 错误码
errmsg string 错误信息
  • 后台接口代码(PHP)
    public function actionWechatLogin()
    {
        // 获取传参中的code
        $code = $this->checkIsGet()->get('code');
        
        // 调用微信接口获取openid
        $openid = $this->getOpenId($code);

        // 根据openid去数据库中查询用户信息,能查到数据继续下面的操作,未查到 提示未绑定微信登录
        
        //重置token
        // 1. 生成token
        $authKey = md5(md5(time() . uniqid() . mt_rand(0, 999)));
        // 2. 生成的token保存到 mysql数据库
        
        // 3. 生成的token保存到 redis (键:token的值,value:用户信息)

        // 返回
        Output::output(true, '0', '成功', ['openid' => $openid, 'token' => $authKey]);
    }
    
    private function getOpenId($code)
    {
        // 这里的appid、secret、 grant_type  需要替换成你自己的
        $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.Yii::$app->params['mini_program']['AppID'] . '&secret='.Yii::$app->params['mini_program']['AppSecret'].'&js_code='.$code.'&grant_type=authorization_code';

        $ch = curl_init();
        $options = array(
            CURLOPT_URL => $url,
            CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0",
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_HTTPHEADER => array("Content-Type: application/json-rpc")
        );
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查

        $html = curl_exec($ch);

        $info = curl_getinfo($ch);
        curl_close($ch);
        $resData = json_decode($html);
        Yii::error($html);
        if (!isset($resData->openid)) {
            Output::output(false, '1', '获取openid出错。', null);
        }
        Yii::error('openid == ' . $resData->openid);
        return $resData->openid;
    }

调用后台接口获取token

  • 小程序端记录token到本地
wx.setStorageSync('token', token)
  • 调用接口时,取出token传到后台
wx.getStorageSync('token')

*注意

  1. 临时登录凭证 code 只能使用一次
  2. 用户登录凭证(有效期五分钟)

你可能感兴趣的:(微信小程序 微信授权登录 微信登录)