使用uni-app获取微信小程序openid(同理小程序) -- 详解

精选30+云产品,助力企业轻松上云!>>> hot3.png

博客: 使用uni-app进行小程序的授权登录(获取用户头像,名称,性别,地区等)

博客: 使用uni-app获取微信小程序openid--Java后端实现

介绍openid

微信开发时, 用户使用小程序需要授权, 这时就要用到openid进行绑定这个用户。 openid是微信用户在公众号appid下的唯一用户标识(appid不同,则获取到的openid就不同),可用于永久标记一个用户,同时也是微信JSAPI支付的必传参数。

1. 为什么要使用openid呢?

openid是指这个用户在某一个小程序中授权后的唯一标识(比如你的身份证)

2. 如果不使用会带来什么问题呢?

第一次授权时将用户数据保存到数据库, 然后用户把缓存清理了, 第二次授权的时候我们就无法知道这个用户是否授权过。用户就会重新保存一份新的数据进数据库。这是不符合正常逻辑的,因为如果该用户买过东西,再次授权,东西都看不到了,会像新的号一样。当然了, 有的设计是有自己的记录方式的,比如需要注册登录。

3. openid如何获取?

需要用到wx指定的接口

注意:

注意:一般都是将code值传到后端去获取openid,因为在前端可能会被抓包或爬取到你的appid和secret,不安全,如果放在后端获取openid,除非你的服务器被攻击了,不然就是安全的。下面的实例是在前端直接获取的,这个明白后,可以直接改成后端的,是逻辑一样的。最上面分享了Java后端的实现

步骤一:获取code值

通过uni.login()接口(同理wx.login), 拿到用户的code值(5分钟后失效)。

代码:
//漫路h
uni.login({
  success: res => {
    //code值(5分钟失效)
    console.info(res.code);
  }
});

步骤二:获取openid

通过小程序的appid和secret和步骤一获取到的code值向wx指定的接口发送请求,便会返回openid(每个小程序唯一的)

代码:
//漫路h
uni.login({
  success: res => {
    //code值(5分钟失效)
    console.info(res.code);
    //小程序appid
    let appid = 'wx3599fe368a452c9'; //我瞎写的
    //小程序secret
    let secret = '1a5567978saf65c43s8s2397er1332ce'; //我瞎写的
    //wx接口路径
    let url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' + res.code + '&grant_type=authorization_code';
    uni.request({
      url: url, // 请求路径
      method: 'GET', //请求方式
      success: result => {
        //响应成功
        //这里就获取到了openid了
        console.info(result.data.openid);
        uni.setStorage({
          key:'user',
          data: result.data.openid
        })
      },
      fail: err => {} //失败
    });
  }
});
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
1. 开发准备 在开始开发前,需要先进行一些准备工作: - 安装uni-app的开发环境,详见uni-app官方文档; - 创建一个微信小程序开发者账号,获取小程序AppID; - 在小程序管理后台中,开启“获取用户信息”权限和“登录”权限。 2. 登录流程 在uni-app中,可以使用uni.login()方法进行微信登录。该方法返回一个promise对象,表示登录是否成功。在登录成功后,可以使用uni.getUserInfo()方法获取用户信息。 具体的登录流程如下: - 调用uni.login()方法进行微信登录,并获取到code值; - 将code值发送到后端服务器,后端服务器根据code值获取到用户的openid和session_key; - 将openid和session_key存储到本地storage中,用于后续的用户认证; - 根据获取到的用户openid,可以将用户与后端系统中的用户进行关联。 3. 获取用户信息 在登录成功后,可以使用uni.getUserInfo()方法获取用户信息。该方法返回一个promise对象,表示获取用户信息是否成功。在获取成功后,可以将用户信息展示到页面上,或者将用户信息发送到后端服务器。 具体的获取用户信息流程如下: - 调用uni.getUserInfo()方法获取用户信息; - 将获取到的用户信息展示到页面上,或者将用户信息发送到后端服务器。 4. 完整代码示例 下面是一个完整的uni-app微信小程序登录开发示例代码: ``` <template> <view class="container"> <view class="userinfo"> <button @tap="login" v-if="!hasUserInfo">微信登录</button> <image :src="userInfo.avatarUrl" v-if="hasUserInfo" /> <text>{{userInfo.nickName}}</text> </view> </view> </template> <script> export default { data() { return { userInfo: {}, hasUserInfo: false } }, methods: { login() { uni.login({ success: res => { if (res.code) { // 将code发送到后端服务器 uni.request({ url: 'https://example.com/login', data: { code: res.code }, success: res => { // 将openid和session_key存储到本地storage uni.setStorageSync('openid', res.data.openid) uni.setStorageSync('session_key', res.data.session_key) } }) } else { console.log('登录失败:' + res.errMsg) } } }) }, getUserInfo() { uni.getUserInfo({ success: res => { this.userInfo = res.userInfo this.hasUserInfo = true // 将用户信息发送到后端服务器 uni.request({ url: 'https://example.com/userInfo', data: { openid: uni.getStorageSync('openid'), userInfo: res.userInfo } }) } }) } } } </script> <style> .container { display: flex; justify-content: center; align-items: center; height: 100vh; } .userinfo { display: flex; flex-direction: column; align-items: center; } </style> ``` 在上面的代码中,当用户点击“微信登录”按钮时,会调用login()方法进行微信登录,并将获取到的openid和session_key存储到本地storage中。当用户点击“获取用户信息”按钮时,会调用getUserInfo()方法获取用户信息,并将用户信息发送到后端服务器。在页面上,会根据hasUserInfo变量的值来决定是否展示用户信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值