微信小程序(二十一)小程序登录获取openid和unionid

简介: 在微信小程序中,因为各种各样的原因我们会需要获取到用户的openid或者unionid下面就简单来讲一下在小程序中如何获取openid和unionid。步骤一:微信登录获取登录凭证

在微信小程序中,因为各种各样的原因我们会需要获取到用户的openid或者unionid下面就简单来讲一下在小程序中如何获取openid和unionid。

步骤一:微信登录获取登录凭证

javascript

复制代码

wx.login({
  success: res => {
    // 微信临时登录凭证
    let _code = res.code;
    // 进行网络访问,将 _code 提交给服务端,服务端返回 openid 和 unionid,
    // 服务端对 _code 的处理机制参照 步骤二
    ......
  },
  fail: res => {
    toast.show({ content: '微信登录失败' });
  }
 });

调用微信小程序的 wx.login()可以获取到微信登录的临时凭证,此凭证将用于下面获取 openid 以及 unionid

步骤二:将获取的登录凭证提交后台,获取 openid 与 unionid(在服务端获取)

如何使用登录凭证(注意:下方代码仅用于讲解凭证使用方法以及在调试中快捷获取 openid 以及unionid,不可在正式开发中使用)

javascript

复制代码

wx.request({
  // 通过此 url ,获取 openid 与 unionid
  url: 'https://api.weixin.qq.com/sns/jscode2session',
  data: {
       // 小程序的appid
       'appid': appId,
       // 小程序的secret
       'secret': appSecret,
       // wx.login()返回的登录凭证
       'js_code': jscode,
       // 固定值,不需要改变
       'grant_type': 'authorization_code'
   },
  success: res => {
      // 返回的 openid
      console.log(res.data.openid);
      // 返回的会话密钥
      console.log(res.data.session_key);
      // 注意:上面两个字段值必定会返回,unionid 则只会在满足一定条件下返回,不是必定会返回的值
      console.log(res.data.unionid);
   }
 });

注意!注意!注意!===>

1、上方代码,仅仅用于讲述如何通过登录凭证获取 openid 和 unionid 以及在调试中如何快速获取 openid 和unionid, 并不能在正式开发中在客户端使用,微信不支持正式的线上产品访问 'api.weixin.qq.com/sns/jscode2…' !!! 2、在正式开发中,必须将获取的登录凭证(js_code)提交给服务端,由服务端访问 'api.weixin.qq.com/sns/jscode2…' 获取 openid 和 unionid,在返回给客户端 上边大概说的是原理的情况,下边是我使用的前端代码及服务器端(PHP)代码:

前端:

javascript

复制代码

wx.login({
      success: function (res) {
        // console.log(res)
        if (res.code) {
          //调用函数获取微信用户信息
          _this.getUserInfo(function(info){
          console.log(info)
          _this._user.wx = info.userInfo;
          //发送code与微信用户信息,获取学生数据
          wx.request({
            method: 'POST',
            url: “请求的URL”,
            data: {
              code: res.code,
              encryptedData: info.encryptedData,
              iv: info.iv
            },
            success: function (res) {
              console.log(res);
            },
            fail: function (res) {}
          });
          });
        }
      }
    });

PHP端代码:

php

复制代码

/**
     * @name: 微信小程序登录/注册
     * @desc: 描述
     * @author: camellia
     * @date: 20200822
     * @param:  data    type    description
     * @return: data    type    description
     */
    public function stuAppLogin(Request $request)
    {
        $code = $request->input('code');
        $encryptedData = $request->input('encryptedData');
        $iv = $request->input('iv');
        $ch = curl_init("https://api.weixin.qq.com/sns/jscode2session?appid=$this->appid&secret=$this->appsecret&js_code=$code&grant_type=authorization_code");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $res = curl_exec($ch);
        curl_close($ch);
        // 将微信注册返回值变成数组
        $resarr = json_decode($res, true);
        $token = '';
        // 如果返回值数组中有session_key
        if (isset($resarr['session_key'])) 
        {
            // 如果返回值数组中没有unionid
            if (!isset($resarr['unionid'])) 
            {
                $pc = new WXBizDataCrypt($this->appid, $resarr['session_key']);
                $errCode = $pc->decryptData($encryptedData, $iv, $data);
                if ($errCode == 0) 
                {
                    $dataArr = json_decode($data, true);
                    $resarr['unionid'] = $dataArr['unionId'];
                } 
                else 
                {
                    $datas['code'] = -2;
                    $datas['msg'] = $this->getMsgByCode(-2);
                    return $datas;
                }
            }
            //你的逻辑代码
        }
        return $datas;
    }

