微信小程序获取获取unionId的两种方法


关键词

微信 小程序 unionId

摘要

本文介绍微信小程序获取获取unionId的两种方法,包括通过code2session和解密wx.getUserInfo。

先直接看代码:

import wd from '../../../webui/lib/wd.js'
const app = getApp()

Page({

    /**
     * 页面的初始数据
     */
    data: {
        unionId1: '', //从wx.getUserInfo获取
        unionId2: '', //从code2session获取
    }

    //<button open-type="getUserInfo" bindgetuserinfo="onGetUserInfo">获取unionId</button>
    //点击opentype为getUserInfo的按钮时
    ,onGetUserInfo (e) {
        var that = this

        console.log('按钮的属性:');
        console.log(e.detail.userInfo)

        //1、登录
        wx.login({
            success: function (res) {
                wxcode2session(res)
            }
        })

        //2、获取session
        var wxcode2session=function(res){
            var data = {
                action: 'wxcode2session',
                code: res.code
            }
            wd.wd.mina.request(data).then(res=>{
                console.log('wxcode2session return:');
                console.log(res.data); //这里面
                /*{
                    openid: "oXB7d4omfhcqH4A0YWsmMd4CBxe0",
                    session_key: "zPLZSql5kcoF72VkOvBwIw==",
                    unionid: "oEbPtwzaqqx9W36Ib4Um-lN6n6R8"
                }*/
                if( res.data.unionid != undefined ){
                    that.setData({
                        unionId2: res.data.unionid
                    })
                }
                var session_key = res.data.session_key
                getInfo(session_key)
            })
        }

        //3、获取信息
        var getInfo = function(session_key){
            wx.getUserInfo({
                lang: 'zh_CN',
                success: function (res) {
                    console.log('wx.getUserInfo return:');
                    console.log(res);
                    var iv = res.iv
                    var encryptedData = res.encryptedData
                    if (iv != undefined && encryptedData != undefined) {
                        res['session_key'] = session_key
                        decrypt(res)
                    }
                }
            })
        }

        //4、解密数据
        var decrypt = function(res){
            var data = {
                action: 'wxDecryptData',
                encryptedData: res.encryptedData,
                iv: res.iv,
                sessionKey: res.session_key,
            }
            console.log('wxDecryptData send:');
            console.log(data);
            wd.wd.mina.request(data).then(res=>{
                var ret = res.data;
                console.log('wxDecryptData return:');
                console.log(ret);
            
                if( ret.status == 0 ){
                    if( ret.data.unionId != undefined ){
                        that.setData({
                            unionId1: ret.data.unionId
                        })
                    }
                }else{
                    
                }
            })
        }//eof-decrypt
    }

})


官方说有六种方法可以获取unionId:

绑定了开发者帐号的小程序,可以通过以下途径获取 UnionID。

1、调用接口 wx.getUserInfo,从解密数据中获取 UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。

2、如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。

3、如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID ,无须用户再次授权。

4、用户在小程序(暂不支持小游戏)中支付完成后,开发者可以直接通过getPaidUnionId接口获取该用户的 UnionID,无需用户授权。注意:本接口仅在用户支付完成后的5分钟内有效,请开发者妥善处理。

5、小程序端调用云函数时,如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号,可在云函数中通过 cloud.getWXContext 获取 UnionID。

6、小程序端调用云函数时,如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用,也可在云函数中通过 cloud.getWXContext 获取 UnionID。

第3项是涉及到移动应用,第4项是小程序支付,第5、6项是云开发。所以小程序里面常规的开发就是第1、2两种。也就是我们上面演示的两种方法。

 

要饭二维码

洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

文章的版权

本文属于“洪哥笔记”原创文章,转载请注明来源地址:微信小程序获取获取unionId的两种方法:http://www.splaybow.com/post/xiaochengxu-unionid-386.html

如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:8771947!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D

« 小程序wxml中include文件不会包含同名的wxss文件 微信小程序服务器后端解密数据的算法 »