手机号认证接入

前提条件

  1. 请先完成阿里云账号注册、实名认证、开通安全认证创建应用

  2. 请完成获取阿里云访问密钥;

  3. 请确保使用的应用,已经勾选了“手机号认证”的认证方式,请查看修改应用认证方式。

本机号码登录

本机号码登录接口,用于查询移动端设备的手机号码。

请求参数

名称

类型

必填

示例值

描述

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

状态码。

  • 当 Success=true 时,Code=Operation.Success

  • 当 Success=false 时,Code的值,请参见下方错误码

Message

String

Opreation.Success

具体的描述信息,当 Success=false 时,会给出Code的对应的具体描述信息

RequestId

String

1C0EE50A-B3BB-42FD-AB59-E3FE88976982

请求ID

Data

String

操作成功时,Data中的JSON字符串包含一个字段:

  • phoneNumber: 字符串:当前设备的手机号码

操作失败时;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

状态码。

  • 当 Success=true 时,Code=Operation.Success

  • 当 Success=false 时,Code的值,请参见下方错误码

Message

String

Opreation.Success

具体的描述信息,当 Success=false 时,会给出Code的对应的具体描述信息

RequestId

String

1C0EE50A-B3BB-42FD-AB59-E3FE88976982

请求ID

Data

String

操作成功时,Data中的JSON字符串包含两个字段:

  • verifyId:字符串:本次认证的业务流水号

  • verifyResult:字符串:PASS代表校验成功,REJECT代表失败

操作失败时,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>
阿里云首页 安全认证 相关技术圈