最近在开发微信,准备为我们社团做一个微信公众号,在实现一个功能的时候卡壳了一下。功能描述:使用微信点击一个连接,跳转一个网页输入学生的相关信息。这样一个东西,如果在自己的程序里面其实很简单,但是由于是微信公众平台,所以一下子没有解决。现在就说明一种解决方案。
对于微信鉴权调用网页,在微信开发文档已经写的比较清楚。
第一步:使用URL解码,然后在微信公众号做一个配置;
第二步:
在确保微信公众账号拥有授权作用域(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 若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。
注意:在这个过程中,我一开始是配置一个网页,网页里面就是一个表单。我的目标是输入相关信息后可以获得微信openID这样一个信息。在表单提交的时候,Servlet却无法活动code这个参数。直接使用在创建连接开始使用session,在servlet中获取session也是失败的,失败的原因很简单sessionID不同。最终的解决方法是,在创建一个servlet,连接指向这个servlet,使用session获取到code,然后servlet跳转到页面。
第三步:
首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。
尤其注意:由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。
请求方法
获取code后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code