E企盈营销工具技术服务商 热线:4006-838-530

图文详解微信小程序如何实现微信授权登录(Java后台)上

E企盈直播平台营销卖货系统

详解微信小程序如何实现微信授权登录(Java后台+springboot框架),附关键源码jar包依赖 <!– http请求工具包依赖 –>        <dependency>            <groupId>org.apache.httpcomponents</groupId>            <artifactId>httpclient</artifactId>            <version>4.5.2</version>        </dependency>        <!–jsonObject需要的jar包–>        <dependency>            <groupId>net.sf.json-lib</groupId>            <artifactId>json-lib</artifactId>            <version>2.4</version>            <classifier>jdk15</classifier>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-redis</artifactId>        </dependency>        <!–工具类wxutils所需–>        <dependency>            <groupId>org.bouncycastle</groupId>            <artifactId>bcprov-jdk15on</artifactId>            <version>1.59</version>        </dependency>        <!– https://mvnrepository.com/artifact/com.alibaba/fastjson –>        <!–工具类wxutils的JSONObject.parseObject需要–>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>fastjson</artifactId>            <version>1.2.56</version>        </dependency>wx.login虽然微信的文档写的很清楚,但是遗憾的是,我看懂了也不会写。如果是前后端分离的还好一些,你只需要让前端在小程序的aap.js中发送一个wx.login()的请求。我们的个人信息都存在微信服务器上,所有需要先去服务器获取一个对应你账户信息的随机code,这个code就是后端可以从服务器换取sessionkey和openid的关键。// 网上的请求案例    //请求code    wx.login({      success(res) {        if (res.code) {             //把获取到的code通过一个request的请求发给java服务器            wx.request({            url:你的url地址,            data: {              code: res.code            },              method: ‘POST’,            dataType: ‘json’,            success: function (res) {                //请求成功的处理            }        }      },      fail: function () {        console.log(“发送code失败:”, res.data);        }    })使用code换取信息//不多说,直接上代码 @RequestMapping(“getSessionKey”)    public ReturnData getSessionKey(@RequestParam(“code”)String code) {        ReturnData returnData = new ReturnData();        Map<String, Object> key = appletService.getSessionKey(code);        YxMember member = appletService.selectExist(key.get(“openid”).toString());        if(member!=null) {            returnData.setCode(“1”);            returnData.setData(member);        }        else{            //将用户的openid存入数据库            LogUtils.debug(“存到缓存当中,key为: “+key.get(“openid”)+”,value: “+key.get(“session_key”));            redisTemplate.opsForValue().set(key.get(“openid”),key.get(“session_key”),3000,TimeUnit.MILLISECONDS);            returnData.setCode(“0”);            returnData.setData(key.get(“openid”).toString());        }        return returnData;returndata是封装的结果类,不用在意。请注意,微信提到为了信息的安全,建议使用3rdsessionkey返回给前端,但是我这里偷懒,实际我也没用过,使用openid返回给前端。同时把openid和sessionkey放到redis,设置合理的过期时间,其它缓存也可以。需要注意的是,如果用户已经授权过,也就是登陆。我们可以在数据库的用户表中根据你设的关键字查询是否存在,我这里是openid,因为每个用户的openid是唯一的。存在,直接返回用户信息,不存在,缓存放好sessionkey,然后返回。我这里约定的是code,前端会判断,setCode为1会发送getUserInfo请求,为0不再请求。//service代码public Map<String,Object> getSessionKey(String code) {        StringBuilder url = new StringBuilder(“https://api.weixin.qq.com/sns/jscode2session?”);        url.append(“appid=”);//appid设置        url.append(“你的appid”);        url.append(“&secret=”);//secret设置        url.append(“你的secret”);        url.append(“&js_code=”);//code设置        url.append(code);        url.append(“&grant_type=authorization_code”);        Map<String, Object> map = null;        try {            HttpClient client =HttpClientBuilder.create().build();//构建一个Client            HttpGet get = new HttpGet(url.toString());    //构建一个GET请求            HttpResponse response = client.execute(get);//提交GET请求            HttpEntity result = response.getEntity();//拿到返回的HttpResponse的”实体”            String content = EntityUtils.toString(result);            LogUtils.debug(content);//打印返回的信息            JSONObject res = JSONObject.fromObject(content);            map=JsonUtil.parseJSON2Map(res);        } catch (Exception e) {            e.printStackTrace();            LogUtils.debug(“获取openid失败”);        }        return map;按照微信的提示,一步步拼接字符串,然后发送,返回值为json字符串,需要转为map取出。{“session_key”:”5R3z85tnz+iLS+GbdkjtEQ==”,”openid”:”o2y8C5TK63lUNxgbEWn6o_aqM9E8″}下面贴出第一个工具类public class JsonUtil {    public static Map<String, Object> parseJSON2Map(JSONObject json) {        Map<String, Object> map = new HashMap<String, Object>();        // 最外层解析        for (Object k : json.keySet()) {            Object v = json.get(k);            // 如果内层还是数组的话,继续解析            if (v instanceof JSONArray) {                List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();                @SuppressWarnings(“unchecked”)                Iterator<JSONObject> it = ((JSONArray) v).iterator();                while (it.hasNext()) {                    JSONObject json2 = it.next();                    list.add(parseJSON2Map(json2));                }                map.put(k.toString(), list);            } else {                map.put(k.toString(), v);            }        }        return map;    }}wx.getuserInfo直接输入1次#,并按下space后,将生成1级标题。输入2次#,并按下space后,将生成2级标题。以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。如何改变文本的样式强调文本 强调文本加粗文本 加粗文本标记文本删除文本引用文本H2O is是液体。210 运算结果是 1024.插入链接与图片链接: link.图片: 带尺寸的图片: 居中的图片: 居中并且带尺寸的图片: 当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。如何插入一段漂亮的代码片去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.// An highlighted blockvar foo = ‘bar’;生成一个适合你的列表项目项目项目项目1项目2项目3 计划任务 完成任务创建一个表格一个简单的表格是这么创建的:项目Value电脑$1600手机$12导管$1设定内容居中、居左、居右使用:———:居中使用:———-居左使用———-:居右第一列第二列第三列第一列文本居中第二列文本居右第三列文本居左SmartyPantsSmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:TYPEASCIIHTMLSingle backticks’Isn’t this fun?’‘Isn’t this fun?’Quotes”Isn’t this fun?”“Isn’t this fun?”Dashes– is en-dash, — is em-dash– is en-dash, — is em-dash创建一个自定义列表MarkdownText-to-HTML conversion toolAuthorsJohnLuke如何创建一个注脚一个具有注脚的文本。1注释也是必不可少的Markdown将文本转换为 HTML。KaTeX数学公式您可以使用渲染LaTeX数学表达式 KaTeX:Gamma公式展示 Γ(n)=(n−1)!∀n∈NGamma(n) = (n-1)!quadforallninmathbb NΓ(n)=(n−1)!∀n∈N 是通过欧拉积分Γ(z)=∫0∞tz−1e−tdt&ThinSpace;.Gamma(z) = int_0^infty t^{z-1}e^{-t}dt,.Γ(z)=∫0∞​tz−1e−t

赞(0) 打赏
未经允许不得转载:E企盈小程序开发-热线:4006-838-530 » 图文详解微信小程序如何实现微信授权登录(Java后台)上
分享到: 更多 (0)
E企盈小程序直播营销卖货系统
E企盈直播平台营销卖货系统

评论 抢沙发

E企盈小程序开发

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