微信小程序開發,弄清楚微信這個接口那些參數必需要有,而且各式正確,就能很快掌握。無非就是正確傳參數、調用接口、網絡訪問
其一,在小程序中可使用wx.getUserInfo這個接口獲取當前打開小程序用戶的信息。可是,咱們知道小程序就只是前端而已,它的大小最大也就幾M而已,
因此在小程序中就僅有一些處理前端展現的邏輯代碼,大部分數據交互都是與咱們的第三方服務器,它的全部數據都要來源於第三方的服務器,爲何要叫第三方,
個人認爲是第二方也就是微信的服務器,也就是小程序所在的微信的服務器。 因此要作小程序,咱們就必須把客戶的信息存儲在咱們本身的服務器上,這個時候也就引入正文。
其二,小程序與咱們第三方服務器交互,也就是咱們須要編寫接口,實現小程序的登陸,保存用戶的信息,在咱們的數據庫中。
(1)微信小程序調用微信接口wx.login,這時候微信會經過這個接口在success方法中返回參數code,咱們學要這個參數去微信服務器換取這個用戶的惟一標識openid。
(2)而後在success中發起網絡請求,將code發送到咱們編寫的接口中。
wx.login({
success: function (res) { if (res.code) { //發起網絡請求 wx.request({ url:'https://www.zhishidai.net/zsd/zsd/fff/login', data: { code: res.code }, success: function (a) { console.log("獲取用戶openid") console.log(a.data.obj.openid) that.globalData.openid = a.data.obj.openid } }) } else { console.log('獲取用戶登陸態失敗!' + res.errMsg) } } });
(3)接口代碼編寫,根據傳入得code,去微信服務器換取openid
@RequiresUser(required = false) @RequestMapping("/login") @ResponseBody public Result getCode(HttpServletRequest request, HttpSession session){ //獲取用戶登陸傳過來的code String code=request.getParameter("code"); System.out.println("code:"+code); PreCode pre= preCodeManager.findCode();//獲取第三方接口調用憑據 System.out.println("第三方接口調用憑據實體:"+pre); String grant_type="authorization_code";//固定值 //使用登陸憑證 code 獲取 session_key 和 openid。 Map<String,String> map=new HashMap<String,String>(); map.put("appid", appid);//小程序的appid map.put("component_appid",WeChatContants.AppId);//第三方appid map.put("js_code",code);//傳入得用戶code map.put("grant_type",grant_type); map.put("component_access_token",pre.getComponentAccessToken()); System.out.println("獲取openid的url參數map爲:"+map); String result=""; try { result= HttpUtils.sendGet(WeChatContants.URL_WEIXIN_LOGIN_CODE,map); System.out.println("獲取openid結果爲:"+result); } catch (Exception e) { e.printStackTrace(); } //解析返回的json數據,得到OPPID Map<String,String> mps= JsonParse.getJsonStr(result); String openid=mps.get("openid"); String session_key=mps.get("session_key"); Result returnResult = null; if(openid!=null){ /*在此處添加本身的邏輯代碼,將openid保存在數據庫,或是,使用session_key去微信服務器換取用戶頭像、暱稱等信息。我在這裏並無用到,所以我只保存了用戶的openid*/ } return returnResult; }