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=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值