您的位置:

Unionid详解

一、Unionid是什么意思

Unionid是一种唯一的用户标识符,用于在不同应用之间、不同平台之间唯一标识一个用户。通俗来说,每个用户在一个公众平台中的openid是不同的,但是在多个公众平台中的unionid是相同的。

Unionid是由微信公众平台生成,通常与用户的微信号和微信开放平台的appid绑定。在用户使用同一微信号关注多个公众号时,这些公众号即可共享同一个unionid,方便用户在不同境界下进行统一认证。

二、公众号获取Unionid

获取用户的Unionid需要在用户关注公众号时,将用户的openid和Unionid进行绑定。在用户授权登录公众号时,公众号可以通过OAuth2协议和微信开放平台网页授权机制,获取到用户的openid和Unionid信息。

公众号开发者可以通过在微信开放平台申请网页授权,获取用户授权后获得的access_token,进而拉取用户信息,包括Unionid。

三、Unionid不能为空啥意思

Unionid不能为空是指用户在同一微信开放平台下只有一个unionid,用户在不同微信开放平台下可能会有不同的unionid。如果微信开放平台上的公众号或小程序在获取用户信息时,发现该用户的Unionid为空,那么就会返回错误码40029,提示UnionID不存在。

四、静默授权获取Unionid

静默授权获取Unionid,是指用户在登录后无需手动点击确认的情况下,自动完成授权。在用户第一次登录的时候,公众号或小程序可以通过oauth2授权接口,获取到用户的openid和Unionid,之后不需要再次询问用户。

使用静默授权获取Unionid需要注意,用户必须在同一微信开放平台下,否则会存在Unionid不唯一的情况。在使用静默授权时,需要告知授权用户获取Unionid的原因和用途,确保用户信息安全。

五、Unionid被占用是什么意思

Unionid被占用表示一个Unionid已经被另一个微信开放平台用户绑定。开放平台会自动检验Unionid的唯一性,用户试图通过静默授权方式绑定已有的Unionid时,会返回错误码40003,提示“openid已绑定该UnionID”,此时需要开发者提示用户更换其他微信号进行授权。

六、微信获得Unionid

//使用code换取openid和access_token
function getAccessToken($code){
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".APPID."&secret=".APPSECRET."&code=".$code."&grant_type=authorization_code";
    $res = file_get_contents($url);//获取openid
    $resArr = json_decode($res, true);
    return $resArr["openid"];
}

//通过openid获取用户信息(包括Unionid)
function getUserInfo($openid){
    $accessToken = "accesstoken";
    $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$accessToken."&openid=".$openid."&lang=zh_CN";
    $res = file_get_contents($url);
    $resArr = json_decode($res, true);
    return $resArr["unionid"];
}

七、Unionid和Openid区别

Unionid和Openid都是微信公众平台提供的用户标识符,用于唯一标识用户。但是它们的作用范围和使用方式有一定区别。

Openid主要用于单个公众号或移动应用中,用于标识用户在当前应用中的唯一性。而Unionid则是用于多个公众号或移动应用之间,唯一标识一个用户的标识符。

八、微信重置Unionid

微信提供了一种机制,可以让用户删除微信公众平台下所有去授权的信息,包括Unionid。当用户需要在同一微信开放平台下重新绑定Unionid时,需要删除之前的授权信息,并重新登录获取授权信息。

九、中智e家显示Unionid

public function user_info(){
    $openid = session('openid');
    $unionid = session('unionid');
    $nick_name = session('nickname');
    $user_headimgurl = session('headimgurl');
    if($openid && $unionid){
        $uid = M('user')->where(['openid'=>$openid])->getField('id');
        if($uid){
            redirect(U('user/info'));
        }else{
            $this->assign('openid', $openid);
            $this->assign('unionid', $unionid);
            $this->assign('nick_name', base64_decode($nick_name));
            $this->assign('user_headimgurl', $user_headimgurl);
            $this->display();
        }
    }else{
        $code = I('code');
        $user_control = new UserControl();
        $baseinfo = $user_control->getWxAccessToken($code);
        session('openid', $baseinfo['openid']);
        session('unionid', $baseinfo['unionid']);
        session('nickname', $baseinfo['nickname']);
        session('headimgurl', $baseinfo['headimgurl']);
        redirect(U('user_info'));
    }
}