感谢您的反馈!
import com.alibaba.wireless.security.open.SecurityGuardManager; import com.alibaba.wireless.security.open.securitybody.ISecurityBodyComponent; import com.alibaba.wireless.security.open.securitybody.SecurityBodyDefine; String getSecurityBodyDataEx( String timeStamp, String appKey, String autcode, HashMap<String, String> extendParam, int flag, int env ) throws SecException;
在需要使用数据风控的场景,如注册、登陆、活动页面,可以在用户点击“注册”、“登陆”等业务按钮时、业务逻辑处理前获得该token,服务端通过该token查询风险结果。
入参
timeStamp null
appKey null
authCode 0335
extendParam null
flag SecurityBodyDefine.OPEN_SECURITYBODY_FLAG_FORMAT_GENERAL;
env SecurityBodyDefine.OPEN_SECURITYBODY_ENV_ONLINE;
返回
调用成功不为空的wtoken,需要将此token传递到自己的server端,再由自己的server端将此 token透传到聚安全server端,获得最后的风控校验结果
注意
发生获取不到wtoken,多半因为0335图片设置有问题。一个图片和应用绑定。如果变更包名,需要到聚安全网站生成新的图片;如果一个app存在不同版本在使用不同包名,需要重新获得图片;在使用msauthdemo时,请将demo的包名上传apk的包名。如果同一个app使用不同的keystore签名,不同keystore签名apk也需要申请不同的图片
异常错误诊断
接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头:
| 错误码 | 值 | 含义 |
|---|---|---|
| SEC_ERROR_SECURITYBODY_INVALID_THREAD | 1401 | 参数不正确,请检查输入的参数 |
| SEC_ERROR_SECURITYBODY_INVALID_THREAD | 1402 | 接口调用线程错误。请在非UI线程内调用此接口(因为本接口有耗时操作)。 |
| SEC_ERROR_SECURITYBODY_NET_ERROR | 1403 | 网络超时或网络断开 |
| SEC_ERROR_SECURITYBODY_SERVER_ERROR | 1404 | 聚安全服务端器错误,请确认应用是否有权限访问此接口 |
| SEC_ERROR_SECURITYBODY_APPKEY_ERROR | 1405 | 加密文件yw_1222_0335.jpg格式或其内数据有问题。常见原因为用错图片(iOS与Android图片不通用)或者图片内没有存放对应的Top Appkey |
| SEC_ERROR_SECURITYBODY_SIGNATURE_ERROR | 1406 | 加密文件yw_1222_0335.jpg格式或其内数据有问题。常见原因为用错图片(iOS与Android图片不通用)或者图片内没有存放对应的Top Appkey |
| SEC_ERROR_SECURITYBODY_ENCRYPTION_ERROR | 1407 | 数据加密错误 |
| SEC_ERROR_SECURITYBODY_TOP_ERROR | 1408 | TOP协议错误,请检查手机时间设置是否正常,加密图片yw_1222_0335.jpg使用是否正确 |
| SEC_ERROR_SECURITYBODY_CONCURRENT | 1409 | 接口被并发调用错误;本接口不支持多线程同时调用 |
| SEC_ERROR_SECURITYBODY_UNSUPPORTED | 1498 | 接口在这个版本的SDK中不支持 |
| SEC_ERROR_SECURITYBODY_UNKNOWN_\ERR | 1499 | 未知错误,请重试 |
import com.alibaba.verificationsdk.ui.VerifyType;
public enum VerifyType {
SMS(1),
CALL(2),
NOCAPTCHA(3),
MAIL(4),
SHAKING(5),
TILTBALL(6),
LIVENESS(7);
private int value;
private VerifyType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
| 类型 | 作用 |
|---|---|
| NOCAPTCHA | 滑动验证 |
| SMS | 短信验证码 |
| CALL | 电话接听验证码 |
import com.alibaba.verificationsdk.ui.IActivityCallback; import com.alibaba.verificationsdk.ui.VerifyActivity; import com.alibaba.verificationsdk.ui.VerifyType; /** * 唤起验证UI * * @param ctx 传入调用Activity的上下文 * @param parameters 传入参数 * @param verifyType 目前支持,语音,滑动验证,短信 * @param authcode 传0335 * @param appkey 传空 * @param IActivityCallback 验证界面回调接口, * 由应用自己实现 */ public static void startVerifyUI(Context ctx, // Map<String,String> parameters, VerifyType verifyType, String authcode,String appkey, IActivityCallback callback)
parameters 参数设置
| key | value |
|---|---|
| VerifyActivity.APP_DATA | 应用服务器返回给应用的app数据 |
为后端通过JAQ服务返回的风险识别的结果。 具体参考 数据风控-服务器接入指南-风险识别
verifyType 目前支持,语音,滑动验证,短信
authcode 设置为**0335**
appkey 设置为**null**
import com.alibaba.verificationsdk.ui.IActivityCallback; import com.alibaba.verificationsdk.ui.VerifyActivity; import com.alibaba.verificationsdk.ui.VerifyType; import com.alibaba.verificationsdk.ui.VerifyActivity; /** * 唤起验证UI * * @param ctx 传入调用Activity的上下文 * @param verifyType 目前滑动验证 * @param authcode 传0335 * @param appkey 传空 * @param IActivityCallback 验证界面回调接口, * 由应用自己实现 */ public static void startSimpleVerifyUI(Context ctx, // VerifyType verifyType, IActivityCallback callback)
纯风险验证UI是纯验证接口,功能为纯粹的验证,用户可以使用聚安全的风控识别能力也可以使用原有系统能力。目前支持的验证类型为滑动.从能力上讲,纯风险验证UI是做为人机识别验证模式
依赖风险识别的验证UI会将前面JAQ风险识别带入到验证中,识别的结果以parameters和verifyType形式传入。由于用户服务器可以将带验证人的电话号码传给JAQ服务器,所以在滑动以外还可以支持语音``短信。从能力上看依赖风险识别的验证UI在人机识别验证模式以外,还可以实现对于人身份核实(比如,改密,注册场景)
在用户取消验证情况下调用
public interface IActivityCallback {
onNotifyBackPressed()
}
验证过程中终止或者验证结束时触发
import com.alibaba.verificationsdk.ui.VerifyActivity;
/**
* 风险验证结果回调
*
* @param retInt 验证返回状态码
* @param detail 返回详细信息,包含错误信息,二次验证用sessionid
*/
public interface IActivityCallback {
void onResult(int retInt, Map<String, String> code);
}
retInt验证返回状态码
| 返回值 | 含义 |
|---|---|
| VERIFY_SUCC | 验证成功 |
| VERIFY_FAILED | 验证失败 |
detail返回值详情
| 键值 | 类型 | 含义 |
|---|---|---|
| errorMsg | 失败时查详细的错误/失败信息 | |
| sessionID | String | 验证成功/失败返回sessionID做二次验证,如果异常会返回null |
| errorCode | 失败类型 | |
关于detail中sessionid详细定义
具体参考 数据风控-服务器接入指南-风险验证
关于detail中errorCode详细定义
| 值 | 含义 |
|---|---|
| ERROR_FROM_SERVER | 表示服务端出错 |
| ERROR_FROM_CLIENT | 表示网络等问题,返回数据出错 |
| ERROR_FROM_BUSSINESS | 表示具体业务 |
VerifyActivity.finishVerifyUI();
Step 1: 风险采集
获得风险采集信息
int flag = SecurityBodyDefine.OPEN_SECURITYBODY_FLAG_FORMAT_GENERAL;
int env = SecurityBodyDefine.OPEN_SECURITYBODY_ENV_ONLINE;
HashMap<String, String> extendParam = null;
ISecurityBodyComponent sbComponent;
sbComponent = SecurityGuardManager
.getInstance(LoginActivity.this.getApplicationContext()).getSecurityBodyComp();
wtoken = sbComponent.getSecurityBodyDataEx(null,
null,
"0335",
extendParam,
flag,
env);
wtoken在风险识别使用 参考 数据风控-服务器接入指南-风险识别
Step 2: 风险验证
Map<String,String> params = new HashMap<>();
params.put(VerifyActivity.APP_DATA,app_data);
Map<String,String> params = new HashMap<>();
params.put(VerifyActivity.APP_DATA,app_data);
VerifyActivity.startVerifyUI(LoginActivity.this, params, VerifyActivity.VerifyType.SMS,
"0335",null,
new VerifyActivity.IActivityCallback() {
@Override
public void onNotifyBackPressed() {
}
@Override
public void onResult(int retInt, Map<String, String> code) {
switch ( retInt ) {
case VerifyActivity.VERIFY_SUCC:
Log.e(LOG_TAG,code.get("sessionID"));
break;
case VerifyActivity.VERIFY_FAILED:
Log.e(LOG_TAG,code.get("errorCode"));
Log.e(LOG_TAG,code.get("errorMsg"));
break;
default:
break;
}
}
});
Step 1: 风险验证
VerifyActivity. startSimpleVerifyUI(LoginActivity.this,
VerifyActivity.VerifyType. NOCAPTCHA, "0335",null,new VerifyActivity.IActivityCallback() {
@Override
public void onNotifyBackPressed() {
}
@Override
public void onResult(int retInt, Map<String, String> code) {
switch ( retInt ) {
case VerifyActivity.VERIFY_SUCC:
Log.e(LOG_TAG,code.get("sessionID"));
break;
case VerifyActivity.VERIFY_FAILED:
Log.e(LOG_TAG,code.get("errorCode"));
Log.e(LOG_TAG,code.get("errorMsg"));
break;
default:
break;
}
}
});
verificationsdklib.aar改为zip,使用zip解压缩
加入values-xx特定语言文件夹
添加完成后再次压缩为zip