当前位置:首页 > 经验 >

微信公众号后台入口(微信订阅号怎么注销)

来源:原点资讯(www.yd166.com)时间:2022-10-28 12:23:13作者:YD166手机阅读>>

写在前面

在日常开发过程中我们难免会遇到需要网页授权登录获取用户openId的情况,随着开发的深入我们会有很多网页需要用到用户的openId,而我们不可能每次都去写一个授权登录的接口去匹配每个网页,为了减少我们重复的工作,本篇文章将分享一个所有网页公共授权方案包括未配置的安全域名下的网页。如有不足之处,可在评论区指出。

本次使用开发语言为java。使用框架springboot。

前期配置

我们都知道要想实现微信公众号的网页授权登录,需在公众号管理后台“设置与开发”->“公众号设置”->"功能设置"中设置网页授权域名,如下图所示

微信公众号后台入口,微信订阅号怎么注销(1)

网页授权域配置

但是微信官方将此域名配置限制为仅可设置两个,那我们需要跳转其他域名怎么办呢,其实很简单,我们接着往下看!

授权流程

大家都知道微信网页授权只需要在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(已认证服务号,默认拥有 scope 参数中的snsapi_base和snsapi_userinfo 权限),引导关注者打开如下页面:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=scope&state=STATE#wechat_redirect

需要注意的是这里的授权登录很有可能多次转发,导致code过期的情况,因此可以加入参数connect_redirect=1告诉微信仅跳转一次

REDIRECT_URI就为我们的用户确认授权后 微信转发的地址 我们要实现公共网页的授权登录就在这里做文章

关于scope作用域这里就不再过多地描述snsapi_base仅可以拿到户的 openid,并且用户是无感知的,是静默的。snsapi_userinfo可以拿到用户的基本信息,但不是无感知的需要用户手动确认,特殊情况除外(对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是 scope 为snsapi_userinfo,也是静默授权,用户无感知)。

实现代码

/**

* 公共重定向

* @param url

* @param Request

* @return

*/

@RequestMapping("/common")

public String authCommonUrl(String url, HttpServletRequest request)

try {

if (StringUtils.isEmpty(url)) {

return "/error";

}

return "redirect:https://open.weixin.qq.com/connect/oauth2/authorize?appid=" environment.getProperty("wechat.appId")

"&redirect_uri="

URLEncoder.encode(

environment.getProperty("wechat.baseRedirectUrl") "/authcommonurl?url=" URLEncoder.encode(url, "utf-8"),

"utf-8")

"&response_type=code&scope=snsapi_userinfo&connect_redirect=1&state=join#wechat_redirect";

} catch (Exception e) {

logger.error("重定向发生异常->RedirectController.authCommon:" ParamsUtils.showParams(request), e);

return "/error";

}

}

可以看到我们将redirect_uri设置成了一个公共的获取用户信息的接口地址,然后在该地址上传入我们需要最终跳转的url,这里的url我们如果需要传递其他参数,也可以直接加在url上。这里我们只要保证redirect_uri在网页授权的安全域名下,而url任意域名都可以啦。

获取用户信息重定向url地址

/**

* 授权回调转发

* @param url

* @param code

* @param request

* @return

*/

@SuppressWarnings({ "unchecked" })

@RequestMapping(value = "/authcommonurl")

public String authCommon(String url, String code, HttpServletRequest request) {

HttpSession session = request.getSession();

try {

if (StringUtils.isEmpty(url)) {

return "/error";

}

if (StringUtils.isEmpty(code)) {

return "/error";

}

// 首先判断session中是否存在用户信息,存在则跳过以下获取用户信息方法,不存在继续执行

String sessionId = session.getId();

CacheObject<JSONObject> cache = MapCacheManager.getInstance().getCache(sessionId);

JSONObject userInfoJO = cache != null ? cache.getObject() : null;

if (userInfoJO == null || StringUtils.isEmpty(userInfoJO.optString("nickname", ""))) {// 里面为整个网页登录授权过程

// 调用获取accessToken接口 获取accessToken

String json = HttpsUtil.httpMethodGet(getAccessTokenUrl(code), "UTF-8");

JSONObject jsonObject = null;

try {

jsonObject = new JSONObject(json);

} catch (Exception e) {

logger.error("获取授权accesstoken转换json异常->NotStaticAuthReturnController.authHd:" json, e);

}

if (!jsonObject.has("access_token")) {

return "/error";

}

String access_token = jsonObject.optString("access_token", "");

String openid = jsonObject.optString("openid", "");

// 得到获取用户信息的链接

// 获取用户信息接口 获取用户信息

String userInfoJson = HttpsUtil.httpMethodGet(getUserinfoUrl(access_token, openid), "UTF-8");

try {

userInfoJO = new JSONObject(userInfoJson);

} catch (JSONException e) {

userInfoJO = new JSONObject();

logger.error("获取用户信息转换json异常->NotStaticAuthReturnController.authcommon:" userInfoJson, e);

}

if (!userInfoJO.has("nickname")) {

return "/error";

}

userInfoJO.put("nickname", EmojiFilter.filterEmoji(userInfoJO.optString("nickname", "")));

cache = new CacheObject<>();

cache.setExpires_in(7200L);

cache.setObject(userInfoJO);

MapCacheManager.getInstance().putCache(sessionId, cache);

}

// System.out.println("用户信息:" userInfoJO.toString());//输出用户信息 测试用

String user_openid = userInfoJO.optString("openid", "");

if (StringUtils.isEmpty(user_openid)) {

return "/error";

}

return "redirect:" url (url.contains("?") ? "&" : "?") "openId=" user_openid;

} catch (Exception e) {

e.printStackTrace();

logger.error("微信授权异常->NotStaticAuthReturnController.authCommonurl:" ParamsUtils.showParams(request), e);

return "/error";

}

}

