前言:最近需要做一个Web应用,需要用到易班开放平台的Api,在此基础上进行二次开发,由于网上的资料比较少,官方文档和Demo里面也没有讲的很清楚,于是就自己研究了一下,方便各位同学参考。
1.首先要申请成为易班开放平台开发者:https://open.yiban.cn/;
2.到官方网站下载Java版的SDK:https://open.yiban.cn/wiki/index.php?page=SDK%E4%B8%8B%E8%BD%BD;
3.到开放平台创建一个Web应用,获取到APPID和APPSECRET,这两个东西是这个应用的唯一凭证;
4.前面的信息随便填,比较重要的是后面的网站地址;
我的项目访问地址是http://127.0.0.1:8080/yiban_demo,开始创建应用的时候我们把三个地址先写成一样的,授权回调地址我后面会说到。
5.新建一个项目,我这里暂且使用eclipse来做演示,其他的工具类似。项目结构如下:
首先,db包里是对数据库的一些操作,无关本篇博客要讲的内容,就不多说了;
然后是filter包下的文件,验证用户是否登录的拦截器;
moudel包下面的文件是JavaBean文件;
servlet包下面的文件是一些请求文件;
最后AppContext文件是本项目需要用到的一些常亮;
6.首先是AppContext.java文件
package cn.it.yiban;
public class AppContext {
public static final String APP_ID = "dbde49cbca84c6a9";
public static final String APP_SEC = "00b7eb3efa1703e35a18ebce0637696c";
public static final String WEB_SITE = "http://127.0.0.1:8080/yiban_demo";
public static final String BACK_URL = "http://127.0.0.1:8080/yiban_demo/auth";
public static final String KEY_CODE = "code";
public static final String KEY_TOKEN = "access_token";
public static final String KEY_USER = "user";
public static final String KEY_USER_ID = "user_id";
public static String ACCESS_TOKEN = "access_token";
}
这里分别把刚刚申请的APPID和APPSECRET以及网站地址、回调地址写作常量方便我们后面调用;
7.然后就是项目首页index.jsp,就是一个简单的登录按钮;
<a href="/yiban_demo/init">点击登录</a>
登录按钮跳转到请求授权的页面,也就是init请求,对应的Servlet文件是InitializionServlet.java;
package cn.it.yiban.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.it.yiban.AppContext;
import cn.yiban.open.Authorize;
@WebServlet("/init")
public class InitilizionServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 4634124722565801643L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
Authorize authorize = new Authorize(AppContext.APP_ID, AppContext.APP_SEC);
String url = authorize.forwardurl(AppContext.BACK_URL, "QUERY", Authorize.DISPLAY_TAG_T.MOBILE);
res.sendRedirect(url);
}
}
根据官方wiki上的说法,授权的步骤要先根据应用的APPID和APPSEC来创建一个Authorize对象,然后重定向到授权页面;
8.然后就是比较重要的地方了,这里就会用到刚刚填写的回调地址了,开放平台会在你授权完成后跳转回你刚才填写的回调地址上,并且会携带一些数据回来,我们需要在回调地址的请求里对返回来的数据做一些请求。
现在,我们新建一个Servlet,取名为AuthorizetionServlet.java,并且设定访问路径为“/auth”,然后把这个路径设置到我们创建的应用里。
也就是最开始的授权回调地址这一栏了。
于是,在这个请求里面就可以获取到一个json数据,里面有一个code,通过这个code来获取access_token就可以了;
以下是AuthorizetionServlet.java:
package cn.it.yiban.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import cn.it.yiban.AppContext;
import cn.yiban.open.Authorize;
import cn.yiban.open.common.User;
@WebServlet("/auth")
public class AuthorizationServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 636593132245602772L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String code = req.getParameter(AppContext.KEY_CODE);
if (code == null || code.equals("")) {
resp.sendRedirect("/yiban_demo/index.html");
}
System.out.println(code);
Authorize authorize = new Authorize(AppContext.APP_ID, AppContext.APP_SEC);
String text = authorize.querytoken(code, AppContext.BACK_URL);
System.out.println(text);
JSONObject json = JSON.parseObject(text);
AppContext.ACCESS_TOKEN = json.getString(AppContext.KEY_TOKEN);
User user = new User(AppContext.ACCESS_TOKEN);
HttpSession session = req.getSession();
session.setAttribute(AppContext.KEY_USER, user);
resp.sendRedirect("http://127.0.0.1:8080/yiban_demo/index.html");
}
}
这里就主要是回调地址这里有点绕,我也是边看官方的demo边做断点调试才弄好的。获取到access_token后,我们就可以根据这个token来调用开放平台上的一些借口,以及做一些查询了。
好了,这篇博客的内容就这么多,欢迎大家纠错指正。
最后,附上源码https://github.com/phw-nightingale/yiban_demo
要是觉得好别忘记加star哦~