找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索本站精品资源

首页 教程频道 小程序开发 查看内容

微信小程序后台解密用户数据

作者:模板之家 2017-12-21 09:55 3278人关注

微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html openId : 用户在当前小程序的唯一标识 因为最近根据API调用 https://api.weixin.qq.com/sns/jscode2session 所以需要配置以下服 ...

微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html
openId : 用户在当前小程序的唯一标识
因为最近根据API调用https://api.weixin.qq.com/sns/jscode2session所以需要配置以下服务,但是官方是不赞成这种做法的,
而且最近把在服务器配置的方法给关闭了。也就是说要获取用户openid,地区等信息只能在后台获取。
一下是官方的流程
 
那么问题来了,代码怎么实现呢,以下是用java后台的实现
 
微信客户端的代码实现是这样的
[html] view plain copy
 
  1. wx.login({  
  2.       success: function (r) {  
  3.         if (r.code) {  
  4.           var code = r.code;//登录凭证  
  5.           if (code) {  
  6.             //2、调用获取用户信息接口  
  7.             wx.getUserInfo({  
  8.               success: function (res) {  
  9.                 //发起网络请求  
  10.                 wx.request({  
  11.                   url: that.data.net + '/decodeUser.json',  
  12.                   header: {  
  13.                     "content-type": "application/x-www-form-urlencoded"  
  14.                   },  
  15.                   method: "POST",  
  16.                   data: {  
  17.                     encryptedData: res.encryptedData,  
  18.                     iv: res.iv,  
  19.                     code: code  
  20.                   },  
  21.                   success: function (result) {  
  22.                     // wx.setStorage({  
  23.                     //   key: 'openid',  
  24.                     //   data: res.data.openid,  
  25.                     // })  
  26.                     console.log(result)  
  27.                   }  
  28.                 })  
  29.               },  
  30.               fail: function () {  
  31.                 console.log('获取用户信息失败')  
  32.               }  
  33.             })  
  34.           } else {  
  35.             console.log('获取用户登录态失败!' + r.errMsg)  
  36.           }  
  37.   
  38.         } else {  
  39.         }  
  40.       }  
  41.     })  
 
(服务端 java)自己的服务器发送code到微信服务器获取openid(用户唯一标识)和session_key(会话密钥),
最后将encryptedData、iv、session_key通过AES解密获取到用户敏感数据

  1、获取秘钥并处理解密的controller
[java] view plain copy
 
  1. /** 
  2.      * 解密用户敏感数据 
  3.      * 
  4.      * @param encryptedData 明文,加密数据 
  5.      * @param iv            加密算法的初始向量 
  6.      * @param code          用户允许登录后,回调内容会带上 code(有效期五分钟),开发者需要将 code 发送到开发者服务器后台,使用code 换取 session_key api,将 code 换成 openid 和 session_key 
  7.      * @return 
  8.      */  
  9.     @ResponseBody  
  10.     @RequestMapping(value = "/decodeUser", method = RequestMethod.POST)  
  11.     public Map decodeUser(String encryptedData, String iv, String code) {  
  12.   
  13.         Map map = new HashMap();  
  14.   
  15.         //登录凭证不能为空  
  16.         if (code == null || code.length() == 0) {  
  17.             map.put("status"0);  
  18.             map.put("msg""code 不能为空");  
  19.             return map;  
  20.         }  
  21.   
  22.         //小程序唯一标识   (在微信小程序管理后台获取)  
  23.         String wxspAppid = "wxd8980e77d335c871";  
  24.         //小程序的 app secret (在微信小程序管理后台获取)  
  25.         String wxspSecret = "85d29ab4fa8c797423f2d7da5dd514cf";  
  26.         //授权(必填)  
  27.         String grant_type = "authorization_code";  
  28.   
  29.   
  30.         //////////////// 1、向微信服务器 使用登录凭证 code 获取 session_key 和 openid ////////////////  
  31.         //请求参数  
  32.         String params = "appid=" + wxspAppid + "&secret=" + wxspSecret + "&js_code=" + code + "&grant_type=" + grant_type;  
  33.         //发送请求  
  34.         String sr = HttpRequest.sendGet("https://api.weixin.qq.com/sns/jscode2session", params);  
  35.         //解析相应内容(转换成json对象)  
  36.         JSONObject json = JSONObject.fromObject(sr);  
  37.         //获取会话密钥(session_key)  
  38.         String session_key = json.get("session_key").toString();  
  39.         //用户的唯一标识(openid)  
  40. 邀请

路过

雷人

握手

鲜花

鸡蛋
原作者: 模板之家 来自: 网络收集

全部回复(0)