Android SDK 接入指南

1.产品功能说明

本SDK为App实现机主身份验证功能,包含运营商短信验证,以及其他方式。 它减少App开发者的在客户身份验证过程中的难度与费用,减少用户操作流程, 提升App用户的使用体验,为APP开发提供极大的便利。

2. SDK 包含内容

  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 集成步骤

1. 创建开发者账号

访问官网: 点击进入官网


注册登录后并完成实名认证

2. 在官网上创建应用

按照官网要求填入项目信息,获得对应的AppId和AppSecret等;

3. 导入SDK开发包到你的应用程序项目

 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')
  }

4. 编译版本配置

minSdkVersion:17

5. 配置AndroidManifest.xml

为保证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>

6. 混肴配置

     -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.** { *; }

7. 参数格式

请求参数 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 类中。

1. 初始化

只有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"}

2. 请求入口

SDK集成的功能:发送短信验证、短信校验、一键登验证、本机号校验功能,都可以调用OxClientEntry中的requestAction接口完成操作;

        /*** 服务操作的请求入口方法**/
        public static boolean requestAction(OxRequestParam param);

注意:有关一键验证授权页设置方法请参考demoSDK中《sai_sdk_android使用文档》。

3. 回调出口

新建一个类并实现OxNotifier接口。示例如下:(注:接口中的方法运行在子线程中).

     package org.ox.face;

     import org.ox.base.OxRequestResult;

     public interface OxNotifier {
        void onActionResult(OxRequestResult result);
     } 

接口调用指南

1. 一键登录

一键登录又称本机号一键登录,需要在数据网络通畅条件下才能正常完成操作,通过移动运营商授权获得手机号完成登录。此功能在简单调用的前提下还具备设置授权风格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.2. 竖屏授权页预览
  

1.3. 横屏授权页预览




1.4. 授权页面修改--功能支持

  1. xml布局UI编写
  2. 横竖屏自动适配
  3. 全屏模式–activity模式
  4. 弹窗模式–dialog模式
  5. 自定义view事件绑定与处理
  6. ThemeConfig授权页配置修改风格

更多内容请下载SDK查阅《sai_sdk_android使用文档.pdf》。


1.5. 预取号功能

调用方法

OxClientEntry.requestAction(OxRequestParam);

请求参数

参数名称 参数类型 必填 描述
actionType String 请求类型:
OxActionType.PRE_LOGIN
strData string -- 请求参数,格式JSON
extra Object 自定义参数,不参与请求。

响应信息

参数名称 参数类型 非空 描述
actionType String 响应类型:
OxActionType.PRE_LOGIN
strData code string 响应码 :“00000”:预授权调用成功
param OxRequestParam 请求对象数据

1.6. (旧)拉起授权页

请求参数

参数名称 参数类型 必填 描述
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 请求对象数据

2. (新)获取登录accessToken

推荐新方法调起授权页,并在用户点击登录后,通过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 请求对象数据

3. 本机号码校验


获取 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 请求对象数据

4. 短信验证

短信验证由客户端发起,收到短信验证码后校验短信验证码是否正确。

请求发送短信验证调用此方法,会向传入的手机号对应的手机发送一条短信(调用此接口会消耗验证次数或余额,优先消耗验证次数),短信验证码一分钟内只能发送一次,一分钟内多次调用会导致失败。

请求短信验证码

请求参数

参数名称 参数类型 必填 描述
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. 申请APPID

(1)注册并登录客户平台。

(2)进入“应用管理-创建应用”,完成产品创建,您将获得一串32位的AppID、AppSecret、MasterSecret。
如果您已经完成产品创建,请在如下位置获取应用唯一标识码:“应用管理-应用列表-详情”,用于集成到SDK中。
注:为了保证您的数据安全,请勿泄露您的应用唯一标识码。

2. 导入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)配置下图系统依赖库


接入方法说明

1. 初始化SDK

方法用途:

用于应用启动后,初始化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 ]];
         }}

                        

2. 一键登录

方法用途:

无需填写手机号等其它操作,用户就可以一键登录

使用方法:

初始化成功后调用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){
           }

                        

3. 一键登录(token)

方法用途:

无需填写手机号等其它操作,用户就可以一键登录

使用方法:

初始化成功后调用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){
           }

                        

4. 短信验证

方法用途:

通过短信进行机主验证

使用方法:

初始化成功后调用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){

        }
            ………………
           ………………
        }
                        

5. 本机号码校验

方法用途:

通过本机号码校验进行机主验证

使用方法:

初始化成功后调用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 ){
   }

                        

iOS SDK 运行流程图

1. 短信校验码——验证流程图


2. 二次验证——验证流程图


错误码

返回码 返回描述
-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请求字段验证失败
65011MQ 消息发送异常
65012APP 包名不一致
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没有配置电信运营商能力
65042SDK 内置补偿短信通道已关闭
65043运营商 SDK 内部错误
65044一键免密登录未配置 controller
65045UIModel 未设置, 请重新设置 ASPThreeNetsUIModel

获取本机手机号

1. 请求说明

请求示例

请求方式: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"
}

2. 返回说明

参数名称 参数类型 描述
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"

}

本机手机号验证

1. 请求说明

请求示例

请求方式: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"
}

2. 返回说明

参数名称 参数类型 描述
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 二次校验

1. 接口描述

SDK身份验证成功后,客户端会获取到一个verify_token,sai平台可以对验证成功后的令牌二次校验,以提升安全性。通过服务端到服务端的校验,用户可以在二次校验通过后,允许用户操作(如修改密码)。


(注:app_sign生成规则,app_master_secret + current_time组成的字符串进行 md5加密)。

2. 请求说明

请求示例

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"
        }

3. 返回说明

参数名称 参数类型 描述
code string 错误码
msg string 错误信息
request_id string 每个http请求的唯一标识

示例:

        {
            "code" :"0",
            "msg" :"" ,
            "request_id" :"XX123456"
        } 

4. 服务器时间校对接口

请求示例

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
        }

短信验证码

1. 接口描述

发送短信接口

接口Url: 【域名】【端口号】/req/api/server/Sms/smsSend

支持格式: JSON

HTTP:POST

2. 请求参数

样例:

    {
        "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 模板参数

3. 返回参数

格式:JSON

样例:

    {
    "code":"00000",
    "msg":" OK" ,
    "order_id":"1234567890"
    }
                    

参数意义:

参数 类型范围 说明
code String "00000": 代表成功
msg String "OK": 代表成功
order_id String 订单号
*注意:如果接收到的错误码不是00000,都视为有错误。
*注意:如果HTTPS请求超时,不代表未接收订单,可以根据单号查询订单是否接收成功
请做好异常处理。

4. demo 下载

服务端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