unionid的获取条件以及其他几种获取方式

上述已经说明,openid是必定能得到的值,unionid则需要满足一定条件才会返回,下面就讲述一下unionid的获取条件以及其他的获取方式!

image.png

获取unionID的其他几种方法(主要是在客户端获取)

调用接口wx.getUserInfo,从解密数据中获取UnionID。

如果你绑定的微信开放平台下存在同主体的公众号,并且该用户已经关注了该公众号。可以直接通过wx.login获取到用户UnionID,无须用户再次授权。

如果你绑定的微信开放平台下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。也可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。

以上基本上就是小程序获取openid及unionID的方法。

重点还是在微信开放平台那个位置,那个位置不绑定应用,打死你也取不到unionID。剩下的代码部分,请参照微信官方文档。

有好的建议,请在下方输入你的评论。

欢迎访问个人博客:guanchao.site

欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”

目录
相关文章
|
6月前
|
缓存 小程序 前端开发
商城/点餐/家政类小程序源码合集_微信抖音小程序源码开发从入门到精通实战
本文系统讲解如何利用现有源码快速开发商城、点餐、家政类微信/抖音小程序,涵盖环境搭建、核心功能实现、多平台部署与优化,提供完整技术方案。实战导向,助力开发者高效入门与落地。
|
6月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
10月前
|
小程序 前端开发 Android开发
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
1956 29
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
|
10月前
|
JSON 监控 小程序
微信百度字节小程序包过大解决方案(实战经验总结)-优雅草卓伊凡|果果|小无
微信百度字节小程序包过大解决方案(实战经验总结)-优雅草卓伊凡|果果|小无
1139 14
微信百度字节小程序包过大解决方案(实战经验总结)-优雅草卓伊凡|果果|小无
|
JSON 小程序 应用服务中间件
微信的openid是用户的唯一id吗?
【10月更文挑战第4天】微信的openid是用户的唯一id吗?
3444 5
|
存储 JSON 小程序
微信小程序入门之新建并认识小程序结构
微信小程序入门之新建并认识小程序结构
266 1
|
12月前
|
存储 移动开发 小程序
校园圈子系统小程序(圈子论坛、私信聊天、资料共享、二手交易、兼职,跑腿)开源码开发/微信公众号、小程序、H5多端账号同步/搭建多城市的综合社交生活平台
基于开源技术栈构建的校园圈子系统小程序,整合社交与生活服务功能,涵盖兴趣圈子、私信聊天、资料共享、二手交易、兼职跑腿等六大核心模块。通过多端账号同步(微信公众号/小程序/H5),实现数据实时交互,满足学生群体的多元化需求。项目精准锚定校园市场,以“社交+服务”双轮驱动,提供一站式解决方案,支持快速部署与多校区运营,同时具备广告、佣金、会员等多元变现能力,是打造校园生态的理想工具。
1246 3
校园圈子系统小程序(圈子论坛、私信聊天、资料共享、二手交易、兼职,跑腿)开源码开发/微信公众号、小程序、H5多端账号同步/搭建多城市的综合社交生活平台
|
小程序 数据安全/隐私保护 开发者
【02】微信支付商户申请下户到配置完整流程-微信开放平台申请APP应用-微信商户支付绑定appid-公众号和小程序分别申请appid-申请+配置完整流程-优雅草卓伊凡
【02】微信支付商户申请下户到配置完整流程-微信开放平台申请APP应用-微信商户支付绑定appid-公众号和小程序分别申请appid-申请+配置完整流程-优雅草卓伊凡
931 3
|
人工智能 小程序 程序员
【视频测评 DEMO 参考】VSCode 神级 AI 插件通义灵码:完全免费+实战教程+微信贪吃蛇小程序
VSCode 神级 AI 插件通义灵码:完全免费+实战教程+微信贪吃蛇小程序
1014 8
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
3619 12

热门文章

最新文章