调用网易云二维码登录API,实现微信小程序登录

调用网易云二维码登录API,实现微信小程序登录

首先前往网易云音乐API官网 binaryify.github.io/NeteaseClou…

首先根据文档的链接下载好配置文件,再根据官方文档启动好本地的服务器

1. 因为服务器启动的端口号默认为3000,我们需要将端口号改为4000去启动,避免与原来的3000端口号的服务器发生冲突。启动方式:在上面链接下载好的文件里面,输入cmd,进入小黑框 输入 :set PORT=4000 && node app.js

二维码登录

说明: 二维码登录涉及到 3 个接口,调用务必带上时间戳,防止缓存

[1. 二维码 key 生成接口]

说明: 调用此接口可生成一个 key

接口地址 :  /login/qr/key

[2. 二维码生成接口]

说明: 调用此接口传入上一个接口生成的 key 可生成二维码图片的 base64 和二维码信息,可使用 base64 展示图片,或者使用二维码信息内容自行使用第三方二维码生成库渲染二维码

必选参数: key,由第一个接口生成

可选参数: qrimg 传入后会额外返回二维码图片 base64 编码

接口地址 :  /login/qr/create

调用例子 :  /login/qr/create?key=xxx

[3. 二维码检测扫码状态接口]

说明: 轮询此接口可获取二维码扫码状态,800 为二维码过期,801 为等待扫码,802 为待确认,803 为授权登录成功(803 状态码下会返回 cookies)

必选参数: key,由第一个接口生成

接口地址 :  /login/qr/check

调用例子 :  /login/qr/check?key=xxx

