微信小程序授权登录

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 @   王越666  阅读(529)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示