微信开放平台开发(四) 授权
2018-03-29 00:00
555 查看
授权 & 预授权码
第三方平台即是用来对多个公众号进行授权的。授权就得使用到授权码,不,微信开放平台里叫预授权码。获取预授权码的方式和获取component_access_token一样简单,只需要请求
https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=xxx在url带上component_access_token(component_access_token的获取方式在上一篇博客里有说明),再附带上component_appid即可。
由于该类的操作是向微信发送请求,接下来还会有类似向微信请求数据的接口,我们就添加一个WXDataGatherService及其Impl类,现在该类里只有一个方法:
/** * 获取一个新的预授权码 */ String getNewPreAuthCode();
具体实现类请参看博客最后的git链接。
使用预授权码
获取了预授权码后就可以进行授权了。授权的操作流程大致为:1)用户点击一个链接,2)网页跳转到微信,并生成二维码,3)用户扫描二维码并确认授权,4)微信回调至我们的服务器。
所以需要有一个引导页面来使用户点击。我们添加一个页面(/page/auth.jsp)并在里面添加一个链接让它跳转到/auth/redirectToAuth里,该路径对应我们AuthController里的redirectToAuth()方法里,该方法如下:
/** * 重定向到微信进行授权 * @param response response */ @RequestMapping("redirectToAuth") public void redirectToAuth(HttpServletResponse response) throws IOException { String redirectUri = ServerPropertiesUtil.getBaseUrl() + "/auth/authorized"; String encodeRedirectUri = URLEncoder.encode(redirectUri, "utf-8"); String url = "https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=" + ServerPropertiesUtil.getAppId() + "&pre_auth_code=" + wxDataGatherService.getNewPreAuthCode() + "&redirect_uri=" + encodeRedirectUri + "&auth_type=1"; response.sendRedirect(url); }
上面的代码中有两处需要注意的点。
redirectUri是指用户确认授权后微信回调的路径,该路径需要进行url编码
pre_auth_code即是预授权码,我们通过
wxDataGatherService.getNewPreAuthCode()
即可获取到。
这个时候页面会显示一个二维码。用户扫描后会检测该用户下管理的公众号,选择一个后即可确认授权,之后会请求到AuthController的authorized()方法里:
/** * 微信公众平台完成授权后的回调请求 * */ @RequestMapping("authorized") @ResponseBody public String authorized() { LOG.debug("wx notify"); return "success"; }
该方法仅打印一句日志以测试微信是否能成功回调。
注意,本博客功能的主要流程是:在浏览器中访问/page/auth.jsp -> 在浏览器点击微信授权 -> 浏览器中显示二维码 -> 用户打开微信扫描 -> 用户在微信上确认授权 -> 微信回调到我们的服务器。
坑一
redirect_uri一定要在在开放平台中配置的域名下,我一开始时填写是https://www.baidu.com,就报一个错说回调地址没有在域名下。坑二
pre_auth_code是一个授权绑定对应一个,当开始我做的时候也是做了一个类似ComponentAccessTokenTask的任务来每两小时更新一下预授权码,这样当一个授权码被使用后,下一个用户再次扫描授权时,就会提示“预授权码已被使用”。本博客对应的代码在https://gitee.com/valuetodays/open-wx-demo/tree/V0.3
再关联一下自己的博客网站
相关文章推荐
- 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台
- 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码
- 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码
- 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台
- 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台
- 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台
- 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码
- 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码
- 微信开发之分清公众平台和开放平台、公众号全局凭证和网页授权凭证
- 微信开放平台开发-授权、全网发布(PHP)
- 微信开放平台开发-授权、全网发布(PHP)
- 微信公共服务平台开发(.Net 的实现)13-------网页授权(下 :C#代码的实现 )
- 微信开放平台开发——网页微信扫码登录(OAuth2.0)
- 微信公共服务平台开发(.Net 的实现)13-------网页授权(下 :C#代码的实现 )
- 微信开放平台之公众号第三方平台开发及全网发布验证
- 微信公众账号登陆授权开发——5(解决使用官方获获取第三方平台方获取预授权码)
- 微信公共服务平台开发(.Net 的实现)13-------网页授权(下 :C#代码的实现 )
- 微信开放平台开发(1) 语义理解
- JAVA微信开放平台授权
- 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo