PHP实现小程序对session_key进行解密获得用户相关数据存入数据库

2022-06-24
PS:经过最近一段时间的测试,小程序session_key的解密,目前能用到的用户数据只有微信昵称与微信头像,用户的手机号已经不能再通过session_key的解密来获取,本文只简单介绍一下PHP对session_key进行解密的方法,仅供参考:
小程序段JS代码:

  login(){
   
    var that = this
    wx.getUserProfile({
   
      desc: '授权登录',
      success(res){
   
        console.log(res)
        that.setData({
   
          'username':res.userInfo.nickName,
          'faceUrl':res.userInfo.avatarUrl,
          'encryptedData':res.encryptedData,
          'iv':res.iv
        })
        wx.login({
   
          success(res){
   
            console.log(res)
            that.setData({
   
              'js_code' : res.code
            })
            wx.request({
   
              url: 'XXXXXXXXXXXXXXXXXX',//此处写你自己的服务器URL地址
              method:'POST',
              header:{
   
                'content-type':'application/x-www-form-urlencoded'
              },
              data:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java中获取openid和session_key,您需要使用微信提供的小程序登录API。您可以通过调用以下API获取openid和session_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的权限。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值