基于易班API的Java开发入门教程

来源:互联网 发布:阿里云重新安装系统 编辑:程序博客网 时间:2024/05/18 18:20
老师让我做一个基于易班的小系统,里面要用到易班的相关信息,先写一个小的Demo试一下,可以实现的功能是:使用易班账号登录,并获取当前登录易班账号的基本信息和当前登录账号所加入的公共群信息
    开发环境:JDK1.7+tomcat8.0+eclipse
    易班的SDK:最新版本 

导入SDK

(写在前边的话,你直接把压缩包中的所有jar文件复制到项目的lib文件夹下感觉简单)
新建一个【Dynamic Web Project】项目,选择【Java Resources】 ->【Libraries】 ->随便找一个选项右键->选择【Bulid Path】->【Configure Build Path】,如图(在Properties中搜索【Java Build Path】亦可)

     






接下来一路【OK】下去就好,如果运行的时候提示没有相关的类,那还是老老实实的把jar复制到lib文件夹下吧(或者可以试试System Library,在给User Library命名的时候)

创建易班APP

    访问易班开放平台点击打开链接,创建一个【网站接入】应用,选择【网站接入】是因为它可以100%的都是自己的内容,如果用站内应用,那么在界面上会有易班的元素。记录下该应用的AppID、AppSecret、网站地址和oauth2.0回调地址,这四个是待会要用到的参数。
我这里是在本机上开发,所以就设置网站地址为localhost

使用SDK开发

首先创建一个util类,名叫APPUtil.java,改APP相关的资料放在此处,也可用枚举
package com.demo.util;public class AppUtil {/** * App的id或者叫做appkey */public static final String APPID = "f548995debd82f12";/** * App的AppSecret */public static final String APPSECRET = "8fa24c631c18b9e47a471e6bee83c9ac";/** * App的回调地址 */public static final String BACKURL = "http://127.0.0.1:8080/YiBanDemo/content";/** * App的访问地址 */public static final String WEBSITEURL = "http://127.0.0.1:8080/YiBanDemo/";}

之后再创建一个util工具类用来存储易班API的地址,我把这个类叫做APIUtil.java,我在这里只用到了一个API接口,你们做应用应该会用到很多的吧
package com.demo.util;public class APIUtil {/** * 获取当前用户已加入的公共群,access_token,page(选填),count(选填) */public static final String PUBLIC_GROUP = "https://openapi.yiban.cn/group/public_group";}

