手机号码校验-SDK方式

1 通过Android SDK调用

1.1 导入jar包

(1) 将jar包导入到libs目录下:

sdk-1.jpg

(2) 在build.gradle配置jar依赖:

dependencies {

                                implementation fileTree(include: ['*.jar'], dir: 'libs')

                            }

1.2 配置权限清单

(1) 在AndroidManifest.xml配置权限:

<uses-permission android:name="android.permission.INTERNET" />

                            <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

                            <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

                            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

                            <uses-permission android:name="android.permission.WRITE_SETTINGS" />

(2) 权限配置说明:

权限用途
INTERNET允许应用程序联网
CHANGE_NETWORK_STATE允许程序改变网络连接状态
ACCESS_WIFI_STATE允许程序访问WiFi网络状态信息
ACCESS_NETWORK_STATE允许程序访问联网状态,区分用户设备是移动网络或WiFi
WRITE_SETTINGS允许读写系统设置项

1.3 配置混淆规则

在混淆配置文件末尾添加如下:

-keep class cn.com.chinatelecom.gateway.lib.** { *; }

1.4 Android SDK调用

(1) 根据Android SDK接入指南接入SDK,完成SDK的导入,配置等准备工作。

(2) 创建对象并调用初始化接口 init。

【接口说明】

如果要设置超时时间和Log输出,应该在调用预授权接口之前,先调用初始化方法:

CtAuth.init(connTimeout ,readTimeout ,totalTimeout,TraceLoggerImpI)

【参数说明】

参数名参数类型参数说明
connTimeoutintHttp连接超时时间 (默认3000毫秒)
readTimeoutinthttp读取超时时间(默认3000毫秒)
totalTimeoutint请求任务总的超时时间在指定时间未完成预授权请求,则强制停止任务(默认10000毫秒)
traceLoggerImpl(可空)TraceLoggerLog处理类实例(可传null),SDK不直接打印Exception堆栈信息和关键日志,由接入方实现TraceLogger接口打印或上报日志。

【相应数据】

  无

(3) 调用获得用户手机授权码接口requestPreMobile。

【接口说明】

调用预授权接口获取AccessCode,通过AccessCode进行相关业务请求(校验)。

CtAuth.requestPreMobile(context,appId,appSecret,bussinessType,preCodeListener)

【参数说明】

参数名参数类型参数说明
contextContext上下文环境
appIdString天翼账号开放平台分配的appId
appSecretString天翼账号开放平台分配的appSecret
bussinessTypeString业务类型,传入”jy”
preCodeListenerPreCodeListener回调接口,在onResult(String result)方法返回预授权接口的响应数据

【响应数据】

请求结果通过PreCodeListener的回调方法返回, result为json格式的字符串。返回结果解析:

result:返回参数结果码,如0表示成功,详细参考错误码定义;

msg: 结果码对应详细说明;

data:为json串,参数说明见下表

参数名参数类型参数含义参数说明
accessCodeString授权码天翼账号授权码,时效性1分钟
operatorTypeString运营商标识CT电信,CU联通,CM移动,UN其他
expiredTimeIntcode失效时间表示该code的有效时间,时间单位为s

【调用示例】

public void requestPreMobile(View view) {

                                CtAuth.init(connTimeout ,readTimeout , totalTimeout ,new TraceLoggerImpl());

                                CtAuth.requestPreMobile(MainActivity.this ,APPID, APPSECRET, "jy" ,preCodeListener);

                            }

                            PreCodeListener preCodeListener = new PreCodeListener(){

                                @Override

                                public void onResult(String result) {

                                    parseAccessCode(result);

                                    mResultTv.setText("返回结果:\n"+result);

                                }

                            };

                            private void parseAccessCode(String result){

                                try {

                                    JSONObject jsonObject = new JSONObject(result);

                                    int code = jsonObject.optInt("result");

                                    JSONObject dataObj = jsonObject.optJSONObject("data");

                                    if(code == 0 && dataObj != null){

                                        accessCode = dataObj.optString("accessCode");

                                        mAccessCodeTv.setText("AccessCode:" +accessCode );

                                        //dataObj.optString("");

                                    }

                                } catch (JSONException e) {

                                    e.printStackTrace();

                                }

                            }

