手机号认证接入
前提条件
请完成获取阿里云访问密钥;
请确保使用的应用,已经勾选了“手机号认证”的认证方式,请查看修改应用认证方式。
本机号码登录
本机号码登录接口,用于查询移动端设备的手机号码。
请求参数
名称 |
类型 |
必填 |
示例值 |
描述 |
ApplicationExternalId |
String |
是 |
A0000001 |
应用外部ID,该字段在创建应用时指定,在应用详情页中查看 |
ServiceCode |
String |
是 |
PHONE_VERIFICATION |
认证方式标识,调用本机号码校验接口时,固定值为:PHONE_VERIFICATION |
DoraemonAction |
String |
是 |
ObtainPhoneNumber |
认证类型标识,调用本机号码校验接口时,固定值为:ObtainPhoneNumber |
MobileExtendParamsJson |
String |
是 |
通过调用移动端SDK生成的数据,Base64编码的JSON数据;iOS SDK 接入;Android SDK 接入 |
|
MobileExtendParamsJsonSign |
String |
是 |
5724badc40b93c1748803611abd591832e2f029979f0d46f0eeef42360dad5cb |
通过调用移动端SDK生成的应用签名数据,十六进制编码字符串 |
ServerExtendParamsJson |
String |
否 |
为空 |
服务端参数,本机号码登录接口,无需传递该参数 |
XClientIP |
String |
否 |
10.11.100.10 |
移动端真实IP,建议传递该字段,安全认证服务会基于该字段进行智能安全风控检测 |
返回数据
名称 |
类型 |
示例值 |
描述 |
Success |
boolean |
true |
操作结果,true 代表成功,false 代表失败 |
Code |
String |
Opreation.Success |
状态码。
|
Message |
String |
Opreation.Success |
具体的描述信息,当 Success=false 时,会给出Code的对应的具体描述信息 |
RequestId |
String |
1C0EE50A-B3BB-42FD-AB59-E3FE88976982 |
请求ID |
Data |
String |
操作成功时,Data中的JSON字符串包含一个字段:
操作失败时;Data字段为空 |
请求示例
请求方式:POST
https://idaas-doraemon.aliyuncs.com/?Action=ServiceInvoke
&Version=2021-05-20
&ApplicationExternalId=A0000001
&ServiceCode=PHONE_VERIFICATION
&DoraemonAction=ObtainPhoneNumber
&MobileExtendParamsJson=eyJhcHBJ...biI6IjEuMCJ9
&MobileExtendParamsJsonSign=5724badc40b...6f0eeef42360dad5cb
&<公共请求参数>
正常返回示例 -本机号码登录获取手机号成功
{
"Success": true,
"Code": "Operation.Success",
"Message": "Operation.Success",
"RequestId": "337848D2-FF8A-4EDD-BD4D-1B9BC80E58B6",
"Data": "{\"phoneNumber\":\"186*********\"}"
}
错误返回示例 - 请求参数中缺少认证方式标识
{
"Success": false,
"Code": "Params.Blank",
"Message": "Params.Blank.APIInvokeParams.ServiceCode",
"RequestId": "1C0EE50A-B3BB-42FD-AB59-E3FE88976982",
"Data":null
}
本机号码校验
本机号码校验接口,用于判断输入的手机号码与移动设备的真实号码是否一致。
请求参数
名称 |
类型 |
必填 |
示例值 |
描述 |
ApplicationExternalId |
String |
是 |
A0000001 |
应用外部ID,该字段在创建应用时指定,在应用详情页中查看 |
ServiceCode |
String |
是 |
PHONE_VERIFICATION |
认证方式标识,调用本机号码校验接口时,固定值为:PHONE_VERIFICATION |
DoraemonAction |
String |
是 |
VerifyPhoneNumber |
认证类型标识,调用本机号码校验接口时,固定值为:VerifyPhoneNumber |
MobileExtendParamsJson |
String |
是 |
通过调用移动端SDK生成的数据,Base64编码的JSON数据;iOS SDK 接入;Android SDK 接入 |
|
MobileExtendParamsJsonSign |
String |
是 |
5724badc40b93c1748803611abd591832e2f029979f0d46f0eeef42360dad5cb |
通过调用移动端SDK生成的应用签名数据,十六进制编码字符串 |
ServerExtendParamsJson |
String |
是 |
eyJwaG9uZU51bWJlciI6IjAwMDAwMDAwMDAwIn0= |
服务端参数,Base64编码的JSON格式字符串,调用本机号码校验接口时,JSON中必须包含 phoneNumber 属性,{"phoneNumber":"11位手机号码"} |
XClientIP |
String |
否 |
10.11.100.10 |
移动端真实IP,建议传递该字段,安全认证服务会基于该字段进行智能安全风控检测 |
返回数据
名称 |
类型 |
示例值 |
描述 |
Success |
boolean |
true |
操作结果,true 代表成功,false 代表失败 |
Code |
String |
Opreation.Success |
状态码。
|
Message |
String |
Opreation.Success |
具体的描述信息,当 Success=false 时,会给出Code的对应的具体描述信息 |
RequestId |
String |
1C0EE50A-B3BB-42FD-AB59-E3FE88976982 |
请求ID |
Data |
String |
操作成功时,Data中的JSON字符串包含两个字段:
操作失败时,Data字段为空 |
请求示例
请求方式:POST
https://idaas-doraemon.aliyuncs.com/?Action=ServiceInvoke
&Version=2021-05-20
&ApplicationExternalId=A0000001
&ServiceCode=PHONE_VERIFICATION
&DoraemonAction=ObtainPhoneNumber
&MobileExtendParamsJson=eyJhcHBJ...biI6IjEuMCJ9
&MobileExtendParamsJsonSign=5724badc40b...6f0eeef42360dad5cb
&ServerExtendParamsJson=eyJwaG9uZU51bWJlciI6IjE4NioqKioqKioqIn0=
&<公共请求参数>
正常返回示例 -本机号码认证通过
{
"Success": true,
"Code": "Operation.Success",
"Message": "Operation.Success",
"RequestId": "337848D2-FF8A-4EDD-BD4D-1B9BC80E58B6",
"Data": "{\"verifyId\":\"379816625110775313\",\"verifyResult\":\"PASS\"}"
}
正常返回示例 -本机号码认证不通过
{
"Success": true,
"Code": "Operation.Success",
"Message": "Operation.Success",
"RequestId": "337848D2-FF8A-4EDD-BD4D-1B9BC80E58B6",
"Data": "{\"verifyId\":\"379816625110775313\",\"verifyResult\":\"REJECT\"}"
}
错误返回示例 - 请求参数中缺少认证方式标识
{
"Success": false,
"Code": "Params.Blank",
"Message": "Params.Blank.APIInvokeParams.ServiceCode",
"RequestId": "1C0EE50A-B3BB-42FD-AB59-E3FE88976982",
"Data":null
}
代码示例(Java)
需要在一个JAVA的MAVEN 项目中引入服务端SDK包, 坐标如下。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-idaas-doraemon</artifactId>
<version>1.2.4</version>
</dependency>
获取或校验号码的示例代码:
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.idaas_doraemon.model.v20210520.ServiceInvokeRequest;
import com.aliyuncs.idaas_doraemon.model.v20210520.ServiceInvokeResponse;
import com.aliyuncs.profile.DefaultProfile;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class IDaaSAuthSample {
/**
* 使用AK&SK初始化账号Client
*
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static IAcsClient createClient(String accessKeyId, String accessKeySecret) throws Exception {
DefaultProfile profile = DefaultProfile.getProfile(
"cn-hangzhou",
accessKeyId,
accessKeySecret);
// addEndpoint
DefaultProfile.addEndpoint("cn-hangzhou",
"idaas-doraemon",
"idaas-doraemon.aliyuncs.com");
// 访问的域名
return new DefaultAcsClient(profile);
}
public static void main(String[] args_) throws Exception {
// 本地号码登录
obtainPhoneNumber();
// 本地号码验证
verifyPhoneNumber();
}
public static void obtainPhoneNumber() throws Exception {
IAcsClient client = IDaaSAuthSample.createClient("Your AccessKey", "Your AccessSecret");
// mobileExtendParamsJson 的值 需要使用安全认证服移动端SDK获取
String mobileExtendParamsJson = "eyJhcHBJZCI6ImNv.............zaW9uIjoiMS4wIn0=";
// mobileExtendParamsJsonSign 的值 需要使用安全认证服移动端SDK获取
String sign = "8d38fe78007a23b4a756cfb73bf2db6d8d51ff857277a538828a16aa8af84c7a";
ServiceInvokeRequest request = new ServiceInvokeRequest();
request.setApplicationExternalId("A00000001");
request.setServiceCode("PHONE_VERIFICATION");
request.setDoraemonAction("ObtainPhoneNumber");
request.setMobileExtendParamsJson(mobileExtendParamsJson);
request.setMobileExtendParamsJsonSign(sign);
try {
ServiceInvokeResponse response = client.getAcsResponse(request);
System.out.println(response.getData());
} catch (TeaException e) {
//根据 e.getCode() 判断错误原因
System.out.println(e.getCode());
}
}
public static void verifyPhoneNumber() throws Exception {
JSONObject json = new JSONObject();
// 请换成真实的 11位手机号码
json.put("phoneNumber", "186********");
IAcsClient client = IDaaSAuthSample.createClient("Your AccessKey", "Your AccessSecret");
byte[] jsonBytes = json.toJSONString().getBytes(StandardCharsets.UTF_8);
String serverExtendParamsJson = Base64.getEncoder().encodeToString(jsonBytes);
// mobileExtendParamsJson 的值 需要使用安全认证服移动端SDK获取
String mobileExtendParamsJson = "eyJhcHBJZCI6ImNv.............zaW9uIjoiMS4wIn0=";
// mobileExtendParamsJsonSign 的值 需要使用安全认证服移动端SDK获取
String sign = "8d38fe78007a23b4a756cfb73bf2db6d8d51ff857277a538828a16aa8af84c7a";
ServiceInvokeRequest request = new ServiceInvokeRequest();
request.setApplicationExternalId("A00000001");
request.setServiceCode("PHONE_VERIFICATION");
request.setDoraemonAction("VerifyPhoneNumber");
// mobileExtendParamsJson 的值 需要使用安全认证服移动端SDK获取
request.setMobileExtendParamsJson(mobileExtendParamsJson);
// mobileExtendParamsJsonSign 的值 需要使用安全认证服移动端SDK获取
request.setMobileExtendParamsJsonSign(sign);
request.setServerExtendParamsJson(serverExtendParamsJson);
try {
ServiceInvokeResponse response = client.getAcsResponse(request);
System.out.println(response.getData());
} catch (TeaException e) {
//根据 e.getCode() 判断错误原因
System.out.println(e.getCode());
}
}
}
示例代码的maven依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-idaas-doraemon</artifactId>
<version>1.2.4</version>
</dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<optional>true</optional>
<version>[4.4.9,5.0.0)</version>
</dependency>