美文网首页开放平台
OAuth2.0微信网页授权获取用户信息实现全过程(JAVA版本

OAuth2.0微信网页授权获取用户信息实现全过程(JAVA版本

作者: 微小码 | 来源:发表于2016-07-24 19:46 被阅读7246次

    一.前言

    为什么需要OAuth2.0网页授权接口,主要是为了获取微信用户的基本信息(比如用户绑定,用户统计等等)

    特别注意:只有认证的服务号有此接口权限

    那么订阅号如何实现这个功能呢?可以通过另一个服务号来使用这个接口获取用户基本信息,因为对于未关注此服务号的用户,这个接口同样能够获取到用户基本信息。

    二.前期准备

    1.我的开发环境与工具说明

    开发机器:一台Mac Book Pro
    开发工具:

    MyElipse

    Paste_Image.png

    系统环境:OS X EI Capitan 版本 10.11.5

    微信web开发者工具

    Paste_Image.png

    注册一个微信公众号(订阅号或者服务号)

    https://mp.weixin.qq.com/
    主要是用开发者测试帐号测试

    Paste_Image.png Paste_Image.png Paste_Image.png

    注册一个新浪SAE帐号(用来部署JAVA服务)

    http://sae.sina.com.cn/

    三.实现过程

    流程解析图

    Paste_Image.png

    1.check代码,并部署到新浪SAE

    源码地址:https://github.com/andli0626/wx_auth_by_java
    通过myelipsecheck源码,并输入自己测试微信号的appID,appsecret

    Paste_Image.png

    导出war包

    Paste_Image.png Paste_Image.png

    部署到新浪SAE

    Paste_Image.png Paste_Image.png

    上次war包


    Paste_Image.png Paste_Image.png

    核心代码

     public class OAuthServlet extends HttpServlet {
     private static final long serialVersionUID = -1847238807216447030L;
    
     public void doGet(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException {
       request.setCharacterEncoding("gb2312");
       response.setCharacterEncoding("gb2312");
    
       // 用户同意授权后,能获取到code
       String code = request.getParameter("code");
    
       // 用户同意授权
       if (!"authdeny".equals(code)) {
        String APPID  = "";
        String SECRET = "";
        
        // 获取网页授权access_token
        WeixinOauth2Token weixinOauth2Token =      AdvancedUtil.getOauth2AccessToken(APPID, SECRET, code);
        // 网页授权接口访问凭证
        String accessToken = weixinOauth2Token.getAccessToken();
        // 用户标识
        String openId = weixinOauth2Token.getOpenId();
        // 获取用户信息
        SNSUserInfo snsUserInfo =      AdvancedUtil.getSNSUserInfo(accessToken, openId);
    
        // 设置要传递的参数
        request.setAttribute("snsUserInfo", snsUserInfo);
       }
       // 跳转到index.jsp
       request.getRequestDispatcher("index.jsp").forward(request, response);
      }
     }
    

    web.xml配置

      <servlet>
        <servlet-name>oauthServlet</servlet-name>
        <servlet-class>org.liufeng.course.servlet.OAuthServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>oauthServlet</servlet-name>
        <url-pattern>/oauthServlet</url-pattern>
     </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    

    2.配置授权回调域名

    Paste_Image.png Paste_Image.png

    新浪SAE已经提供了测试的域名,还是很方便的


    Paste_Image.png

    必须配置,如果配置不正确,会导致以下错误

    Paste_Image.png

    3.构造网页授权链接

    可以参考官方API说明:
    http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html#.E7.AC.AC.E4.B8.80.E6.AD.A5.EF.BC.9A.E7.94.A8.E6.88.B7.E5.90.8C.E6.84.8F.E6.8E.88.E6.9D.83.EF.BC.8C.E8.8E.B7.E5.8F.96code

    Paste_Image.png

    主要是3个参数:

    appid
    redirect_uri 授权后重定向的回调链接地址
    scope 应用授权作用域

    snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid)
    snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。

    我的新浪SAE重定向页面是:

      https://wxauth.applinzi.com/authServlet
    

    那么网页授权链接为

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8015b2139267655d&redirect_uri=https://wxauth.applinzi.com/oauthServlet&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect
    

    4.测试方法

    第一种:通过微信测试帐号

    Paste_Image.png

    通过pc端的微信客户端,直接把网页授权链接发送到手机端

    Paste_Image.png Paste_Image.png

    第二种:通过微信web开发者工具

    直接将网页授权链接拷贝到地址栏,访问即可

    Paste_Image.png Paste_Image.png

    常见错误说明

    Paste_Image.png

    应该是没有接口权限,需要进行开发者认证

    Paste_Image.png

    参考资料

    《微信公众平台应用开发方法,技巧与案例》
    微信公众平台官方指南
    https://mp.weixin.qq.com/wiki

    相关文章

      网友评论

        本文标题:OAuth2.0微信网页授权获取用户信息实现全过程(JAVA版本

        本文链接:https://www.haomeiwen.com/subject/jwqgjttx.html