微信小程序授权登录

wxml:
<button type="primary" open-type="getUserInfo" bind:tap="login">授权登录</button>
wxjs:
 // 微信授权
  login(evt){
    var that=this;
    //    wx.getUserProfile获取用户信息
    wx.getUserProfile({
      // desc    声明获取用户个人信息后的用途,不超过30个字符
      desc: 'desc',
      success:res=>{
        if (res.userInfo) {
          /*  wx.login 调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)*/
          wx.login({
            success:ret=>{
              
              // 获取code
              var code=ret.code;
              // 获取用户昵称
              var nickName=res.userInfo.nickName;
              // 获取用户照片
              var avatarUrl=res.userInfo.avatarUrl;
              // 发送至php后端
              wx.request({
                url: 'http://www.yan.com/api/xcx/login', //仅为示例,并非真实的接口地址
                data: {
                  code:code,
                  nickName:nickName,
                  avatarUrl:avatarUrl
                },
                method:"POST",
                header: {
                  'content-type': 'application/json' // 默认值
                },
                // 数据返回json格式
                success (res) {
                  console.log(res.data.data);
              
                  // console.log(re.data)
                  // 将用户id储存于本地
                  wx.setStorageSync('userid', res.data.data.id);
                  wx.switchTab({
                    // 跳转至首页
                    url: '/pages/good/good',
                  })
                }
              })

            }
          })
        }else{
          console.log('用户拒绝啦');
        }
      }
    })
  }

通过laravel7 api.php路由将数据发送至控制器,进行添加入库:

Route::group(['namespace'=>'xcx'],function (){
//  授权 登录
    Route::post('xcx/login','LoginController@login');


});

控制器处理数据:

  public function login(Request $request)
    {
        $params = $request->post();
//        获取appid
        $appid = "wx6483********82b0";
        // 从微信公众平台获得secret
        $secret = "95e2acaf******4748a152ed";
        // 发送请求换取openid和sessionkey
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=" . $params['code'] . "&grant_type=authorization_code";
        // 暂使用file_get_contents()发送请求,你可以使用CURL扩展的形式实现,获取opid和session_key
        $res = json_decode(file_get_contents($url), true);
//        给$params追加openid
        $params['openid'] = $res['openid'];
        //  给$params追加session_key
        $params['session_key'] = $res['session_key'];

//        查看数据库里是否有openid,有就修改,没有就添加
        $res = Wxuser::where('openid', $params['openid'])->first();
//        有就修改用户的额openID
        if ($res) {
            Wxuser::where('openid', $params['openid'])->update($params);
            return ['code' => 201, 'meg' => '修改成功', 'data' => $res];
        } else {
//           没有就添加新用户
            $add = Wxuser::create($params);
            return ['code' => 200, 'meg' => '添加成功', 'data' => $add];
        }

    }

模型代码:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Wxuser extends Model
{
    //
    protected $guarded=[];
    public $timestamps=false;
}

效果图:

 

posted @ 2021-12-10 21:35  王越666  阅读(507)  评论(0编辑  收藏  举报