服务端部署

SDK简介

OnePass服务端SDK包含网关校验和短信验证码校验两个部分,分别是对OnePass两个云服务接口http://onepass.geetest.com/check_gateway.phphttp://onepass.geetest.com/check_message.php网络请求的封装,封装后以函数方法的形式供客户集成时调用,从而完成自定义接口的开发。

注:OnePass同时可以利用 Sensebot 保护网关验证接口,如果需要集成 Sensebot ,可以移步Sensebot的文档进行部署。

开发准备

下载SDK

Java SDK github项目地址

Java SDK zip文件下载

SDK引入

将SDK目录下src/sdk/GmessageLib.java拷贝到你的项目中即可,我们暂时不公开提供Jar包的引入形式,如果您使用Maven或类似的集成工具,请联系我们的客服获取技术支持。

config配置

// 请到onepass后台申请可用的id与key
onepass_id=7591d0fxxxxxxxxxxxxxxxxx748d936b
onepass_key=52ad901xxxxxxxxxxxxxxxxx02f20b23

SDK初始化

import sdk.GmessageLib;
import demo.config.GeetestConfig;

GmessageLib gtmessagesdk = new GmessageLib(GeetestConfig.getOnepass_id(), GeetestConfig.getOnepass_key());

方法说明

网关校验

  • 方法:

    int checkGateway(String phone, String process_id, String accesscode)

  • 功能:

    向onepass云服务发送请求,校验当前输入的手机号码与客户端网关请求时的本机号码是否一致

  • 参数说明

参数名称 参数类型 参数来源 是否必填 描述
phone String 客户端传回 用户输入的手机号
process_id String 客户端传回 本次网关校验事件的流水号
accesscode String 客户端传回 运营商为本次网关校验事件分配的token
  • 返回值
返回值类型 取值 描述
int 0 或 1 1:输入的手机号码与本机号码一致;0:输入的手机号码与本机号码不一致

注意:在服务端的接口中,状态1代表成功,状态0代表失败。但是客户端中则相反,用户需要自己在业务逻辑中进行语义的转换。

  • 示例
public class CheckGatewayServlet extends HttpServlet {

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}

@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

// 首先初始化GmessageLib类,传入参数ID和KEY,其值从Onepass管理后台获取
GmessageLib gtmessagesdk = new GmessageLib(
GeetestConfig.getOnepass_id(), GeetestConfig.getOnepass_key());
// 从客户端获取到的参数手机号,用以进行网关校验
String phone = request.getParameter("phone");
// 从客户端获取到的onepass流水号,用以进行网关校验
String process_id = request.getParameter("process_id");
// 从客户端获取到的运营商token号,用以进行网关校验
String accesscode = request.getParameter("accesscode");

// 调用Gmessagelib的对象的checkGateway方法,并将参数以固定顺序传入。返回值为1则代表成功,返回值为0则代表失败
int result = gtmessagesdk.checkGateway(phone, process_id, accesscode);
try {
PrintWriter out = response.getWriter();
JSONObject data = new JSONObject();
// result=1代表验证结果成功,返回0
data.put("result", result == 1 ? 0 : 1); //在这里进行语义的转换
out.println(data.toString());
} catch (JSONException e) {
e.printStackTrace();
}

}
}

短信验证码校验

  • 方法:

    int checkMessage(String phone, String process_id,String message_number,String message_id)

  • 功能:

    向onepass云服务发送请求,校验当前输入的验证码与用户收到的验证码是否一致

  • 参数说明

参数名称 参数类型 参数来源 是否必填 描述
phone String 客户端传回 用户输入的手机号
process_id String 客户端传回 本次验证码校验事件的流水号
message_id String 客户端传回 从客户端获取到的短信唯一编号
message_number String 客户端传回 从客户端获取到的短信验证码
  • 返回值
返回值类型 取值 描述
int 0 或 1 0:输入的验证码正确;1:输入的验证码错误

注意:在服务端的接口中,状态1代表成功,状态0代表失败。但是客户端中则相反,用户需要自己在业务逻辑中进行语义的转换。

  • 示例
public class CheckMessageServlet extends HttpServlet {

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

// 首先初始化GmessageLib类,传入参数ID和KEY,其值从Onepass管理后台获取
GmessageLib gtmessagesdk = new GmessageLib(
GeetestConfig.getOnepass_id(), GeetestConfig.getOnepass_key());
// 从客户端获取到的参数手机号,用以进行短信校验
String phone = request.getParameter("phone");
// 从客户端获取到的onepass流水号,用以进行短信校验
String process_id = request.getParameter("process_id");
// 从客户端获取到的短信验证码,用以进行短信校验
String message_number = request.getParameter("message_number");
// 从客户端获取到的短信流水号,用以进行短信校验
String message_id = request.getParameter("message_id");

// 调用Gmessagelib的对象的checkMessage方法,并将参数以固定顺序传入。返回值为1则代表成功,返回值为0则代表失败
int result = gtmessagesdk.checkMessage(phone, process_id,
message_number, message_id);
try {
PrintWriter out = response.getWriter();
JSONObject data = new JSONObject();
// result=1代表验证结果成功,返回0
data.put("result", result == 1 ? 0 : 1); //在这里进行语义的转换
out.println(data.toString());
} catch (JSONException e) {
e.printStackTrace();
}

}
}

FAQ

1. 为什么需要接入服务端SDK?

用户的客户端在完成了包括验证码在内的一系列通信之后,会从onepass云服务拿到token作为其唯一许可证,然后将token发送到客户端服务端,客户的服务器端使用该token向onepass云服务器查询网关或者短信验证码的验证结果,完成相关业务处理,然后通知客户端执行交互动作,这种告知客户服务端校验结果的方式既方便又安全,SDK内部含私钥校验合法性的安全逻辑,可以防篡。

2. OnePass与Sensebot的关系?

Sensebot即「行为验证」,可以充当网关验证和短信验证码验证的前置步骤,完成人机验证,防止网关和短信被恶意请求,消耗客户的网关和短信请求量。