调用可参考项目文件例子/public/qrlogin.html (访问地址:http://localhost:3000/qrlogin.html)

  1. 接下来是代码演示:

    //封装发送登录数据请求的函数 tools.js  。这里的url的 config.host1 部分(前面视频有讲到另外在config.js中配置),如果你没有配置好,请改为 url:http://localhost:4000,

export default (url,data={},method="GET")=>{
    return new Promise((resolve,reject)=>{
        wx.request({
            url:config.host1 + url,
            data,
            method,
            success:(res)=>{
                //console.log('请求成功',res);
                resolve(res.data)
            },
            fail:(err)=>{
               // console.log('请求失败',err);
                reject(err)
            }
          })
    })
}

下面我们回到登录页面(login)设置一个button跳转到另外一个页面(qrcode)实现二维码登录,因为在原登录页面登录会比较麻烦(如果你觉得你可以处理好样式也未尝不可),这里我设置了一个qrcode page页面

    // qrcode.wxml
 <view class="Container">
    <button class="confirm-btn" bindtap="qrlogin">获取二维码</button>
    <image id="qrimg" src="{{qrimg}}" class="qrimg"></image>
</view> 
 //引入上面封装好的请求函数
import tools from '../../utills/tools'

 data: {
    qrimg: '', //存放二维码
  },

//qrcode.js
      //检测扫码状态接口
  async checkStatus(key) {
    let result = await tools(`/login/qr/check?key=${key}&timestamp=${Date.now()}`,)
    console.log(result, 'checkStatus');
    return result
  },
    
    //获取登录状态的函数 需要的参数(cooike(由上一个函数请求返回),请求方式:post)
    //本人在这个函数里头没有调用上面自己封装好的请求函数,因为自己也不会,尝试了一晚上也不能返回到用户信息,如果有大佬能发现问题,请务必告诉!!!
  async getLoginStatus(cookie = ''){
    console.log(cookie,'cookie');
    return new Promise((resolve,reject)=>{
      wx.request({
          url:`http://localhost:4000/login/status?timestamp=${Date.now()}`,
          method: 'post',
          data: {
            cookie,
          },
          success:(res)=>{
              console.log('请求成功',res.data.data.profile);
              resolve(res.data)
    //data里面的profile就是用户信息存储的信息。
              wx.setStorageSync('userInfo', JSON.stringify(res.data.data.profile))
          },
          fail:(err)=>{
              console.log('请求失败',err);
              reject(err)
          }
        })
  })
  },
    
    //这里你也可以用其他生命函数钩子去触发,本人比较希望通过绑定点击事件
      async qrlogin() {
    //获取key
    let reskey = await tools(`/login/qr/key?timestamp=${Date.now()}`)
    //console.log(this.data.unikey,'unikey');

    //获取二维码
    let result2 = await tools(`/login/qr/create?key=${reskey.data.unikey}&qrimg=true&timestamp=${Date.now()}`)
    //console.log(result2,'qrlogin');
    //存下二维码
    this.setData({
      qrimg: result2.data.qrimg
    })

    let timer
    let timestamp = Date.now()
    //定时器查看
    timer = setInterval(async () => {
      //调用检测扫码状态接口
      const result3 = await this.checkStatus(reskey.data.unikey)
      console.log(result3, '3');

      if (result3.code === 800) {
        wx.showToast({
          title: '二维码已过期,请重新获取',
        })
        clearInterval(timer)
      }
      if (result3.code === 803) {
        // 这一步会返回cookie
        wx.showToast({
          title: '授权登录成功',
        })
        clearInterval(timer)
      //成功获取到cooike,回到前面的函数请求获取用户信息。
        await this.getLoginStatus(result3.cookie)
        
        //登录成功跳转到个人页面
        wx.reLaunch({
          url:'/pages/personal/personal'
        })
      }
    }, 3000)

  },

完成这些步骤,最后应该可以成功的进行微信二维码登录了,在微信开发工具的Stroge可查看userInfo是否有数据。(注意:扫二维码登录是用网易云App扫的,不是用微信扫码!!!)

本人也是处于微信小程序开发学习当中,如有问题请在评论区进行交流,如果能帮助到你的话,请点赞吧!!!。

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
基于Node.js,提供网易云所有API接口数据,包括:登录,获取用户信息 , 歌单,收藏,mv, dj 数量 获取用户歌单 获取用户电台 获取用户关注列表 获取用户粉丝列表 获取用户动态 获取用户播放记录 获取精品歌单 获取歌单详情 搜索 搜索建议 获取歌词 歌曲评论 收藏单曲到歌单 专辑评论 歌单评论 mv 评论 电台节目评论 banner 获取歌曲详情 获取专辑内容 获取歌手单曲 获取歌手 mv 获取歌手专辑 获取歌手描述 获取相似歌手 获取相似歌单 相似 mv 获取相似音乐 获取最近 5 个听了这首歌的用户 获取每日推荐歌单 获取每日推荐歌曲 私人 FM 签到 喜欢音乐 垃圾桶 歌单 ( 网友精选碟 ) 新碟上架 热门歌手 最新 mv 推荐 mv 推荐歌单 推荐新音乐 推荐电台 推荐节目 独家放送 mv 排行 获取 mv 数据 播放 mv/视频 排行榜 歌手榜 云盘 电台 - 推荐 电台 - 分类 电台 - 分类推荐 电台 - 订阅 电台 - 详情 电台 - 节目 给评论点赞 获取动态 热搜列表(简略) 发送私信 发送私信歌单 新建歌单 收藏/取消收藏歌单 歌单分类 收藏的歌手列表 订阅的电台列表 相关歌单推荐 付费精选接口 音乐是否可用检查接口 登录状态 获取视频播放地址 发送/删除评论 热门评论 视频评论 退出登录 所有榜单 所有榜单内容摘要 收藏视频 收藏 MV 视频详情 相关视频 关注用户 新歌速递 喜欢音乐列表(无序) 收藏的 MV 列表 获取最新专辑 听歌打卡 获取视频标签下的视频 已收藏专辑列表 获取动态评论 歌单收藏者列表 云盘歌曲删除 热门话题 电台 - 推荐类型 电台 - 非热门类型 电台 - 今日优选 心动模式/智能播放 转发动态 删除动态 分享歌曲、歌单、mv、电台、电台节目到动态 通知-私信 通知-评论 通知-@我 通知-通知 设置 云盘数据详情 私信内容 我的数字专辑 batch批量请求接口 获取视频标签列表 全部mv 网易出品mv 收藏/取消收藏专辑 专辑动态信息 热搜列表(详细) 更换绑定手机 检测手机号码是否已注册 初始化昵称 更新歌单描述 更新歌单名 更新歌单标签 默认搜索关键词 删除歌单 电台banner 用户电台 热门电台 电台 - 节目详情 电台 - 节目榜 电台 - 新晋电台榜/热门电台榜 类别热门电台 云村热评 电台24小时节目榜 电台24小时主播榜 电台最热主播榜 电台主播新人榜 电台付费精品榜 歌手热门50首歌曲

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值