手机号码一键登录
# 文档说明
本文为您介绍iOS客户端如何接入一键登录功能。一键登录功能,即号码认证,整合三大运营商特有的数据网关认证能力,升级短信验证码方式,应用于用户注册、登录等场景。
一键登录使用场景:用户无需输入手机号码,SDK会拉起授权页,用户确认授权后,SDK会获取token,服务端携带token到运营商网关获取用户当前上网使用的号码,最终认证结果返回给App服务端。
竹云IDaaS一键登录SDK基于阿里云“号码认证”SDK进行了封装,用户可遵循阿里云接入规范接入此SDK。
# 流程说明
# 一键登录流程
集成流程说明
注册阿里云的私钥和IDaaS服务端的配置参数到IDaaS SDK。
终端网络检测,通过阿里云服务端检查网络环境是否可行,若用户开启了4G流量且网络通畅,成功调用IDaaS SDK并拉起授权页面。
用户确认授权页面的内容,并同意相关协议。IDaaS SDK会获取授权TOKEN,传递到IDaaS服务端。
IDaaS服务端使用TOKEN到阿里云服务端获取用户手机号后,发起认证,若认证成功,则返回session_token和id_token,可保存到App客户端或用于其他;若认证不成功,返回错误码和原因,进行下一步跳转。
客户端可以使用id_token来校验登录有效期和获取用户基本信息。
客户端可以使用session_token来刷新id_token。
# 对接流程
# 准备工作
# 注册阿里云账号
参考阿里云官网开通账号流程 (opens new window)和认证方案管理 (opens new window)。
# 开通号码认证功能
访问号码认证服务产品详情页以企业用户开通购买。
单击立即开通或访问产品控制台。
进入控制台首页,勾选我已阅读并同意《号码认证服务协议》。
单击立即开通,完成产品开通。
登录号码认证服务控制台 (opens new window),在标准版选项卡,下载并解压iOS SDK。
# 添加认证方案
iOS app接入方案,需要使用iOS app上架的Bundle ID,按照如下填写。
填写完成后点击确定,保存配置,拿到密钥保存在app本地,当使用IDaaS SDK时,传入SDK的初始化方法(在appdelegate中初始化时候使用),参见sdk初始化的步骤。
# 配置IDaaS后台认证源
登录IDaaS企业中心,选择 “认证-》认证源管理-》内置认证源”,点击“本机号码一键登录”。
弹出“本机号码一键登录”配置页面,配置本机号码一键登录需要的参数。
参数 参数说明 号码认证服务商 默认阿里云 Access Key ID 填入阿里云创建用户时候产生的AccessKey AccessKey Secret 填入阿里云创建用户时候产生的AccessKey Secret 在阿里云工作台创建用户,勾选下框,可获取参数AccessKey和AccessKey Secret,将获得的参数配到上一步骤页面中。
登录IDaaS后台 点击 资源-->应用-->选择跟自己相关的应用点击即可查看到。
# 环境搭建
# 引入依赖包
登录号码认证服务控制台 (opens new window),在标准版选项卡,下载并解压iOS SDK。
ATAuthSDK.framework //阿里云的sdk,当前版本是2.13.2
YTXMonitor.framework //阿里云的sdk,当前版本是2.3.2
YTXOperators.framework //阿里云的sdk,当前版本是1.3.2
2
3
# 添加主库
AuthnCenter_common_2C.framework
AuthnCenter_mobileNumberAuth_AliYun_2C.framework
AuthnCenter_mobileNumberAuth_AliYun_2C.bundle//资源文件
2
3
将依赖库和IDaaSSDK拖入工程,并且引入方式如下:
并且引入Pod的依赖包。
pod 'JWT', '~> 3.0.0-beta.14'
# Targets设置
IDaaS一键登录SDK最低版本可兼容ios 11。
在framework, library,and embedded content里引入以下包
Framework,Libraries,andEmbedded Content里添加主库和依赖包,且在Other Linker Flags增加-ObjC。
若您的终端设备使用的是中国联通SIM卡的5G移动数据,可能会导致使用一键登录功能获取本机号码失败。您可在菜单栏选择TARGETS > Info > Custom iOS Target Properties > App Transport Security Settings > Allow Arbitrary Loads,并将其值设置为YES可解决此问题。
配置bitcode,如下图,设置bitcode为NO。
# 开发集成
引入头文件:
在appdelegate中引用如下
#import < AuthnCenter_common_2C /BCIDACommonManager.h>
#import <AuthnCenter_mobileNumberAuth_AliYun_2C/BCMobileNumberAuthManager.h>
2
3
# SDK初始化
将添加认证方案中获取的密钥保存在app端,在app的入口地方,注册密钥到IDaaS SDK。 IDaaS SDK提供两个初始化方法,您可在初始化方法调用之后,在需要使用一键登录的地方,调用startMobileAuthWithWindowsMode方法拉起窗口。
本机号码一键登录初始化的示例,将初始化的两个方法在appdelegate中的didFinishLaunchingWithOptions方法中初始化。
//1. 基本配置初始化
[[[[[BCIDACommonManager sharedInstance] initWithDomain:@"https://你的后台租户.com"] initWithClientID:@"后台租户clientID"] initWithSSLCerVerification:NO] setLogEnabled:YES] ;
//2. 一键登录初始化方法
[[BCMobileNumberAuthManager sharedInstance] registAliYunSecreteKey:aliYunSecKey andWithCompletionHandler:^(NSDictionary * _Nonnull resultDic) {
//成功时resultDic=@{resuFltCode:600000,msg:...}
}];
2
3
4
5
6
7
基本配置初始化主类BCIDACommonManager
方法简介:
/**
* 函数名:sharedInstance
* @param 无
* @return 单例对象实例类
*/
+ (instancetype )sharedInstance ;
/**
* 函数名:initWithDomain
* @param domain,以.com结尾。
* @return 实例类
*/
-(BCIDACommonManager)initWithDomain:(NSString)domain
/**
* 函数名:initWithClientID
* @param client id。
* @return 实例类
*/
-(BCIDACommonManager)initWithClientID:(NSString)clientID;
/**
* 函数名:setLogEnabled
* @param 布尔值是否开启log。
* @return 实例类
*/
-(void)setLogEnabled:(BOOL)enable;
/**
* 函数名:initWithSSLCerVerification
* @param 布尔值设置ssl证书是否开启检测。
* @return 实例类
*/
-(BCIDACommonManager*)initWithSSLCerVerification:(bool)sslCerVerification;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
一键登录初始化主类BCMobileNumberAuthManager方法简介:
/**
* 函数名:sharedInstance
* @param 无
* @return 单例对象实例类
*/
+ (instancetype )sharedInstance ;
/**
* 函数名:registAliYunSecreteKey
* @param aliYunSecreteKey传入阿里云的私钥。
* @return BCMobileNumberAuthRegistCompletionHandler回调函数,包含 NSDictionary * resultDic,成功时resultDic=@{resuFltCode:600000,msg:...},其他情况时"resultCode"值请参考PNSReturnCode
*/
-(void)registAliYunSecreteKey:(NSString*)aliYunSecreteKey andWithCompletionHandler:(BCMobileNumberAuthRegistCompletionHandler)completionCallBack;
2
3
4
5
6
7
8
9
10
11
12
13
# 环境检测
App客户端使用一键登录功能,需先通过阿里云的检测方法来检测环境是否合适。终端手机需满足4G环境下才能被调用成功。在初次或切换移动数据网络之后需要重新检测环境,一般在一次登录认证流程开始前调一次即可。
TXCommonHandler对象方法简介:
/**
* 函数名:checkEnvAvailableWithComplete
* @brief:检查及准备调用环境,resultDic返回PNSCodeSuccess才能调用下面的功能接口,在初次或切换移动数据网络之后需要重新调用,一般在一次登录认证流程开始前调一次即可
*@param complete:异步结果回调,成功时resultDic=@{resultCode:600000, msg:...},其他情况时"resultCode"值请参考PNSReturnCode,只有成功回调才能保障后续接口调用
*/
[TXCommonHandler sharedInstance];//获取阿里云单例
-(void)checkEnvAvailableWithComplete:(void(^_Nullable)(NSDictionary* Nullable resultDic))complete;
2
3
4
5
6
7
检测成功后,可以调用加速的一个方法,加速一键登录授权页弹起,防止调用一键登录拉起等待弹起授权页时间过长。(根据实际情况加速方法使用不是必须的)
/**
* 函数名:accelerateLoginPageWithTimeout
* @brief:加速一键登录授权页弹起,防止调用getLoginTokenWithTimeout:controller:model:complete: 等待弹起授权页时间过长
* @param timeout:接口超时时间(单位:s),默认3.0s,值为0.0时采用默认超时时间
* @param complete:结果异步回调,成功时resultDic=@{resultCode:600000,msg:...},其他情况时"resultCode"值请参考PNSReturnCode
*/
-(void)accelerateLoginPageWithTimeout:(NSTimeInterval)timeout complete:(void (^_Nullable)(NSDictionary * Nonnull resultDic))complete;
2
3
4
5
6
7
# 唤起授权页面
环境检测成功后,加速方法也调用后,拉起IDaaS SDK的一键登录方法。
示例代码:
[[BCMobileNumberAuthManager sharedInstance] startMobileAuthWithWindowsMode:nil andWithViewController:self andWithCompletionCallBack:^(NSString * _Nonnull code, id _Nonnull data) {
//code=@”0” 的时候登录成功,data返回session_token和id_token,code=其他的时候登录失败
}];
回调函数返回结果,授权页面自动关闭
2
3
4
主类BCMobileNumberAuthManager方法简介:
/**
* 函数名:startMobileAuthWithWindowsMode
* @brief:一键登录页面拉起流程
* @param (TXCustomModel*)customMode 页面定制类,可以通过此类定制页面样式,请参考后面章节
*@param (UIViewController*)fromVC 从目前的viewcontroller 推出一键登录页面
* @param BCMobileNumberAuthProcessCompletionHandler()回调函数见接下来的表格
*/
-(void)startMobileAuthWithWindowsMode:(TXCustomModel*)customMode andWithViewController:(UIViewController*)fromVC andWithCompletionCallBack:(BCMobileNumberAuthProcessCompletionHandler)completionCallBack;
2
3
4
5
6
7
8
BCMobileNumberAuthProcessCompletionHandler回调函数返回码:
code码 | 说明 |
---|---|
code=0 | 登录成功,此时data会返回NSDictionary: data=@{@"session_token":sessionToken内容,@"id_token":idToken内容}; |
code=1 | 登录失败,data返回字符串描述错误 |
code=错误码(阿里云错误码和事件码),请参照阿里云错误码表格(错误码和事件响应码) | 登录不成功,data返回NSDictionary可获取当前运行结果的值, |
code=错误码(sdk后台错误码) | 登录不成功,data返回字符串错误描述信息 |
IDaaS SDK默认的一键登录页面,包含脱敏显示的号码、返回按钮、复选框协议签署以及其他方式登录的按钮。以上组件的样式、文字描述可定制化。
其中,本机号码一键登录、返回以及其他方式登录按钮,点击操作后,IDaaS SDK将向App客户端发起回调,返回内容为返回码和相关数据,并关闭窗口,即操作完成;复选框协议签署,操作后回调函数给出相关数据,窗口不会被关闭。
# 授权界面设计
确保用户在登录过程中将手机号码信息授权给开发者使用的知情权,一键登录需要开发者提供授权页登录页面供用户授权确认。开发者在调用授权登录方法前,必须弹出授权页,明确告知用户当前操作会将用户的本机号码信息传递给应用。
TXCustomModel *model = [[TXCustomModel alloc] init];
是阿里云对页面样式定制的类,您可以实例化类,设置页面样式,然后将此实例传入sdk的拉起方法
2
示例代码:
-(TXCustomModel*)AddThemeExample{
TXCustomModel *model = [[TXCustomModel alloc] init];
model.supportedInterfaceOrientations = UIInterfaceOrientationMaskPortrait;
model.navIsHidden = NO;
model.logoIsHidden = NO;
model.navColor=[UIColor clearColor];
NSDictionary *attributes = @{
NSForegroundColorAttributeName : [UIColor whiteColor],
NSFontAttributeName : [UIFont systemFontOfSize:20.0]
};
NSDictionary *attributesNavTex = @{
NSForegroundColorAttributeName : [UIColor blackColor],
NSFontAttributeName : [UIFont systemFontOfSize:20.0]
};
NSDictionary *attributesslogenTex = @{
NSForegroundColorAttributeName : [UIColor grayColor],
NSFontAttributeName : [UIFont systemFontOfSize:20.0]
};
UIColor* UIBlue=[UIColor colorWithRed:255.0/255.0 green:99.0/255.0 blue:71.0/255.0 alpha:1.0];
NSDictionary *attributeschangeTex = @{
NSForegroundColorAttributeName : UIBlue,
NSFontAttributeName : [UIFont systemFontOfSize:15.0]
};
model.navTitle = [[NSAttributedString alloc] initWithString:@"登录" attributes:attributesNavTex];
model.loginBtnText=[[NSAttributedString alloc] initWithString:@"本机号码一键登录" attributes:attributes];
UIImage* backImage= [UIImage imageNamed:@"fanhuianniu-2"];
UIImage* uncheckImage=[UIImage imageNamed:@"gou-2"];
UIImage* checkImage=[UIImage imageNamed:@"gou"];
model.navBackImage=backImage;
model.checkBoxImages=@[uncheckImage,checkImage];
model.changeBtnTitle=[[NSAttributedString alloc] initWithString:@"其他方式登录" attributes:attributeschangeTex];
model.privacyFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
float startx= (BCIDAScreenWidth-frame.size.width)*0.5;
frame.origin.x=startx;
return frame;
};
model.logoImage = [UIImage imageNamed:@"wangluo"];
model.logoFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
frame=CGRectMake(frame.origin.x, (frame.origin.y+100), frame.size.width, frame.size.height);
return frame;
};
model.numberFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
frame=CGRectMake(frame.origin.x, (frame.origin.y+40), frame.size.width, frame.size.height);
return frame;
};
model.privacyNavBackImage=backImage;
model.sloganIsHidden=YES;
model.loginBtnFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
frame=CGRectMake(frame.origin.x, (frame.origin.y+40), frame.size.width, frame.size.height);
return frame;
};
model.changeBtnFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
frame=CGRectMake(frame.origin.x, (frame.origin.y+40), frame.size.width, frame.size.height);
return frame;
};
return model;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# IDToken校验和获取用户信息
在登录成功后会返回session_token和id_token。id_token可以用来获取用户信息和校验登录有效期。
校验idToken
从idtoken中获取用户信息(可以不通过校验直接调用此方法)
# 校验id_token
调用示例:
[[BCIDAIDTokenManager sharedInstance] verifySignWithIdToken:idToken andWithCallBack:^(NSString * _Nonnull code, id _Nonnull data) {
}];
2
主类BCIDAIDTokenManager介绍:
/**
* 函数名:sharedInstance
* @param 无入参
* @return返回对象单例实例
*/
+ (instancetype )sharedInstance;
/**
* 函数名:verifySignWithIdToken
* @brief:校验idtoken是否在登录有效期和应用一致的方法
* @param idToken登录时候返回的
* @param BCIDAIdTokenVerifyHandlerBlock回调函数:
NSString code
id data
**/
-(void)verifySignWithIdToken:(NSString*)idToken andWithCallBack:(BCIDAIdTokenVerifyHandlerBlock)callback;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
返回值:
code(NSString) | data | data的数据类型和说明 |
---|---|---|
0 | success | [NSString]验签成功 |
1 | 错误描述 | [NSString]入参为空,sdk初始化参数domain和clientID没有设置 |
106 | 时间过期 | [NSString]过期的idtoken |
107 | clientID不符合 | [NSString]可能使用了其他应用的clientID |
103 | 验签失败 | [NSString]验签过程失败 |
102 | 获取公钥为空 | [NSString]验签过程中错误 |
见文末错误码集合 | 见文末错误码集合 | 还可能返回文末的错误码 |
# 从idToken解析出用户信息
调用示例:
[[BCIDAIDTokenManager sharedInstance] getUserInfoFromIdTokenWithIdToken:idToken andWithCallBack:^(NSString * _Nonnull code, id _Nonnull data) {
}];
2
3
主类BCIDAIDTokenManager介绍:
/**
* 函数名:sharedInstance
* @param 无入参
* @return返回对象单例实例
*/
+ (instancetype )sharedInstance;
/**
* 函数名:getUserInfoFromIdTokenWithIdToken
* @brief:从idToken解析用户信息
* @param idToken登录返回的
* @param BCIDAIdTokenGetInfoHandlerBlock回调函数:
NSString code
id data
**/
-(void)getUserInfoFromIdTokenWithIdToken:(NSString*)idToken andWithCallBack:(BCIDAIdTokenGetInfoHandlerBlock)callback;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
用户信息参数说明:
参数名 | 描述 |
---|---|
iss | 令牌签发人 |
aud | 令牌接收者,应用的clientId |
exp | 令牌的过期时间 |
jti | 令牌的id |
iat | 令牌的签发时间 |
sub | 固定为subject |
name | 用户姓名 |
mobile | 用户手机号 |
id | 用户的id |
userName | 用户名 |
用户邮箱 |
回调函数返回值:
成功示例:
code=0
data=
{
"id": "20220729174957176-2C7F-A2C54C293",
"exp": 1659407592,
"nbf": 1659407172,
"mobile": "+86-13808603636",
"jti": "7iwCYPo8EYcmLAD18x-CAw",
"iss": "https:\/\/sdk2c.idaas-test-alpha.bccastle.com\/api\/v1\/oauth2",
"userName": "zhangrui1",
"sub": "20220729174957176-2C7F-A2C54C293",
"aud": "S1ScicdIVR1QUbNs8TBz6BYVd2Zt8Adc",
"iat": 1659407292,
"email": "",
"name": "zhangrui1"
}
失败示例
code=102
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 刷新IDToken
调用示例:
[[BCIDAIDTokenRefreshManager sharedInstance] refreshIdTokenWithSessionToken:sessionToken andWithCallBack:^(NSString * _Nonnull code, id _Nonnull data) {
NSString* jsonS=(NSString*)data;
NSDictionary* dict= [self dictionaryWithJsonString:jsonS];//解析jsonStr到NSDictionary
NSString* idTok= [dict objectForKey:@"id_token"];
NSString* session_tok=[dict objectForKey:@"session_token"];
NSString* expr=[dict objectForKey:@"expire"];
}];
2
3
4
5
6
7
主类BCIDAIDTokenManager介绍:
/**
* 函数名:sharedInstance
* @param 无入参
* @return返回对象单例实例
*/
+ (instancetype )sharedInstance;
/**
* 函数名:refreshIdTokenWithSessionToken
* @brief:刷新idToken
* @param sessionToken登录返回的
* @param BCIDAIdTokenRefreshIDTokenHandlerBlock回调函数:
NSString code
id data
**/
-(void)refreshIdTokenWithSessionToken:(NSString*)sessionToken andWithCallBack:(BCIDAIdTokenRefreshIDTokenHandlerBlock)callBack;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
回调函数返回值:
成功示例:
code=0
data=
{
"id_token" : "eyJraWQiOiJhODJkzJjLmlkYWFzLXRllKp6w",
"session_token" : "apcOKuyry7kASh9h6mtf2G2GbettkyiU",
"expire" : 7200
}
失败示例(获取不到数据)
code=1
2
3
4
5
6
7
8
9
10
11
# 阿里云返回码
返回码 | 返回码描述 | 建议 |
---|---|---|
600000 | 获取Token成功 | 无。 |
600001 | 唤起授权页成功 | 无。 |
600002 | 唤起授权页失败 | 建议切换到其他登录方式。 |
600004 | 获取运营商配置信息失败 | 创建工单联系工程师。 |
600005 | 手机终端不安全 | 切换到其他登录方式。 |
600007 | 未检测到SIM卡 | 提示用户检查SIM卡后重试。 |
600008 | 移动数据网络未开启 | 提示用户开启移动数据网络后重试。 |
600009 | 无法判断运营商 | 创建工单联系工程师。 |
600010 | 未知异常 | 创建工单联系工程师。 |
600011 | 获取Token失败 | 切换到其他登录方式。 |
600012 | 预取号失败 | 无。 |
600013 | 运营商维护升级,该功能不可用 | 创建工单联系工程师。 |
600014 | 运营商维护升级,该功能已达最大调用次数 | 创建工单联系工程师。 |
600015 | 接口超时 | 切换到其他登录方式。 |
600017 | App ID、App Key解析失败 | 密钥未设置或者设置错误,请先检查密钥信息,如密钥无问题创建工单联系工程师。 |
600021 | 点击登录时检测到运营商已切换 | 切换到其他登录方式。 |
600023 | 加载⾃定义控件异常 | 检查⾃定义控件添加是否正确。 |
600024 | 终端环境检查⽀持认证 | 无。 |
600025 | 终端检测参数错误 | 检查传⼊参数类型与范围是否正确。 |
600026 | 授权页已加载时不允许调用加速或预取号接口 | 检查是否有授权页拉起后,调用preLogin或者accelerateAuthPage接口的行为不被允许。 |
授权页点击事件响应码:
响应码 | 响应码描述 |
---|---|
700000 | 点击返回,⽤户取消免密登录。 |
700001 | 点击切换按钮,⽤户取消免密登录。 |
700002 | 点击登录按钮事件。 |
700003 | 点击check box事件。 |
700004 | 点击协议富文本文字事件。 |
# 运营商错误码
# 中国移动
返回码 | 返回码描述 |
---|---|
103000 | 成功。 |
102507 | 登录超时(授权页点登录按钮时)。 |
103101 | 请求签名错误。 |
103102 | 包签名或Bundle ID错误。 |
103111 | 网关IP错误或错误的运营商请求。 |
103119 | AppID不存在。 |
103211 | 其他错误,请提工单联系工程师。 |
103412 | 无效的请求有加密方式错误、非JSON格式和空请求等。 |
103414 | 参数校验异常。 |
103511 | 服务器IP白名单校验失败。 |
103811 | Token为空。 |
103902 | 短时间内重复登录,造成script失效。 |
103911 | Token请求过于频繁,10分钟内获取Token且未使用的数量不超过30个。 |
104201 | Token重复校验失败、失效或不存在。 |
105018 | 使用了本机号码校验的Token获取号码,导致Token权限不足。 |
105019 | 应用未授权。 |
105021 | 已达当天取号限额。 |
105302 | AppID不在白名单。 |
105313 | 非法请求。 |
200005 | 用户未授权(READ_PHONE_STATE)。 |
200010 | 无法识别SIM卡或没有SIM卡(Android)。 |
200020 | 用户取消登录。 |
200021 | 数据解析异常。 |
200022 | 无网络。 |
200023 | 请求超时。 |
200024 | 数据网络切换失败。 |
200025 | 位置错误(一般是线程捕获异常、socket、系统未授权移动数据网络权限等,请提工单联系工程师)。 |
200026 | 输入参数错误。 |
200027 | 未开启移动数据网络或网络不稳定。 |
200028 | 网络请求出错。 |
200038 | 异网取号网络请求失败。 |
200039 | 异网取号网关取号失败。 |
200048 | 用户未安装SIM卡。 |
200050 | EOF异常。 |
200061 | 授权页面异常。 |
200064 | 服务端返回数据异常。 |
200072 | CA根证书校验失败。 |
200082 | 服务器繁忙。 |
200086 | ppLocation为空。 |
200087 | 仅用于监听授权页成功拉起。 |
200096 | 当前网络不支持取号。 |
# 中国联通
返回码 | 返回码描述 |
---|---|
0 | 表示请求成功。 |
-10008 | JSON转换失败。 |
1,请求超时 | 请求超时。 |
1,私网IP查找号码失败 | 私网IP查找号码失败。 |
1,私网IP校验错误 | 私网IP校验错误。 |
1,源IP鉴权失败 | 源IP鉴权失败。 |
1,获取鉴权信息失败 | 获取鉴权信息失败。 |
1,获得的手机授权码失败 | 一般是由于请求SDK超时导致的失败。 |
1,网关取号失败 | 网关取号失败。 |
1,网络请求失败 | 网络请求失败。 |
1,验签失败 | 签名校验失败。 |
1,传入code和AppID不匹配 | 传入code和AppID不匹配。 |
1,似乎已断开与互联网的链接 | 网络不稳定导致连接断开。 |
1,此服务器的证书无效 | 连接到不安全的服务器,提工单联系工程师。 |
1,PIP校验不通过 | 提工单联系工程师。 |
1,网关并发连接数受限 | 提工单联系工程师。 |
1,目前不允许数据链接 | 提工单联系工程师。 |
1,无法连接到服务器 | 提工单联系工程师。 |
1,系统内部错误 | 提工单联系工程师。 |
1,取号网关内部错误 | 取号网关内部错误,提工单联系工程师。 |
1,connect address error | 连接地址错误,一般是由于超时导致失败。 |
1,select socket error | 选择socket错误。 |
1,handshake failed | 握手失败。 |
1,decode ret_url fail | URL解码失败。 |
1,connect error | 连接错误。 |
1,read failed | 提工单联系工程师。 |
1,response null | 无响应,提工单联系工程师。 |
1,未知错误 | 提工单联系工程师。 |
2,请求超时 | 接口请求耗时超过timeout设定的值。 |
# 中国电信
返回码 | 返回码描述 |
---|---|
-64 | Permission-denied(无权限访问)。 |
-65 | API-request-rates-Exceed-Limitations(调用接口超限)。 |
-10001 | 取号失败,mdn为空。 |
-10002 | 参数错误。 |
-10003 | 解密失败。 |
-10004 | IP受限。 |
-10005 | 异网取号回调参数异常。 |
-10006 | mdn取号失败,且属于电信网络。 |
-10007 | 重定向到异网取号。 |
-10008 | 超过预设取号阈值。 |
-10009 | 时间戳过期。 |
-10013 | Perator_unsupported,提工单联系工程师。 |
-20005 | Sign-invalid(签名错误)。 |
-8001 | 网络异常,请求失败。 |
-8002 | 请求参数错误。 |
-8003 | 请求超时。 |
-8004 | 移动数据网络未开启。 |
-8010 | 无网络连接(网络错误)。 |
-720001 | Wi-Fi切换4G请求异常。 |
-720002 | Wi-Fi切换4G超时。 |
80000 | 请求超时。 |
80001 | 网络连接失败、网络链接已中断、Invalid argument、目前不允许数据连接。 |
80002 | 响应码错误404。 |
80003 | 网络无连接。 |
80005 | socket超时异常。 |
80007 | IO异常。 |
80008 | No route to host. |
80009 | Nodename nor servname provided, or not known. |
80010 | Socket closed by remote peer. |
80800 | Wi-Fi切换超时。 |
80801 | Wi-Fi切换异常。 |
# IDaaS返回码
状态码 | 错误码 (error_code) | 错误说明 (error_msg) | 处理措施 |
---|---|---|---|
400 | IDAAS.SDK.COMMON.1001 | Parameter {0} cannot be left blank | |
参数 {0} 不能为空 | |||
400 | IDAAS.SDK.COMMON.1002 | The {0} parameter format is incorrect | |
参数 {0} 格式错误 | |||
400 | IDAAS.SDK.COMMON.1003 | Device information is incomplete | |
设备信息不完整 | |||
400 | IDAAS.SDK.COMMON.1004 | Signature decryption error | |
签名解密错误 | |||
400 | IDAAS.SDK.COMMON.1005 | The {0} has failed | |
{0} 已失效 | |||
400 | IDAAS.SDK.COMMON.1006 | The {0} parameter error | |
{0} 参数错误 | |||
400 | IDAAS.SDK.COMMON.1007 | The {0} parameter type error | |
{0}参数类型错误 | |||
500 | IDAAS.SDK.COMMON.1008 | The system is busy. Try again later | |
系统繁忙。稍后再试 | |||
400 | IDAAS.SDK.COMMON.1009 | Unknown authentication configuration | |
未知的认证配置 | |||
400 | IDAAS.SDK.COMMON.1010 | Failed to obtain the enterprise center global configuration | |
获取企业中心全局配置失败 | |||
400 | IDAAS.SDK.COMMON.1011 | Failed to obtain the international area code configuration | |
获取国际区号配置失败 | |||
400 | IDAAS.SDK.COMMON.1012 | The x-client-ID is incorrect and the corresponding application cannot be found | |
X-client-id错误,找不到对应的应用 | |||
400 | IDAAS.SDK.COMMON.1013 | The corresponding user is not found | |
未找到对应的用户 | |||
400 | IDAAS.SDK.COMMON.1014 | Application private key not found | |
未找到应用私钥 | |||
400 | IDAAS.SDK.LOGIN.1001 | Error calling interface {0} | |
调用 {0} 接口出错 | |||
400 | IDAAS.SDK.LOGIN.1002 | User not bound | |
用户未绑定 | |||
400 | IDAAS.SDK.LOGIN.1003 | The user has been locked due to too many unsuccessful login attempts. It will be unlocked in {0} minutes and {1} seconds | |
由于多次登录失败,用户已被锁定。 它将在 {0} 分钟和 {1} 秒内解锁 | |||
400 | IDAAS.SDK.LOGIN.1004 | Failed to obtain the password policy | |
获取密码策略错误 | |||
400 | IDAAS.SDK.LOGIN.1005 | Invalid username or password. Remaining login attempts: {0} | |
无效的用户名或密码。 其余登录尝试次数:{0} | |||
400 | IDAAS.SDK.LOGIN.1006 | Configuration error, unable to find wechat authentication source | |
配置错误,找不到微信认证源 | |||
400 | IDAAS.SDK.LOGIN.1007 | Configuration error, unable to find alipay authentication source | |
配置错误,找不到支付宝认证源 | |||
400 | IDAAS.SDK.LOGIN.1008 | The configuration is incorrect. The one-click login authentication source cannot be found | |
配置错误,无法找到一键登录认证源 | |||
400 | IDAAS.SDK.SMS.1001 | {0} slide base map is not initialized successfully, please check the path | |
{0} 滑动底图未初始化成功,请检查路径 | |||
400 | IDAAS.SDK.SMS.1002 | {0} verification code coordinate resolution failed | |
{0} 验证码坐标解析失败 | |||
400 | IDAAS.SDK.SMS.1003 | {0} verification code coordinate verification fails | |
{0} 验证码坐标校验失败 | |||
400 | IDAAS.SDK.SMS.1004 | The graphic verification code is incorrect | |
图形验证码校验错误 | |||
400 | IDAAS.SDK.SMS.1005 | SMS verification code verification is incorrect | |
短信验证码验证错误 | |||
400 | IDAAS.SDK.SMS.1006 | The email verification code is incorrect | |
邮件验证码验证错误 | |||
400 | IDAAS.SDK.SMS.1007 | Sending scenario does not exist | |
发送场景不存在 | |||
400 | IDAAS.SDK.SMS.1008 | Failed to send the verification code | |
发送验证码失败 | |||
400 | IDAAS.SDK.SOCIAL.1001 | The social account is unbound incorrectly | |
社交账号解绑错误 | |||
400 | IDAAS.SDK.SOCIAL.1002 | The social account has been bound, please unbind it first | |
社交账号已绑定,请先解绑 | |||
400 | IDAAS.SDK.PWD.1001 | The password length is incorrect | |
密码长度错误 | |||
400 | IDAAS.SDK.PWD.1002 | The password cannot be the username | |
密码不能为用户名 | |||
400 | IDAAS.SDK.PWD.1003 | Your password complexity is low | |
你的密码复杂度过低 | |||
400 | IDAAS.SDK.PWD.1004 | The password is weak | |
密码很弱 | |||
400 | IDAAS.SDK.PWD.1005 | The password is used before, cannot be used again | |
该密码已被使用过,不能再次使用 | |||
400 | IDAAS.SDK.PWD.1006 | Password cannot username in reverse order | |
密码不能是用户名的倒序 | |||
400 | IDAAS.SDK.PWD.1007 | The number of repeated password characters exceeded the upper limit | |
密码重复字符数超过限制 | |||
400 | IDAAS.SDK.PWD.1008 | Password cannot contain :username, phone number, email prefix, name in PinYing | |
密码不能包含:用户名、电话号码、邮件前缀、拼音名 | |||
400 | IDAAS.SDK.MFA.1001 | The mobile doesn't match the user | |
手机号和用户不匹配 | |||
400 | IDAAS.SDK.MFA.1002 | The access control policy is incorrect | |
访问控制策略配置错误 | |||
400 | IDAAS.SDK.MFA.1003 | Access control authentication source type conversion error | |
访问控制身份验证源类型转换错误 |