微信开发中你不知道的事~openid、unionid、session_key

先了解基本概念~

  • openid: 微信公众平台对用户的唯一标识
  • unionid: 同一个微信开放平台下的用户唯一标识
  • session_key: 会话密钥

一.openid

  • 可理解成1个微信用户打开1个微信公众号大门的唯一的1把钥匙
  • 同一组织(企业)注册的不同类型公众平台,被看作是多个不同的账号
  • 所以,当小明同学同时注册了统一企业的公众号和小程序时,那么他将拥有两把钥匙(openid)

二.unionid

1.UnionID 机制说明

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

2.UnionID获取途径
  • 绑定了开发者帐号的小程序,可以通过以下途径获取 UnionID。
  • 开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户授权。
  • 小程序端调用云函数时,可在云函数中通过 cloud.getWXContext 获取 UnionID。
3.微信开放平台绑定小程序流程

登录微信开放平台 — 管理中心 — 小程序 — 绑定小程序

三.session_key

待补充

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要在Java获取openidsession_key,您需要使用微信提供的小程序登录API。您可以通过调用以下API获取openidsession_key: ```java String appId = "yourAppId"; String secret = "yourAppSecret"; String jsCode = "wx.login()获取到的code"; String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appId + "&secret=" + secret + "&js_code=" + jsCode + "&grant_type=authorization_code"; HttpClient client = new HttpClient(); GetMethod method = new GetMethod(url); client.executeMethod(method); String response = method.getResponseBodyAsString(); JSONObject jsonObject = JSONObject.parseObject(response); String openid = jsonObject.getString("openid"); String sessionKey = jsonObject.getString("session_key"); ``` 要解密用户私密数据(UnionId或手机号),您需要使用微信提供的AES解密算法。以下是示例代码: ```java String iv = "yourIv"; String encryptedData = "用户加密数据"; String sessionKey = "从上面获取到的session_key"; try { byte[] content = Base64.decodeBase64(encryptedData); byte[] keyByte = Base64.decodeBase64(sessionKey); byte[] ivByte = Base64.decodeBase64(iv); SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES"); AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivByte); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); byte[] decryptedByte = cipher.doFinal(content); String decryptedData = new String(decryptedByte, "UTF-8"); JSONObject jsonObject = JSONObject.parseObject(decryptedData); String unionId = jsonObject.getString("unionId"); String phoneNumber = jsonObject.getString("phoneNumber"); } catch (Exception e) { e.printStackTrace(); } ``` 请注意,您需要在小程序后台配置您的加密算法参数,以便正确解密用户数据。此外,获取用户的UnionId需要您的小程序具有获取UnionId的权限。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Galaxy~567

你随手的鼓励,是我创作的最大动

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值