微信小程序获取unionId

官方解释

如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,UnionID是相同的。

获取途径

wx.getUserInfo 从解密数据中获取 UnionID

注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。
第一步
需要的参数session_key, iv, encryptedData

  1. session_key(通过微信小程序传入的code调用以下的地址就能够获取
    https://api.weixin.qq.com/sns/jscode2session
  2. iv 微信小程序调用wx.getUserInfo(只有用户同意的情况下才存在)
  3. encryptedData 微信小程序调用wx.getUserInfo(只有用户同意的情况下才存在)
// An highlighted block
 /// <summary>
        /// AES解密
        /// </summary>
        /// <param name="encryptedData">待解密的字节数组</param>
        /// <param name="sessionKey">解密密钥字节数组</param>
        /// <param name="iv">IV初始化向量字节数组</param>
        /// <param name="cipher">运算模式</param>
        /// <param name="padding">填充模式</param>
        /// <returns></returns>
        public static string DecryptByAesBytes(string encryptedData, string sessionKey, string iv)
        {
            try
            {
                //非空验证
                if (!string.IsNullOrWhiteSpace(encryptedData) && !string.IsNullOrWhiteSpace(sessionKey) && !string.IsNullOrWhiteSpace(iv))
                {
                    var decryptBytes = Convert.FromBase64String(encryptedData.Replace(' ', '+'));
                    var keyBytes = Convert.FromBase64String(sessionKey.Replace(' ', '+'));
                    var ivBytes = Convert.FromBase64String(iv.Replace(' ', '+'));

                    var aes = new AesCryptoServiceProvider
                    {
                        Key = keyBytes,
                        IV = ivBytes,
                        Mode = CipherMode.CBC,
                        Padding = PaddingMode.PKCS7
                    };

                    var outputBytes = aes.CreateDecryptor().TransformFinalBlock(decryptBytes, 0, decryptBytes.Length);

                    var decryptResult = Encoding.UTF8.GetString(outputBytes);
                    dynamic decryptData = JsonConvert.DeserializeObject(decryptResult, new { unionid = "" }.GetType());
                   
                    return decryptData.unionid;
                }
                else
                {
                    return "";
                }
            }
            catch (Exception e)
            {
              Logger.WriteLog("AES对称解密失败原因:" + e.Message);
                return "";
            }
        }

通过调用官方的接口获取(局限性)

调用以下地址可以获取unionid和openid

https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&grant_type=authorization_code&js_code={2}

注意 只有关注了公众号的前提下这个接口才会返回unionid 否则返回是null

通过支付后5分钟调用微信getPaidUnionIdj接口

这里不做详细介绍了,看下官网例子就能够明白,上面的话是常用且实用的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值