手机号认证接入

前提条件

  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>idaas_doraemon20210520</artifactId>
   <version>1.0.0</version>
  </dependency>

获取或校验号码的示例代码:

import com.alibaba.fastjson.JSONObject;
import com.aliyun.idaas_doraemon20210520.Client;
import com.aliyun.idaas_doraemon20210520.models.ServiceInvokeRequest;
import com.aliyun.idaas_doraemon20210520.models.ServiceInvokeResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Sample {

    /**
     * 使用AK&SK初始化账号Client
     *
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    public static Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        Config config = new Config()
                // 您的AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 您的AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        config.setEndpoint("idaas-doraemon.aliyuncs.com");
        // 访问的域名
        return new Client(config);
    }

    public static void main(String[] args_) throws Exception {
        // 本地号码登录
        obtainPhoneNumber();
        // 本地号码验证
        verifyPhoneNumber();
    }

    public static void obtainPhoneNumber() throws Exception {
        Client client = Sample.createClient("Your AccessKey", "Your AccessSecret");
        // mobileExtendParamsJson     的值 需要使用安全认证服移动端SDK获取
        String mobileExtendParamsJson = "eyJhcHBJZCI6ImNv.............zaW9uIjoiMS4wIn0=";
        // mobileExtendParamsJsonSign 的值 需要使用安全认证服移动端SDK获取
        String sign = "8d38fe78007a23b4a756cfb73bf2db6d8d51ff857277a538828a16aa8af84c7a";
        ServiceInvokeRequest request = new ServiceInvokeRequest()
                .setApplicationExternalId("A00000001")
                .setServiceCode("PHONE_VERIFICATION")
                .setDoraemonAction("ObtainPhoneNumber")
                .setMobileExtendParamsJson(mobileExtendParamsJson)
                .setMobileExtendParamsJsonSign(sign);
        try {
            ServiceInvokeResponse response = client.serviceInvoke(request);
            System.out.println(response.body.data);
        } 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********");
        Client client = Sample.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()
                .setApplicationExternalId("A00000001")
                .setServiceCode("PHONE_VERIFICATION")
                .setDoraemonAction("VerifyPhoneNumber")
                // mobileExtendParamsJson     的值 需要使用安全认证服移动端SDK获取
                .setMobileExtendParamsJson(mobileExtendParamsJson)
                // mobileExtendParamsJsonSign 的值 需要使用安全认证服移动端SDK获取
                .setMobileExtendParamsJsonSign(sign)
                .setServerExtendParamsJson(serverExtendParamsJson);
        try {
            ServiceInvokeResponse response = client.serviceInvoke(request);
            System.out.println(response.body.data);
        } catch (TeaException e) {
            //根据 e.getCode() 判断错误原因
            System.out.println(e.getCode());
        }
    }

}

示例代码的maven依赖

<dependency>
           <groupId>com.aliyun</groupId>
           <artifactId>idaas_doraemon20210520</artifactId>
           <version>1.0.0</version>
        </dependency>
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.70</version>
</dependency>