2 通过iOS SDK调用

2.1 导入Framework

(1) 将EAccountSDK文件夹(包括EAccountSDKNetWork.framework)复制到自己的文件夹目录下;

(2) 在工程中添加EAccountSDK文件(在工程名上点击右键弹出菜单后选择“Add Files to ‘xxxxxx’” 其中‘xxxxxx’为你的工程名字,如图所示);

sdk-2.jpg

(3) 弹出的窗口选择EAccountSDKNetwork.framework文件,在选项“Copy items into destination group’s folder(if needed)”打钩,务必记得添加目标项目“Add to targets”选择你的目标工程,最后点击”Add”;

(4) 查询工程是否添加了EAccountSDKNewwork.framework文件,(点击工程项目,点击目标TARGETS,选择Build Phases,展开Link Binary With Libraries,查看是否存在EAccountSDKNetwork.framework文件,具体操作如图。)

sdk-3.jpg

如果工程没有添加EAccountSDKNetwork.framework文件则需要手动添加(点击”+”按钮,弹出选择框,选择“Add Other                        ...”按钮,在弹出的选择文件中,选择EAccountSDKNetwork.framework,点击“Open”按钮)。

sdk-4.jpg

(1) 增加动态库

CoreTelephony.framework

                            MobileCoreServices.framework

                            SystemConfiguration.framework

                            CFNetwork.framework

                            libsqlite3.tbd

                            libz.tbd

                            Security.framework

2.2 动态库编译配置

在工程中引入静态库后,需要在编译时添加-ObjC编译选项,避免静态库中加载不完全造成程序崩溃。(具体方法:点击TARGETS,点击“Build Settings”,搜索框内搜索Other Linker Flags,在“Other Linker Flags”选项后添加”-ObjC”,如图:

sdk-5.jpg

注意:如果你的Other Linker Flages已经有值也就是已经之前导入过其他的库文件,那么建议用以下方法引入静态库(添加-force_load和EAccountSDKNetwork.framework文件所在的路径,请根据自己文件的实际路径进行设置,如图:

sdk-7.jpg

2.3 iOS SDK 调用

iOS SDK调用流程如下:

(1) 根据iOS SDK接入指南接入SDK,完成SDK的导入,配置等准备工作;

(2) 配置网络权限,EAccountSDKNetwork.framework等动态库文件;

(3) 调用初始化接口;

【调用示例】

[EAccountSDK initWithSelfKey:kAppKey appSecret:kAppSecret]

【请求参数】

参数名类型必填说明
appKeyString向天翼账号平台申请的应用ID
appSecretString向天翼账号平台申请的应用密钥

(4) 调用获取授权码接口。

【调用示例】

[EAccountSDK getMobileCodeWithBussinessType:@“jy”

                                timeoutInterval:3

                                    completion: ^(NSDictionary * _Nonnull resultDic) {

                                    //成功

                                } failure:^(NSError * _Nonnull error) {

                                    //失败

                            }];

【请求参数】

参数名类型字段含义说明
apiTimeoutIntervalNSTimeInterval接口超时时间传0或者小于0的数,则默认为3s
bussinessTypeNSString业务类型业务类型,固定填写“jy”
completionblock成功的回调代码块成功的回调代码块
failueblock失败的回调,失败有两种情况,根据error.code来判断失败的回调,失败有两种情况,根据error.code来判断

【响应参数】

返回结果resultDic为NSDictnory,格式说明:

参数名类型字段含义说明
resultint结果码返回参数结果码,0表示成功,详细参考错误码定义(2.7)
msgString结果说明结果码对应详细说明
dataString响应数据json格式的响应数据
accessCodeString授权码天翼账号授权码,默认时效性1分钟
operatorTypeString运营商标识CT电信,CU联通,CM移动,UN其他
expiredTimeintcode失效时间表示该accessCode的有效时间,时间单位为s
numberString脱敏号码当前上网卡的脱敏号码

3 合作方平台调用手机号校验接口

在调用预授权接口,结果为认证成功后,第二步是合作方平台调用服务端手机号校验接口,获得校验结果。调用获取手机号码接口需要传入第一步获取的授权码。

【接口定义】

接口名称verifyinfo
接口描述验证用户信息接口
承载协议HTTPS
加密类型XXTEA、RSA
承载网络公网
请求方式POST/GET
数据格式返回数据:json格式
请求ContentTypeapplication/x-www-form-urlencoded;charset=UTF-8
接口URLhttps://open.e.189.cn/auth/verifyinfo.do
标识类型必填字段含义说明
appIdString应用ID开发者在注册应用的时候由天翼账号开放平台分发的接入方appId
timeStampLong时间戳毫秒
formatString返回格式目前仅支持json和jsonp格式
signString签名

加密算法如下:

sign=RSA(appId+format+params+timeStamp,RSA_Private_key)

1、需要注意参数拼接key升序排序。

2、RSA_Private_key对接应用的RSA私钥。

3、接入方需要在开发平台配置自身的RSA公钥,用于访问接口时平台侧验签

paramsStringXXTea加密结果

params= XXTea((accessCode=value1&mobile=value2&algorithm=MD5), appSecret)

1、appSecret为应用密钥,申请时天翼账号平台分配

2、参数拼接无顺序要求。

【params字段构成说明】

标识类型必填说明
accessCodeString访问令牌
mobileString待校验手机号码
algorithmString

号码加密方式

可传值 MD5 和“SHA256”和“SM3

明文不需传该参数


【响应参数】

标识类型含义说明
resultString响应结果码0表示取号成功,非0表示失败
msgString返回结果描述结果描述与结果码result相对应
dataString加密数据

1、data采用接入方的RSA公钥加密,具体见data解密后数据结构;

2、data使用RSA私钥进行RSA解密。

【data字段解密后说明】

标识类型说明
isVerifyString验证结果  0:一致,1:不一致,2:无法判断

示例


ü 请求

https://open.e.189.cn/auth/verifyinfo.do?appId=8134110178&clientType=3&format=json&sign=9122E960EB1BF6A67D7429404233C3FDA01B6A2F&timeStamp=175868425871&params=XXXXX


ü  响应

Json示例:

{

    "result": 0,

"msg": "操作成功",

"data":"446a47c3b601cd41dc1afe43e926c2ee"

}

data解密后:

{

      "isVerfiy ": 0

}          }];


