您的位置:首页 > 移动开发 > 微信开发

微信开放平台开发(四) 授权

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

再关联一下自己的博客网站
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微信开放平台 java
相关文章推荐