这里我们作用域是snsapi_userinfo有获取用户的基本信息,若无需这些信息,按需求删除代码即可。

如有问题或不足之处可在评论区指出,觉得还行的看官动动小手帮忙点个赞吧!

祝大家健健康康,每天开开心心!

栏目热文

有力量的国庆口号(国庆标语口号)

有力量的国庆口号(国庆标语口号)

  天南地北,一面面鲜艳的五星红旗迎风飘扬;城市乡村,一股股动人的爱国之情澎湃涌动。在这个喜庆祥和的国庆佳节,神州儿女同...

2022-10-28 12:12:41查看全文 >>

国庆70周年八个字口号(庆祝国庆70周年标语口号)

国庆70周年八个字口号(庆祝国庆70周年标语口号)

来源:平安北京“群众安全感创历史最好水平。”——这是刚刚闭幕的北京市第十三次党代会报告对全市平安建设作出的高度评价。金杯...

2022-10-28 11:43:57查看全文 >>

国庆专用口号推荐(国庆口号大全霸气十足)

国庆专用口号推荐(国庆口号大全霸气十足)

来源:人民网-《人民日报》天南地北,一面面鲜艳的五星红旗迎风飘扬;城市乡村,一股股动人的爱国之情澎湃涌动。在这个喜庆祥和...

2022-10-28 12:09:55查看全文 >>

国庆口号100句(国庆口号简短霸气)

国庆口号100句(国庆口号简短霸气)

社区国庆节特色活动方案(篇1)  一、活动概述  1、活动主题:构建和谐社区 共创温馨家园——xx小区庆国庆健身联谊活动...

2022-10-28 12:17:51查看全文 >>

最新国庆70周年标语18种(庆祝国庆七十周年口号标语)

最新国庆70周年标语18种(庆祝国庆七十周年口号标语)

国庆期间,宁波市精心策划庆祝新中国成立70周年系列活动,通过“五宣联动”、“打造爱国活动周”等,积极落实国庆社会环境宣传...

2022-10-28 12:04:12查看全文 >>

自己的微信公众号后台在哪里(微信公众号怎么进入后台)

自己的微信公众号后台在哪里(微信公众号怎么进入后台)

作者:袁文泽2020年的微信日活跃用户已经超过12亿,微信已经从最初的通信工具,慢慢变成了一种必不可少的生活方式。有的人...

2022-10-28 11:55:42查看全文 >>

微信公众号的后台怎么进入(如何进入微信公众号的后台)

微信公众号的后台怎么进入(如何进入微信公众号的后台)

作为自媒体工作者,我们在公众号后台编辑文章的时候,由于操作失误,导致公众号后台的菜单栏无法正常显示怎么办?很不习惯,如何...

2022-10-28 11:45:51查看全文 >>

微信公众号后台怎么登录(微信公众号登录方法)

微信公众号后台怎么登录(微信公众号登录方法)

成绩查询平台这个解放双手的工具,想必一些机智的老师都对它不陌生,作为一个发成绩的神器,用好它可以在很大程度上减轻老师们的...

2022-10-28 11:51:44查看全文 >>

怎样打开微信公众号后台(如何进入微信公众号的后台)

怎样打开微信公众号后台(如何进入微信公众号的后台)

1:公众号排名微信公众号排名原理微信公众号排名是根据一定的算法来决定的。首先我们要知道,公众号的排名不是静态的,而是根据...

2022-10-28 12:19:54查看全文 >>

微信公众号后台操作中(微信公众号的后台怎么打开)

微信公众号后台操作中(微信公众号的后台怎么打开)

编辑导语:自2018年开始,微信公众号关闭了“留言”功能,许多人深表遗憾。而就在前几天,公众号上线了一个类似“留言”的功...

2022-10-28 11:56:40查看全文 >>

文档排行