4 计费标准

(1) 合作方平台调用手机号校验接口,成功返回匹配验证结果时(返回匹配或不匹配)计费。

(2) 按照状态码返回值的情况下计费,详见下表。除此之外的其他状态码值,我们承诺不收取任何费用。计费口径:verifyinfo接口,result=0 且 isVerify=0或1。

字段标识字段含义说明
result操作结果返回码0 表示操作成功
isVerify验证结果:
0:一致
1:不一致
2:无法判断
0 和 1:计费
2:不计费

(3) 具体服务价格可向商务人员咨询。

(4) SDK及demo下载: https://id.189.cn/api?initialSrc=/html/api_detail_475.html

(5) 附录及常见问题:

    1) SDK错误码定义

错误码含义
0请求成功
-64permission-denied(无权限访问)
-65API-request-rates-Exceed-Limitations(调用接口超限)
-10001授权失败
-10002参数错误
-10003解密失败
-10004ip受限
-10005异网授权回调参数异常
-10006Mdn授权失败,且属于电信网络
-10007重定向到异网授权
-10008超过预授权阈值
-10009时间戳过期
-20005sign-invalid(签名错误)

Android自定义错误码

错误码含义
-8001请求网络异常
-8002请求参数异常
-8003请先初始化SDK
-8004移动网络未开启
-8100请求网络异常,请求失败
-720001切换异常
-720002切换异常超时

客户端类型详见 《客户端类型》

    2) Android对接常见问题

Q:返回{"msg":"sign-invalid","result":-20005}
A: 签名错误,确保AppId和AppSceret是在天翼账号平台申请成功。
Q:permission-denied(无权限访问)
A:确保appId是在天翼账号平台开通权限。

    3) iOS对接常见问题

Q:返回{"msg":"sign-invalid","result":-20005}
A:签名错误,确保AppId和AppSceret是在天翼账号平台申请成功。
Q:permission-denied(无权限访问)
A:确保AppId是在天翼账号平台开通权限。