小程序模板网

微信小程序的页面跳转及前后页面传值

2018-04-21 柏子高

微信小程序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 print?
wx.login({  
      success: function (r) {  
        if (r.code) {  
          var code = r.code;//登录凭证  
          if (code) {  
            //2、调用获取用户信息接口  
            wx.getUserInfo({  
              success: function (res) {  
                //发起网络请求  
                wx.request({  
                  url: that.data.net + '/decodeUser.json',  
                  header: {  
                    "content-type": "application/x-www-form-urlencoded"  
                  },  
                  method: "POST",  
                  data: {  
                    encryptedData: res.encryptedData,  
                    iv: res.iv,  
                    code: code  
                  },  
                  success: function (result) {  
                    // wx.setStorage({  
                    //   key: 'openid',  
                    //   data: res.data.openid,  
                    // })  
                    console.log(result)  
                  }  
                })  
              },  
              fail: function () {  
                console.log('获取用户信息失败')  
              }  
            })  
          } else {  
            console.log('获取用户登录态失败!' + r.errMsg)  
          }  

        } else {  
        }  
      }  
    })  

(服务端 java)自己的服务器发送code到微信服务器获取openid(用户唯一标识)和session_key(会话密钥), 
最后将encryptedData、iv、session_key通过AES解密获取到用户敏感数据

1、获取秘钥并处理解密的controller


[java] view plain copy print?
/** 
     * 解密用户敏感数据 
     * 
     * @param encryptedData 明文,加密数据 
     * @param iv            加密算法的初始向量 
     * @param code          用户允许登录后,回调内容会带上 code(有效期五分钟),开发者需要将 code 发送到开发者服务器后台,使用code 换取 session_key api,将 code 换成 openid 和 session_key 
     * @return 
     */  
    @ResponseBody  
    @RequestMapping(value = "/decodeUser", method = RequestMethod.POST)  
    public Map decodeUser(String encryptedData, String iv, String code) {  

        Map map = new HashMap();  

        //登录凭证不能为空  
        if (code == null || code.length() == 0) {  
            map.put("status", 0);  
            map.put("msg", "code 不能为空");  
            return map;  
        }  

        //小程序唯一标识   (在微信小程序管理后台获取)  
        String wxspAppid = "wxd8980e77d335c871";  
        //小程序的 app secret (在微信小程序管理后台获取)  
        String wxspSecret = "85d29ab4fa8c797423f2d7da5dd514cf";  
        //授权(必填)  
        String grant_type = "authorization_code";  


        //////////////// 1、向微信服务器 使用登录凭证 code 获取 session_key 和 openid ////////////////  
        //请求参数  
        String params = "appid=" + wxspAppid + "&secret=" + wxspSecret + "&js_code=" + code + "&grant_type=" + grant_type;  
        //发送请求  
        String sr = HttpRequest.sendGet("https://api.weixin.qq.com/sns/jscode2session", params);  
        //解析相应内容(转换成json对象)  
        JSONObject json = JSONObject.fromObject(sr);  
        //获取会话密钥(session_key)  
        String sess 


易优小程序(企业版)+灵活api+前后代码开源 码云仓库:starfork
本文地址:https://www.eyoucms.com/wxmini/doc/course/23825.html 复制链接 如需定制请联系易优客服咨询:800182392 点击咨询
QQ在线咨询