好了,现在我们~嗯,先从view层做吧,反正也不打这个项目
易班公共平台使用的是oauth2.0接口,嗯,不太理解,感觉就是先访问一次获取token,在那这个token在访问一次获取到授权。
嗯,先做吧。
创建一个index.jsp,当前应用默认的访问地址就会访问到这个页面,它的内容如下:
<%@page import="com.demo.util.AppUtil"%><%@page import="cn.yiban.open.Authorize"%><%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>易班授权</title></head><body><%//调取AppUtil中的数据来跳转到指定的获取授权地址Authorize authorize = new Authorize(AppUtil.APPID, AppUtil.APPSECRET);String url = authorize.forwardurl(AppUtil.BACKURL, null, Authorize.DISPLAY_TAG_T.WEB);response.sendRedirect(url);%></body></html>
这样当访问这个应用的默认页面的时候就可以跳转到AppUtil.BACKURL的位置了,也就是真正的应用主页,在跳转过程中,我们给他加一个过滤器,以防止未经许可的请求通过url来访问到真实的主页,这个过滤器的内容如下
package com.demo.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.demo.util.AppUtil;import cn.yiban.open.Authorize;import cn.yiban.open.common.User;import net.sf.json.JSONObject;/** * 过滤指向content文件夹中的访问,防止直接通过url来进行访问 */@WebFilter("/content/*")public class LoginFilter implements Filter {    /**     * Default constructor.      */    public LoginFilter() {        // TODO Auto-generated constructor stub    }/** * @see Filter#destroy() */public void destroy() {// TODO Auto-generated method stub}/** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */public void doFilter(ServletRequest args1, ServletResponse args2, FilterChain chain) throws IOException, ServletException {//判断当前是否有登录,如果没有就跳转到登录页面HttpServletRequest request = (HttpServletRequest)args1;HttpServletResponse response = (HttpServletResponse) args2;if(request.getSession().getAttribute("user") == null) {//当前没有登录,判断是否有codeif(request.getParameter("code") != null) {//是登录请求,直接在filter中给他登录好了String code = request.getParameter("code");Authorize authorize = new Authorize(AppUtil.APPID, AppUtil.APPSECRET);JSONObject json = JSONObject.fromObject(authorize.querytoken(code, AppUtil.BACKURL));String accessToken = json.getString("access_token"); request.getSession().setAttribute("access_token", accessToken);User user = new User(accessToken);request.getSession().setAttribute("user", user);response.sendRedirect("../content/");} else {//非法请求,跳转回登录页面response.sendRedirect("../index.jsp");}} else {//正常请求,放行chain.doFilter(request, response);}}/** * @see Filter#init(FilterConfig) */public void init(FilterConfig fConfig) throws ServletException {// TODO Auto-generated method stub}}
在这个过滤器中,能够过滤所有访问content文件夹目录下的请求,如果判断到当前的session没有user这个属性的话,就会判断认为是登录请求或者是非法的登录请求(当然登录之后记得把user加入到session中哦),通过判断当前request中是否有code这个属性可以知道它是登录请求还是非法请求(但是如果在非法的url请求中加上code参数就会出现JSONObject["access_token"] not found.)
正确访问到content中的主页之后,这个主页的内容如下
<%@page import="net.sf.json.JSONObject"%><%@page import="cn.yiban.open.common.User"%><%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>主页</title></head><body><%User user = (User)session.getAttribute("user");//user.me()返回一个JSON,获取该JSON种的info信息JSONObject userInfo = JSONObject.fromObject(user.me()).getJSONObject("info");%><h2>这里是主页</h2><h4>登录用户信息</h4><table><tr><td>用户ID</td><td><%=userInfo.getString("yb_userid") %></td><td>用户名</td><td><%=userInfo.getString("yb_username") %></td><td>用户昵称</td><td><%=userInfo.getString("yb_usernick") %></td></tr><tr><td>性别</td><td><%=userInfo.getString("yb_sex") %></td><td>网薪数</td><td><%=userInfo.getString("yb_money") %></td><td>经验值</td><td><%=userInfo.getString("yb_exp") %></td></tr><tr><td>用户头像</td><td><img src="<%=userInfo.getString("yb_userhead")%>"></td><td>注册时间</td><td><%=userInfo.getString("yb_regtime") %></td><td>学校名字和ID</td><td><%=userInfo.getString("yb_schoolid") %>:<%=userInfo.getString("yb_schoolname") %></td></tr></table><h4>当前用户所加入公共群列表</h4><form action="../GroupServlet"><input type="hidden" name="method" value="group_public_group"><input type="submit"></form></body></html>
它的功能是显示当前授权用的基本信息和获取该用户所加入的公共群的资料,显示用户的相关信息的功能逻辑是这样的,从session取出当前登录的user,调用该user的me()方法并解析JSON,在web页面中显示出来。
获取加入的公共群信息的功能实现如下
package com.demo.servlet;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.http.NameValuePair;import com.demo.util.APIUtil;import cn.yiban.open.common.User;import cn.yiban.util.HTTPSimple;import net.sf.json.JSONObject;/** * Servlet implementation class GroupServlet */@WebServlet("/GroupServlet")public class GroupServlet extends HttpServlet {private static final long serialVersionUID = 1L;           /**     * @see HttpServlet#HttpServlet()     */    public GroupServlet() {        super();        // TODO Auto-generated constructor stub    }    @Override    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    String method = request.getParameter("method");    if(method.equals("group_public_group")) {    //获取当前用户所加入的群    //要传入的参数    String query = APIUtil.PUBLIC_GROUP+    "?access_token="+request.getSession().getAttribute("access_token");    JSONObject backJson = JSONObject.fromObject(HTTPSimple.GET(query));    System.out.println(backJson);    if(backJson.getString("status").equals("success")) {    //获取成功的情况    } else {    //获取失败的情况    }        }    }}
我这里就没有再往下做了,将会在控制台输出获得到的群信息,其他的接口、逻辑与之类似。


0 0