Android SDK 接入指南
iOS SDK 接入指南
服务端接入指南
错误码列表
Android SDK 接入指南
本SDK为App实现机主身份验证功能,包含运营商短信验证,以及其他方式。 它减少App开发者的在客户身份验证过程中的难度与费用,减少用户操作流程, 提升App用户的使用体验,为APP开发提供极大的便利。
JAR: sai_sdk_version.jar;
JniLibs: libCtaApiLib.so (包含:arm64-v8a,armeabi,armeabi-v7a,x86,x86_64);
res-umc: sdk所需资源文件及activity布局文件(anim, drawable, drawable-xxhdpi, layout,values文件);
demo: sai_demo,一个完整的Android 项目,演示了认证的基本用法,仅供参考;
doc: Android SDK集成指南;
SDK 集成步骤
访问官网: 点击进入官网
注册登录后并完成实名认证
按照官网要求填入项目信息,获得对应的AppId和AppSecret等;
1. 在Android studio中建立你的工程。
2. 将 *.jar 拷贝到工程的libs目录下,如没有该目录,可新建。
3. 将sdk所需要的资源文件(anim, drawable, drawable-xxhdpi, layout, values文件)从demo工程res-umc目录下的文件添加到项目工程中。
4. 将 jniLibs 拷贝到工程的main目录下。
AS build.gradle配置如下:
android { .... // 配置res-umc 资源目录 sourceSets { main { res.srcDirs = ['src/main/res', 'src/main/res-umc'] jni.srcDirs = [] jniLibs.srcDirs = ['src/main/jniLibs'] } } } dependencies { implementation files('libs/sai_sdk_version.jar') }
minSdkVersion:17
为保证SDK 认证功能够提供更加可靠的验证功能,需要一些权限来获取手机的设备信息。在SDK压缩包里的AndroidManifest.xml样例文件中,列出了验证中使用到的权限。为了提高验证的可靠性,请开发者在项目的AndroidManifest.xml中添加样例文件中列出的权限。
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
在application中配置activity.
<!-- 一键登录授权页面 --> <activity android:name="com.cmic.sso.sdk.activity.LoginAuthActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="portrait" android:launchMode="singleTop" android:exported="false"> </activity> <activity android:name="com.aspirecn.loginmobileauth.AspLoginActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="portrait" android:exported="false"> </activity> <activity android:name="cn.com.chinatelecom.account.sdk.ui.AuthActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:launchMode="singleTop" android:exported="false"> </activity>
-keepattributes Signature # SAI SDK基本功能 -dontwarn org.ox.** -keep class org.ox.** { *; } -dontwarn com.aspirecn.** -keep class com.aspirecn.**{*;} # 运营商SDK 移动 电信 联通 -dontwarn com.cmic.** -keep class com.cmic.** { *; } -dontwarn com.unicom.** -keep class com.unicom.** { *; } -dontwarn cn.com.chinatelecom.** -keep class cn.com.chinatelecom.** { *; }
请求参数 OxRequestParam
变量名 | 类型 | 描述 |
actionType | String | 操作类型 |
strData | string | JSON格式请求参数 |
binData | byte[] | Byte[] 文件数据流 |
extra | Object | 自定义参数,不参与请求。 |
响应结果 OxRequestResult
变量名 | 类型 | 描述 |
actionType | String | 操作类型 |
strData | string | 响应结果信息JSON格式 |
param | OxRequestParam | 请求时的数据 |
API 接口列表
SDK提供的API 接口,都集中在org.ox.face.OxClientEntry 类中。
只有SDK初始化成功才能调用SDK 请求验证接口方法。SDK初始化,调用OxClientEntry中提供的init方法完成。
结果回调至pNotifier的 void onActionResult(OxRequestResult result);方法。
原型方法
/** * SDK初始化 请勿多次调用 * @param context 上下文 * @param param OxRequestParam 类型数据 * @param pINotifier 回调对象 */ public static void init(Context context, OxRequestParam param, OxNotifier pNotifier);
初始化调用方法实例
OxClientEntry.init(mContext, param, oxNotifier);
param 参数说明(格式JSON)
参数名称 | 参数类型 | 必填 | 描述 | |
actionType | String | 是 | 响应类型:init_sdk | |
strData | app_id | string | 是 | 官网注册获取的appId |
app_secret | string | 是 | 官网注册获取的appSecret | |
options | String | 否 | 可选参数,JSON 格式 | |
extra | Object | 否 | 自定义参数,不参与请求。 |
响应信息
参数名称 | 参数类型 | 非空 | 描述 | |
actionType | String | 是 | 响应类型: OxActionType.INIT_SDK |
|
strData | code | string | 是 | 响应码 :“00000”成功 |
msg | String | 是 | 响应信息 | |
param | OxRequestParam | 是 | 请求时的对象 |
strData格式
{"code":"00000","msg":"init success"}
SDK集成的功能:发送短信验证、短信校验、一键登验证、本机号校验功能,都可以调用OxClientEntry中的requestAction接口完成操作;
/*** 服务操作的请求入口方法**/ public static boolean requestAction(OxRequestParam param);
注意:有关一键验证授权页设置方法请参考demoSDK中《sai_sdk_android使用文档》。
新建一个类并实现OxNotifier接口。示例如下:(注:接口中的方法运行在子线程中).
package org.ox.face; import org.ox.base.OxRequestResult; public interface OxNotifier { void onActionResult(OxRequestResult result); }
接口调用指南
一键登录又称本机号一键登录,需要在数据网络通畅条件下才能正常完成操作,通过移动运营商授权获得手机号完成登录。此功能在简单调用的前提下还具备设置授权风格UI样式的功能,半自定义授权UI界面权限,开发者在UI设计方面局限性较小,也可通过添加视图,对视图进行绑定点击事件等等,具体操作请看后续文档描述。更多详情介绍请查看《sai_sdk_android使用文档.pdf》.
1.1. 前置条件
1. SAI SDK支持minSdkVersion 19及以上版本
2. SAI SDK支持中国移动3/4G、联通3/4G、电信4G的取号能力,在3G网络下时延会更高
3. SAI SDK支持单数据网络/数据网络与WiFi网络双开,不支持单WiFi网络
4. 对于双卡双待机,SAI SDK只对当前流量卡取号,双卡均未开数据流量SDK将会返回错误码
1. xml布局UI编写
2. 横竖屏自动适配
3. 全屏模式–activity模式
4. 弹窗模式–dialog模式
5. 自定义view事件绑定与处理
6. ThemeConfig授权页配置修改风格
更多内容请下载SDK查阅《sai_sdk_android使用文档.pdf》。
调用方法
OxClientEntry.requestAction(OxRequestParam);
请求参数
参数名称 | 参数类型 | 必填 | 描述 | |
actionType | String | 是 | 请求类型: OxActionType.PRE_LOGIN |
|
strData | string | -- | 请求参数,格式JSON | |
extra | Object | 否 | 自定义参数,不参与请求。 |
响应信息
参数名称 | 参数类型 | 非空 | 描述 | |
actionType | String | 是 | 响应类型: OxActionType.PRE_LOGIN |
|
strData | code | string | 是 | 响应码 :“00000”:预授权调用成功 |
param | OxRequestParam | 是 | 请求对象数据 |
请求参数
参数名称 | 参数类型 | 必填 | 描述 | |
actionType | String | 是 | 请求类型: OxActionType.VERIFY_BY_ONEKEY |
|
strData | string | -- | 请求参数,格式JSON | |
extra | Object | 否 | 自定义参数,不参与请求。 |
响应信息
参数名称 | 参数类型 | 非空 | 描述 | |
actionType | String | 是 | 响应类型: OxActionType.VERIFY_BY_ONEKEY |
|
strData | code | string | 是 | 响应码 :“00000”成功 |
verify_token | string | 是 | 二次校验token | |
msg | string | 否 | 响应信息 | |
tel | string | 是 | 本机手机号,成功时才能获取到 | |
param | OxRequestParam | 是 | 请求对象数据 |
推荐新方法调起授权页,并在用户点击登录后,通过SDK返回的access_token对接SAI服务器,获取登录信息手机号等。(支持版本2.1以后)
调用方法
OxClientEntry.requestAction(OxRequestParam);
请求参数
参数名称 | 参数类型 | 必填 | 描述 | |
actionType | String | 是 | 请求类型: OxActionType.GET_ONEKEY_LOGIN_TOKEN |
|
strData | string | -- | 请求参数,格式JSON | |
extra | Object | 否 | 自定义参数,不参与请求。 |
响应信息
参数名称 | 参数类型 | 非空 | 描述 | |
actionType | String | 是 | 响应类型: OxActionType.GET_ONEKEY_LOGIN_TOKEN |
|
strData | code | string | 是 | 响应码 :“00000”成功 |
msg | string | 否 | 响应信息 | |
access_token | string | 是 | 成功是返回access_token,用于从SAI服务器获取用于信息。获取用户信息API请查看服务端API文档 | |
param | OxRequestParam | 是 | 请求对象数据 |
获取 token
开发者可以在应用内部任意页面调用本方法,获取本机号码校验接口的凭证(token)
注意:获取 token 接口不要连续频繁调用,需等待上一次调用完成回调后再发起新的调用!。(支持版本2.1以后)
调用方法
OxClientEntry.requestAction(OxRequestParam);
请求参数
参数名称 | 参数类型 | 必填 | 描述 | |
actionType | String | 是 | 请求类型: OxActionType.GET_MOBILE_AUTH_TOKEN |
|
strData | string | -- | 请求参数,格式JSON | |
extra | Object | 否 | 自定义参数,不参与请求。 |
响应信息
参数名称 | 参数类型 | 非空 | 描述 | |
actionType | String | 是 | 响应类型: OxActionType.GET_MOBILE_AUTH_TOKEN |
|
strData | code | string | 是 | 响应码 :“00000”成功 |
msg | string | 否 | 响应信息 | |
access_token | string | 是 | 成功是返回access_token,用于从SAI服务端本机号校验。 服务端本机号校验API请查看服务端API文档 | |
param | OxRequestParam | 是 | 请求对象数据 |
短信验证由客户端发起,收到短信验证码后校验短信验证码是否正确。
请求发送短信验证调用此方法,会向传入的手机号对应的手机发送一条短信(调用此接口会消耗验证次数或余额,优先消耗验证次数),短信验证码一分钟内只能发送一次,一分钟内多次调用会导致失败。
请求短信验证码
请求参数
参数名称 | 参数类型 | 必填 | 描述 | |
actionType | String | 是 | 请求类型: OxActionType.VERIFY_BY_SMS_START |
|
strData | tel | string | 是 | 手机号 |
extra | Object | 否 | 自定义参数,不参与请求。 |
响应信息
参数名称 | 参数类型 | 非空 | 描述 | |
actionType | String | 是 | 响应类型: OxActionType.VERIFY_BY_SMS_START |
|
strData | tel | string | 是 | 手机号 |
code | string | 是 | 响应码 :“00000”成功 | |
msg | string | 否 | 响应信息 | |
verify_order_id | string | 是 | 平台订单id | |
param | OxRequestParam | 是 | 请求对象数据 |
校验短信验证码
请求参数
参数名称 | 参数类型 | 必填 | 描述 | |
actionType | String | 是 | 请求类型: OxActionType.VERIFY_BY_SMS_CHECK |
|
strData | tel | string | 是 | 手机号 |
sms_code | string | 是 | 短信验证码 | |
extra | Object | 否 | 自定义参数,不参与请求。 |
响应信息
参数名称 | 参数类型 | 非空 | 描述 | |
actionType | String | 是 | 响应类型: OxActionType.VERIFY_BY_SMS_CHECK |
|
strData | code | string | 是 | 响应码 :“00000”成功 |
msg | string | 否 | 响应信息 | |
verify_token | string | 是 | 二次验证token | |
param | OxRequestParam | 是 | 请求对象数据 |
产品功能说明
本SDK为App实现机主身份验证功能,包含一键登录、运营商短信验证以及其他方式。 它减少app开发者的在客户身份验证过程中的难度与费用,减少用户操作流程, 提升app用户的使用体验,为APP开发提供极大的便利。
接入流程
(1)注册并登录客户平台。
(2)进入“应用管理-创建应用”,完成产品创建,您将获得一串32位的AppID、AppSecret、MasterSecret。
如果您已经完成产品创建,请在如下位置获取应用唯一标识码:“应用管理-应用列表-详情”,用于集成到SDK中。
注:为了保证您的数据安全,请勿泄露您的应用唯一标识码。
(1)导入 SDK 的 framework 文件。
请将 OXSaiSDK.framework 、OXSaiSDK.bundle拷贝到应用工程的相应的目录下
项目配置
(1)添加NSAppTransportSecurity类型Dictionary。
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES
注:适配iOS 9以上系统的Http传输协议
(2)在Xcode中找到 TARGETS-->Build Setting-->Linking-->Other Linker Flags 在这选项中需要添加 -ObjC
(3)配置下图系统依赖库
接入方法说明
方法用途:
用于应用启动后,初始化SDK
使用方法:
+ (void) initWithParams: delegate:方法进行初始化
方法接口:
+ (void)initWithParams:(NSDictionary *)params delegate:(id< OXActionDelegate >)delegate;
参数说明:
字段 | 参数 | 必填 | 类型 | 说明 | |
params | appId | app_id | 是 | string | 平台申请的appid |
appSecret | app_secret | 是 | string | 平台申请的app_secret | |
扩展参数 | options | 否 | json | 扩展参数 | |
delegate | 代理 | delegate | 是 | id | 代理 |
示例代码
NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; params[@"app_secret"] = 52BB77D02D******A0E141B82EED9; params[@"app_id"] = 17BC76520B598**33261898424ED21E5; params[@"options"] = @"{\"KEY\":\"VALUE\"}"; [OXClientEntry initWithParams: params delegate:self];
回调参数:
成功
字段 | 参数 | 类型 | 说明 | |
action_type | 请求类型 | action_type | NString | 接口请求类型 |
request_params | 请求参数 | request_params | NSDictionary | 请求参数 |
result | 返回码 | code | NString | 返回码 |
失败
字段 | 参数 | 类型 | 说明 | |
action_type | 请求类型 | action_type | NString | 接口请求类型 |
request_params | 请求参数 | request_params | NSDictionary | 请求参数 |
result | 返回码 | code | NString | 返回码 |
回调方法
- (void)oxActionInitSdkResponse:(NSDictionary *)response{ NSString *code = [response[@"result"] valueForKey:@"code"]; if ([code isEqualToString:@"00000"]) { [[OXHUD sharedHUD]showMessage:@"初始化成功"]; }else{ [[OXHUD sharedHUD]showMessage:[NSString stringWithFormat:@"初始化失败 code:%@",code ]]; }}
方法用途:
无需填写手机号等其它操作,用户就可以一键登录
使用方法:
初始化成功后调用requestAction方法
方法接口:
+(void)requestAction:(OXActionType)type params:(NSDictionary *)params;
参数说明:
字段 | 参数 | 必填 | 类型 | 说明 |
验证类型 | type | 是 | OXActionType | 验证类型枚举 (OXActionTypeVerifyByOnekey) |
请求参数 | params | 是 | NSDictionary | {"current_vc":UIViewController,"timeout":"5"} |
示例代码
[OXClientEntry verifyFactor:OXActionTypeVerifyByOnekey params:params];
回调参数:
成功
字段 | 参数 | 类型 | 说明 | |
action_type | 请求类型 | action_type | NString | 返回码接口请求类型 |
request_params | 请求参数 | request_params | NSDictionary | 请求参数 |
result | 返回码 | code | NString | 返回码 |
手机号 | tel | NString | 手机号码 | |
订单号 | order_bill | NString | 订单号 | |
二次校验Token | verify_token | NString | 用于服务端二次校验 |
失败
字段 | 参数 | 类型 | 说明 | |
action_type | 请求类型 | action_type | NString | 返回码接口请求类型 |
request_params | 请求参数 | request_params | NSDictionary | 请求参数 |
result | 返回码 | code | NString | 返回码 |
回调方法
- (void)onActionResult:(NSDictionary *)result{ if([result [@"action_type"] integerValue]==OXActionTypeVerifyByOnekey){ }
方法用途:
无需填写手机号等其它操作,用户就可以一键登录
使用方法:
初始化成功后调用requestAction方法
方法接口:
+(void)requestAction:(OXActionType)type params:(NSDictionary *)params;
参数说明:
字段 | 参数 | 必填 | 类型 | 说明 |
验证类型 | type | 是 | OXActionType | 验证类型枚举 (OXActionTypeGetOnekeyLoginToken) |
请求参数 | params | 是 | NSDictionary | {"current_vc":UIViewController,"timeout":"5"} |
示例代码
[OXClientEntry verifyFactor:OXActionTypeGetOnekeyLoginToken params:params];
回调参数:
成功
字段 | 参数 | 类型 | 说明 | |
action_type | 请求类型 | action_type | NString | 返回码接口请求类型 |
request_params | 请求参数 | request_params | NSDictionary | 请求参数 |
result | 返回码 | code | NString | 返回码 |
令牌 | access_token | NString | 置换手机号 |
失败
字段 | 参数 | 类型 | 说明 | |
action_type | 请求类型 | action_type | NString | 返回码接口请求类型 |
request_params | 请求参数 | request_params | NSDictionary | 请求参数 |
result | 返回码 | code | NString | 返回码 |
回调方法
- (void)onActionResult:(NSDictionary *)result{ if([result [@"action_type"] integerValue]==OXActionTypeGetOnekeyLoginToken){ }
方法用途:
通过短信进行机主验证
使用方法:
初始化成功后调用requestAction方法
方法接口:
+(void)requestAction:(OXActionType)type params:(NSDictionary*)params;
参数说明:
字段 | 参数 | 必填 | 类型 | 说明 |
验证类型 | type | 是 | OXActionType | 验证类型枚举 (OXActionTypeVerifyBySmsStart、OXActionTypeVerifyBySmsCheck) |
请求参数 | params | 是 | NSDictionary | 短信开启:{"tel":"手机号码"}短信验证:{"tel":"手机号码","sms_code":"短信验证码"} |
示例代码
NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; params[@"tel"] = @"15555555555"; [OXClientEntry requestAction:OXActionTypeVerifyBySai params: params];
回调参数:
成功
字段 | 参数 | 类型 | 说明 | |
action_type | 请求类型 | action_type | NString | 返回码接口请求类型 |
request_params | 请求参数 | request_params | NSDictionary | 请求参数 |
result | 返回码 | code | NString | 返回码 |
订单ID | verify_order_id | NString | 订单ID(短信开启) | |
二次校验token | verify_token | NString | 二次校验token(短信验证) | |
返回详情 | msg | NString | 返回详情 |
失败
字段 | 参数 | 类型 | 说明 | |
action_type | 请求类型 | action_type | NString | 返回码接口请求类型 |
request_params | 请求参数 | request_params | NSDictionary | 请求参数 |
result | 返回码 | code | NString | 返回码 |
回调方法
- (void)onActionResult:(NSDictionary *)result{ if([result[@"action_type"] integerValue]== OXActionTypeVerifyBySmsStart){ } if([result[@"action_type"] integerValue]== OXActionTypeVerifyBySmsCheck){ } ……………… ……………… }
方法用途:
通过本机号码校验进行机主验证
使用方法:
初始化成功后调用requestAction方法
方法接口:
+(void)requestAction:(OXActionType)type params:(NSDictionary *)params;
参数说明:
字段 | 参数 | 必填 | 类型 | 说明 |
验证类型 | type | 是 | OXActionType | 验证类型枚举 (OXActionTypeGetMobileAuthToken) |
请求参数 | params | 否 | NSDictionary |
示例代码
[OXClientEntry verifyFactor:OXActionTypeGetMobileAuthToken params:nil];
回调参数:
成功
字段 | 参数 | 类型 | 说明 | |
action_type | 请求类型 | action_type | NString | 返回码接口请求类型 |
request_params | 请求参数 | request_params | NSDictionary | 请求参数 |
result | 返回码 | code | NString | 返回码 |
令牌 | access_token | NString | 用户本机号码校验 |
失败
字段 | 参数 | 类型 | 说明 | |
action_type | 请求类型 | action_type | NString | 返回码接口请求类型 |
request_params | 请求参数 | request_params | NSDictionary | 请求参数 |
result | 返回码 | code | NString | 返回码 |
回调方法
- (void)onActionResult:(NSDictionary *)result{ if([result [@"action_type"] integerValue]==OXActionTypeGetMobileAuthToken ){ }
错误码
返回码 | 返回描述 |
-1 | 未知错误 |
00000 | 成功 |
00001 | 参数错误 |
00002 | 无数据 |
00005 | 短信验证码超时 |
00009 | 请求失败 |
00031 | 验证失败 |
14021 | 手机号错误 |
14043 | 手机号被绑定 |
15101 | 手机号未绑定 |
15001 | 用户登录Token超时 |
15002 | appToken无效错误 |
21108 | 模板错误 |
14033 | 使用次数不足 |
14109 | 账户余额不足 |
11026 | 包名错误 |
20115 | 签名错误 |
11001 | appID错误 |
11112 | appID与包名不匹配 |
11117 | app服务未开通 |
11118 | app应用未审核通过 |
11119 | 应用被禁用 |
20124 | temp_code错误 |
21056 | 发送短信失败 |
10032 | 短信已发送 |
10069 | 短信发送太频繁 |
14103 | 开发者身份验证失败 |
14023 | 开发者验证失败 |
14024 | 开发者未授权 |
10110 | 网络请求异常 |
10112 | JSON格式错误 |
45001 | 数据网络切换异常 |
45002 | 未检测到数据网络 |
45003 | 未检测到网络 |
45004 | 未安装SIM卡 |
45009 | 登录取消 |
45017 | 联通取号失败 |
45018 | 移动取号失败 |
45019 | 电信取号失败 |
45028 | 免密登录切换账号 |
45029 | 免密登录受限 |
55001 | 运营商内部错误 |
55002 | 请求签名错误 |
55003 | 包签名/Bundle ID错误 |
55004 | 网关IP错误 |
55005 | appid不存在 |
55006 | 短信异常 |
55007 | scrip失效 |
55008 | token请求过于频繁 |
55009 | 预取号异常 |
55010 | 网络请求出错 |
55011 | 取号上限 |
55012 | appid不在白名单 |
55013 | 数据解析异常 |
55014 | 数据异常 |
55015 | 授权页异常 |
55016 | CA根证书校验失败 |
55017 | 本机号码校验异常 |
55018 | 服务器繁忙 |
55019 | 运营商请求超时 |
55020 | 异网取号失败 |
65001 | 运营商接口降级 |
65002 | 系统初始化卡商信息异常 |
65003 | 运营商接口未知错误 |
65004 | 系统内部错误 |
65005 | 系统繁忙 |
65006 | 请求非法 |
65007 | 请求数据有误 |
65008 | 请求提交重复 |
65009 | 请求签名验证失败 |
65010 | 请求字段验证失败 |
65011 | MQ 消息发送异常 |
65012 | APP 包名不一致 |
65013 | 该企业没有对应的 IP 白名单列表 |
65014 | 该企业没有为该 IP 配置白名单 |
65015 | 手机号码验证失败 |
65016 | 该应用不存在 |
65017 | 该应用状态错误 |
65018 | 该应用状态为能力配置中,无效丌可使用 |
65019 | 该应用没有提供该能力产品类型 |
65020 | 该应用没有对应可用预授权或预授权余额丌足 |
65021 | 该应用没有对应可用供应商 APPID |
65022 | 该预授权、销售品类型、运营商没有对应可用销售品信息 |
65023 | 该预授权没有对应可用预存款信息 |
65024 | 该预授权 ID 错误 |
65025 | 该预授权的运营商没有对应的供应商信息 |
65026 | 运营商错误 |
65027 | 联通平台请求错误 |
65028 | 移动平台请求错误 |
65029 | 电信平台请求错误 |
65030 | 移劢平台请求短信校验失败 |
65031 | 移劢平台请求短信验证码过期 |
65032 | 一键登录模块没有初始化 |
65033 | 一键登录模块初始化失败 |
65034 | 无法识别卡运营商 |
65035 | 当前手机网络超时 |
65036 | 移动运营商 token 获取失败 |
65037 | 联通运营商 token 获取失败 |
65038 | 电信运营商 token 获取失败 |
65039 | 没有配置移劢运营商能力 |
65040 | 没有配置联通运营商能力 |
65041 | 没有配置电信运营商能力 |
65042 | SDK 内置补偿短信通道已关闭 |
65043 | 运营商 SDK 内部错误 |
65044 | 一键免密登录未配置 controller |
65045 | UIModel 未设置, 请重新设置 ASPThreeNetsUIModel |
获取本机手机号
请求示例
请求方式:POST
请求路径:【域名】【端口号】/req/api/server/Onekey/mobileQuery
描述: 获取手机号接口
请求参数: 类型JSON
参数名称 | 参数类型 | 是否必须 | 描述 |
sign | string | yes | 请求签名 |
time_stamp | string | yes | 时间戳 |
app_id | string | yes | 应用id |
request_id | string | no | 请求id |
access_token | string | yes | 置换手机号token |
is_phone_base64 | boolean | no | 返回手机号是否base64 |
签名规则:
1、api_master_secret + time_stamp
2. 最后对上述值取 32 位大写 MD5
示例:
{ "sign": "请求签名", "time_stamp": "时间戳", "app_id": "B7E4B8879AE5947E5A68B1EC7A0727AA", "request_id": "请求id", "access_token":"5EB9FC2554099625559A217C8B736C45", "is_phone_base64":"true" }
参数名称 | 参数类型 | 描述 |
code | string | 响应code码 |
request_id | string | 请求id |
object | object | 返回数据(json) |
tel | string | 下发手机号 |
order_bill | string | 订单号 |
示例:
{ "code": "00000", "object": { "tel":"18355555555", "order_bill":"onekey155512472288837792046343" }, "request_id": "XX123456" }
本机手机号验证
请求示例
请求方式:POST
请求地址:【域名】【端口号】/req/api/server/Onekey/ phoneValidate
描述:开发者获取token后,需要将token传递到应用服务器,由应用服务器发起本机号码校验接口的调用
请求参数:参数类型JSON
参数名称 | 参数类型 | 是否必须 | 描述 |
app_id | String | yes | 应用ID |
access_token | String | yes | 运营商校验用的token |
time_stamp | String | yes | 时间戳 精确到毫秒 |
request_id | String | no | 用户端的请求序列号 |
tel | String | yes | 手机号 |
sign | String | yes | 签名 |
签名规则:
1、api_master_secret + time_stamp
2. 最后对上述值取 32 位大写 MD5
示例:
{ "app_id": "gadsagadjajddoas", "app_token": "ADFLKSJLCDFFD ", "time_stamp": "1567562917746", "request_id": "XX123456", "tel":"18956565656", "sign":"DASDAWDDASXASD23213213" }
参数名称 | 参数类型 | 描述 |
code | string | 错误码 |
msg | string | 错误信息 |
request_id | string | 用户端的请求序列号 |
object | object | 返回数据(json) |
is_local_phone | string | 是否是本机手机号(0:本机号码,1:非本机号码) |
order_bill | string | 订单号 |
示例:
{ "code": "00000", "request_id": "1232132130", "object":{ "is_local_phone":"1", "order_bill":"onekey_12348434" } }
返回码说明:
返回码码值 | 返回码说明 |
00001 | 参数错误 |
00994 | 网络超时 |
00995 | access_token超时 |
00996 | access_token错误 |
00115 | 请求签名错误 |
00116 | 请求签名超时 |
14103 | 开发者身份校验失败 |
14109 | 账户余额不足 |
27003 | 一键验证服务配置信息错误 |
27004 | 运营商获取手机号错误 |
token 二次校验
SDK身份验证成功后,客户端会获取到一个verify_token,sai平台可以对验证成功后的令牌二次校验,以提升安全性。通过服务端到服务端的校验,用户可以在二次校验通过后,允许用户操作(如修改密码)。
(注:app_sign生成规则,app_master_secret + current_time组成的字符串进行 md5加密)。
请求示例
HTTP:POST
请求URL:【域名】【端口号】/req/api/server/Server/recheckVerifyToken
参数名称 | 参数类型 | 描述 |
app_id | string | 应用ID |
app_sign | string | 应用签名 |
current_time | string | 当前时间 |
verify_token | string | 验证结果token |
request_id | string | 用户端的请求序列号 |
tel | string | 一键验证产品为必填,其他产品选填 |
示例:
{ "app_id" :"WOKCIUUMFWOSRKOICUDODSW", "app_sign" :"7530A4C8AD469A93B4EB2202F670B979", "current_time" :"1530155497246", "verify_token" :"WE32F9SD8DKX8FEWJC8K42LJL46", "request_id" :"XX123456", "tel" :"183XXXX4152" }
参数名称 | 参数类型 | 描述 |
code | string | 错误码 |
msg | string | 错误信息 |
request_id | string | 每个http请求的唯一标识 |
示例:
{ "code" :"0", "msg" :"" , "request_id" :"XX123456" }
请求示例
HTTP:POST
请求URL:【域名】【端口号】/req/api/server/Server/serverTimeStamp13Check
(注:请求参数有time_stamp13参数,则多返回一个时间差参数)
参数名称 | 参数类型 | 必须 | 描述 |
time_stamp13 | string | false | 验证结果token |
示例:
{"time_stamp13": "1530155497246"}
返回参数:参数类型JSON
参数名称 | 参数类型 | 描述 |
code | string | 错误码 |
msg | string | 错误信息 |
system_time_stamp13 | string | 系统时间 |
time_diff | string | 与系统的时间比对 |
示例:
{ "code": "00000", "msg": "OK", "system_time_stamp13": 1530157458206, "time_diff": 1960960 }
短信验证码
发送短信接口
接口Url: 【域名】【端口号】/req/api/server/Sms/smsSend
支持格式: JSON
HTTP:POST
样例:
{ "sign": "xxxxx", "app_id": "xxxxx", "sms_template": "模板名称", "sms_param": {"code": "457156"}, "tel": "138XXXXXXXX", "time_stamp13": "1520489490817" }
sign = MD5(APP服务秘钥 + time_stamp13)
参数 | 必须 | 类型范围 | 说明 |
sign | true | String | 请求签名(32位) |
time_stamp13 | true | String | 13位时间戳 |
app_id | true | String | 应用id |
tel | true | String | 手机号码 |
sms_template | true | String | 模板名称 |
sms_param | true | JSON | 模板参数 |
格式:JSON
样例:
{ "code":"00000", "msg":" OK" , "order_id":"1234567890" }
参数意义:
参数 | 类型范围 | 说明 |
code | String | "00000": 代表成功 |
msg | String | "OK": 代表成功 |
order_id | String | 订单号 |
服务端API demo包含java、php演示代码,相关接入操作可参考demo中的代码演示。
java/php Demo下载 OxApiDemo.zip
错误码列表
返回码 | 返回描述 |
-1 | 未知错误 |
00000 | 成功 |
00001 | 参数错误 |
00002 | 无数据 |
00005 | 短信验证码超时 |
00009 | 请求失败 |
00031 | 验证失败 |
15101 | 手机号未绑定 |
15001 | 用户登录Token 超时 |
15002 | appToken 无效,错误 |
00995 | token超时 |
00996 | token无效 |
00115 | 请求签名错误 |
00122 | 时间戳错误 |
00994 | accessToken 校验失败 |
00116 | 请求签名超时 |
27004 | 登录失败,手机号码错误 |
14021 | 手机号错误 |
14043 | 手机号被绑定 |
14033 | 使用次数不足 |
14109 | 账户余额不足 |
11026 | 包名错误 |
11027 | 包签名错误 |
11001 | appID 错误 |
11112 | appID 与包名不匹配 |
11117 | app 服务未开通 |
11118 | app 应用未审核通过 |
11119 | 应用被禁用 |
20124 | temp_code错误 |
21108 | 模板错误 |
20115 | 签名错误 |
21056 | 发送短信失败 |
21038 | 获取手机号失败 |
10032 | 短信已发送 |
10069 | 短信发送太频繁 |
14103 | 开发者身份验证失败 |
14023 | 开发者验证失败 |
14024 | 开发者未授权 |
10110 | 网络请求异常 |
10112 | JSON格式错误 |
45001 | 数据网络切换异常 |
45002 | 未检测到数据网络 |
45003 | 未检测到网络 |
45004 | 未安装SIM卡 |
45005 | 没有权限 ACCESS_NETWORK_STATE |
45006 | 没有权限 READ_PHONE_STATE |
45009 | 登录取消 |
45017 | 联通取号失败 |
45018 | 移动取号失败 |
45019 | 电信取号失败 |
45021 | 取号请求时获取imsi失败 |
45023 | 未知错误一般出现在线程捕获异常 |
45024 | 授权页UI加载异常 |
45025 | 授权请求时获取imsi失败 |
45028 | 免密登录切换账号 |
45029 | 免密登录受限 |
45030 | access token请求失败 |
55001 | 运营商错误 |
55002 | 请求签名错误 |
55003 | 包签名错误 |
55004 | 网关IP错误 |
55005 | appid不存在 |
55006 | 短信异常 |
55007 | scrip失效 |
55008 | token请求过于频繁 |
55009 | 预取号异常 |
55010 | 网络请求出错 |
55011 | 取号上限 |
55012 | appid不在白名单 |
55013 | 数据解析异常 |
55014 | 数据异常 |
55015 | 授权页异常 |
55016 | CA根证书校验失败 |
55017 | 本机号码校验异常 |
55018 | 服务器繁忙 |
55019 | 运营商请求超时 |
55020 | 异网取号失败 |
65001 | 运营商接口降级 |
65002 | 系统初始化卡商信息异常 |
65003 | 运营商接口未知错误 |
65004 | 系统内部错误 |
65005 | 系统繁忙 |
65006 | 请求非法 |
65007 | 请求数据有误 |
65008 | 请求提交重复 |
65009 | 请求签名验证失败 |
65010 | 请求字段验证失败 |
65011 | MQ 消息发送异常 |
65012 | APP 包名不一致 |
65013 | 该企业没有对应的 IP 白名单列表 |
65014 | 该企业没有为该 IP 配置白名单 |
65015 | 手机号码验证失败 |
65016 | 该应用不存在 |
65017 | 该应用状态错误 |
65018 | 该应用状态为能力配置中,无效丌可使用 |
65019 | 该应用没有提供该能力产品类型 |
65020 | 该应用没有对应可用预授权或预授权余额丌足 |
65021 | 该应用没有对应可用供应商 APPID |
65022 | 该预授权、销售品类型、运营商没有对应可用销售品信息 |
65023 | 该预授权没有对应可用预存款信息 |
65024 | 该预授权 ID 错误 |
65025 | 该预授权的运营商没有对应的供应商信息 |
65026 | 运营商错误 |
65027 | 联通平台请求错误 |
65028 | 移动平台请求错误 |
65029 | 电信平台请求错误 |
65030 | 移劢平台请求短信校验失败 |
65031 | 移劢平台请求短信验证码过期 |
65032 | 一键登录模块没有初始化 |
65033 | 一键登录模块初始化失败 |
65034 | 无法识别卡运营商 |
65035 | 当前手机网络超时 |
65036 | 移动运营商 token 获取失败 |
65037 | 联通运营商 token 获取失败 |
65038 | 电信运营商 token 获取失败 |
65039 | 没有配置移劢运营商能力 |
65040 | 没有配置联通运营商能力 |
65041 | 没有配置电信运营商能力 |
65042 | SDK 内置补偿短信通道已关闭 |
65043 | 运营商 SDK 内部错误 |
65044 | 一键免密登录未配置 controller |