小程序模板網(wǎng)

微信小程序的頁面跳轉(zhuǎn)及前后頁面?zhèn)髦?/h1>
發(fā)布時(shí)間:2018-04-21 09:03 所屬欄目:小程序開發(fā)教程

微信小程序API文檔:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html 
openId : 用戶在當(dāng)前小程序的唯一標(biāo)識(shí) 
因?yàn)樽罱鶕?jù)API調(diào)用https://api.weixin.qq.com/sns/jscode2session所以需要配置以下服務(wù),但是官方是不贊成這種做法的, 
而且最近把在服務(wù)器配置的方法給關(guān)閉了。也就是說要獲取用戶openid,地區(qū)等信息只能在后臺(tái)獲取。 
一下是官方的流程

那么問題來了,代碼怎么實(shí)現(xiàn)呢,以下是用java后臺(tái)的實(shí)現(xiàn)

微信客戶端的代碼實(shí)現(xiàn)是這樣的


[html] view plain copy print?
wx.login({  
      success: function (r) {  
        if (r.code) {  
          var code = r.code;//登錄憑證  
          if (code) {  
            //2、調(diào)用獲取用戶信息接口  
            wx.getUserInfo({  
              success: function (res) {  
                //發(fā)起網(wǎng)絡(luò)請(qǐng)求  
                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('獲取用戶登錄態(tài)失??!' + r.errMsg)  
          }  

        } else {  
        }  
      }  
    })  

(服務(wù)端 java)自己的服務(wù)器發(fā)送code到微信服務(wù)器獲取openid(用戶唯一標(biāo)識(shí))和session_key(會(huì)話密鑰), 
最后將encryptedData、iv、session_key通過AES解密獲取到用戶敏感數(shù)據(jù)

1、獲取秘鑰并處理解密的controller


[java] view plain copy print?
/** 
     * 解密用戶敏感數(shù)據(jù) 
     * 
     * @param encryptedData 明文,加密數(shù)據(jù) 
     * @param iv            加密算法的初始向量 
     * @param code          用戶允許登錄后,回調(diào)內(nèi)容會(huì)帶上 code(有效期五分鐘),開發(fā)者需要將 code 發(fā)送到開發(fā)者服務(wù)器后臺(tái),使用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;  
        }  

        //小程序唯一標(biāo)識(shí)   (在微信小程序管理后臺(tái)獲取)  
        String wxspAppid = "wxd8980e77d335c871";  
        //小程序的 app secret (在微信小程序管理后臺(tái)獲取)  
        String wxspSecret = "85d29ab4fa8c797423f2d7da5dd514cf";  
        //授權(quán)(必填)  
        String grant_type = "authorization_code";  


        //////////////// 1、向微信服務(wù)器 使用登錄憑證 code 獲取 session_key 和 openid ////////////////  
        //請(qǐng)求參數(shù)  
        String params = "appid=" + wxspAppid + "&secret=" + wxspSecret + "&js_code=" + code + "&grant_type=" + grant_type;  
        //發(fā)送請(qǐng)求  
        String sr = HttpRequest.sendGet("https://api.weixin.qq.com/sns/jscode2session", params);  
        //解析相應(yīng)內(nèi)容(轉(zhuǎn)換成json對(duì)象)  
        JSONObject json = JSONObject.fromObject(sr);  
        //獲取會(huì)話密鑰(session_key)  
        String sess 


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉(cāng)庫(kù):starfork
本文地址:http://22321a.com/wxmini/doc/course/23825.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