<view> <block wx:if="{{!hasUserInfo}}"> <view style=" width: 98%;height: 640px;margin: 0 auto;"> <view style="height: 350px;"> <image src="/static/logo.png" style="width: 150px;height: 150px;margin: 150px 0 100px 29.8%"></image> </view> <view> <button style="background-color: #12BAF8;color: #ffffff;width: 98%;" bindtap="getUserProfile">微信授权/登录</button> </view> </view> <button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 申请获取以下权限</button> </block> <block wx:else> <view>登录成功了</view> </block> </view>
getUserProfile(e) { wx.getUserProfile({ desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 success: (res) => { app.globalData.userInfo = res.userInfo; this.login(res); }, }) }, login: function (e) { var that = this; wx.login({ success: function (res) { wx.request({ url: app.path + 'wxapi/user/getcode', method: 'post', header: { 'content-type': 'application/x-www-form-urlencoded' }, data: { code: res.code, userInfo: JSON.stringify(e.userInfo) }, success: function (res) { console.log("token:" + res.data) that.setData({ hasUserInfo: true, }) //给全局变量赋值 app.globalData.token = res.data; wx.switchTab({ url: '/pages/index/index', }) } }) } }) }
@RequestMapping("/user/getcode") @ResponseBody public String getcode(String code,String userInfo) throws JSONException { //String转map HashMap hashMap = JSON.parseObject(userInfo,HashMap.class); String Appid = ""; String AppSecret = ""; String getopenid_url = "https://api.weixin.qq.com/sns/jscode2session"; String param = "appid=" + Appid + "&secret=" + AppSecret + "&js_code=" + code + "&grant_type=authorization_code"; //向微信服务器发送get请求获取openIdStr String openIdStr = this.sendGet(getopenid_url, param); JSONObject jsonObj = new JSONObject(openIdStr); //openid String openid = jsonObj.getString("openid"); String session_key = jsonObj.getString("session_key"); //通过openid查询用户,不存在添加一个 User u = userService.getopenid(openid); Map<String, Object> mmap = new HashMap<>(); if (u != null) { mmap.put("user", u); } else { User uu = new User(); uu.setSessionkey(session_key); uu.setOpenid(openid); uu.setNickname(hashMap.get("nickName").toString()); //创建一个为0的密码 String salt = ShiroUtil.getRandomSalt(); String encrypt = ShiroUtil.encrypt("0", salt); uu.setPassword(encrypt); uu.setSalt(salt); uu.setPicture(hashMap.get("avatarUrl").toString()); uu.setSex(Byte.valueOf(hashMap.get("gender").toString())); uu.setCreateDate(new Date()); uu.setSalt("1"); userService.save(uu); mmap.put("user", uu); } String token = openid + "," + code + "," + session_key; mmap.put("token", token); System.out.println("点击登录返回的map:"+mmap); return token; } /** * 向指定URL发送GET方法的请求 * * @param url 发送请求的URL * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, String param) { String result = ""; BufferedReader in = null; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立实际的连接 connection.connect(); // 获取所有响应头字段 Map<String, List<String>> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { System.out.println(key + "--->" + map.get(key)); } // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; }
大佬勿喷,欢迎提意见建议评论!!!!