感谢您的反馈!
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