springboot+uniapp(vue) 微信公众号h5开发

代码基于jeecgboot 的uniapp项目修改

业务类相关代码

//region 授权登录

    /**
     * 获取code的地址
     * @return
     */
    @Override
    public String getCodeUrl(String url) throws UnsupportedEncodingException {
        //scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
        url = URLEncoder.encode(url, "UTF-8");
        String path = String.format("https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=STATE#wechat_redirect",
                appId,url,"snsapi_userinfo");
        return path;
    }

    /**
     * 获取用户的access_token
     * @param code
     * @return
     */
    @Override
    public WxUserInfoVo getUserAccessToken(String code) throws Exception {
        String path = "/sns/oauth2/access_token";
        Map<String, String> param = new HashMap<>();
        param.put("grant_type", "authorization_code");
        param.put("appid", appId);
        param.put("secret", appsecret);
        param.put("code",code);

        try {
            HttpResponse httpResponse = HttpUtils.doGet(host, path, null, param);
            String s = EntityUtils.toString(httpResponse.getEntity());
            JSONObject jsonObject = JSONObject.parseObject(s);
            if (jsonObject.containsKey("access_token")) {
                WxUserInfoVo vo = new WxUserInfoVo();
                vo.setAccessToken(jsonObject.getString("access_token"));
                vo.setExpiresIn(jsonObject.getInteger("expires_in"));
                vo.setOpenId(jsonObject.getString("openid"));
                vo.setRefreshToken(jsonObject.getString("refresh_token"));
                vo.setScope(jsonObject.getString("scope"));
                return vo;
            } else {
                String errMsg = String.format("获取微信用户access_token失败: errcode = %s, errmsg =%s", jsonObject.getString("errcode"), jsonObject.getString("errmsg"));
//                log.error(errMsg);
                throw new Exception(errMsg);
            }
        } catch (Exception e) {
//            log.error(e.getMessage());
            throw e;
        }
    }

    /**
     * 获取微信用户信息
     * @param vo
     * @return
     * @throws Exception
     */
    @Override
    @Cacheable(value = IWxService.CACHE_WX_USER,key = "#vo.openId")
    public WxUserInfoVo getWxUserInfo(WxUserInfoVo vo) throws Exception {
        String path = "/sns/userinfo";
        Map<String, String> param = new HashMap<>();
        param.put("access_token", vo.getAccessToken());
        param.put("openid", vo.getOpenId());
        param.put("lang", "zh_CN");

        try {
            HttpResponse httpResponse = HttpUtils.doGet(host, path, null, param);
            String s = EntityUtils.toString(httpResponse.getEntity());
            JSONObject jsonObject = JSONObject.parseObject(s);
            log.info("微信用户:{}",s);
            if (jsonObject.containsKey("openid")) {
                vo.setOpenId(jsonObject.getString("openid"));
                vo.setNickname(jsonObject.getString("nickname"));
                vo.setSex(jsonObject.getInteger("sex"));
                vo.setProvince(jsonObject.getString("province"));
                vo.setCity(jsonObject.getString("city"));
                vo.setCountry(jsonObject.getString("country"));
                vo.setHeadimgurl(jsonObject.getString("headimgurl"));
                vo.setPrivilege(jsonObject.getString("privilege"));
                vo.setUnionid(jsonObject.getString("unionid"));
                return vo;
            } else {
                String errMsg = String.format("获取微信用户信息失败: errcode = %s, errmsg =%s", jsonObject.getString("errcode"), jsonObject.getString("errmsg"));
//                log.error(errMsg);
                throw new Exception(errMsg);
            }
        } catch (Exception e) {
//            log.error(e.getMessage());
            throw e;
        }
    }
    //endregion

控制器相关代码:

    @ApiOperation(value=
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot 是一种用于开发 Java 应用程序的框架,它简化了传统 Java 开发的繁琐过程,使开发人员可以更快速地构建高效的应用程序。UniApp 是一个跨平台的开发框架,它可以同时开发 Android、iOS 和 Web 应用程序,极大地提高了开发效率和项目的可维护性。 微信公众号开发是指基于微信平台的应用程序开发,通过微信公众号,我们可以实现与用户的互动交流、推送消息、提供各种服务等。 在使用 Spring BootUniApp 进行微信公众号开发时,可以采用前后端分离的开发模式。前端使用 UniApp 进行界面设计和用户交互的开发,后端使用 Spring Boot 进行业务逻辑的处理和数据的存储。 首先,我们需要在微信公众平台注册一个开发者账号,获取到相应的公众号信息和接口权限。 接下来,前端开发人员可以使用 UniApp 进行公众号的界面设计和交互逻辑的编写。UniApp 提供了丰富的组件和模板,可以方便地实现各种界面效果,并且可以使用 Vue.js 进行数据的绑定与处理。 后端开发人员使用 Spring Boot 进行接口的开发和业务逻辑的处理。可以使用 Spring Boot 提供的丰富的功能和插件来简化开发,比如使用 Spring Data JPA 来操作数据库,使用 Spring Security 来实现用户认证与权限控制等。 最后,前后端通过接口进行数据的传输和交互,前端将用户的操作发送到后端进行处理,并将后端返回的数据展示给用户。 通过采用 Spring BootUniApp 进行微信公众号开发,可以充分发挥两者的优势,快速构建高效的应用程序,实现与用户的互动和服务。同时,由于使用的是跨平台的开发框架,可以方便地同时开发多个平台的应用程序,提高开发效率和项目的可维护性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值