本文为您介绍一键登录H5端JSSDK的集成方法及接口的功能示例。

前提条件

  • 确保您已开通号码认证服务,并成功创建了对应的认证方案
  • 确保您的终端设备已关闭Wi-Fi连接且开启了SIM卡的4G移动数据网络(支持中国联通、中国移动的3G网络,但接口耗时会增加)。

集成JSSDK

您需要在H5页面中集成号码认证服务的JSSDK,并在服务端完成API对接。有以下两种集成JSSDK的方法,您可任选一种。

静态资源引入

登录号码认证产品控制台,在控制台右侧API&SDK标签,单击立即使用,进入API&SDK页面,根据页面提示下载H5端JSSDK,将下载的js文件引入项目目录。
<script type="text/javascript" charset="utf-8" src="./xxx/numberAuth-web-sdk.2.0.5.js"></script>

npm引入

下载npm资源:npm资源
//加载npm资源
npm i aliyun_numberauthsdk_web

功能示例及参数说明

网络类型检查接口(getConnection)

  • 此接口会判断当前用户的网络类型: Wi-Fi、移动数据网络(cellular)、unknown。
    重要 未开启移动数据网络的用户无法通过一键登录完成认证。
  • 提前获取用户的网络类型,拦截使用Wi-Fi网络的用户,及时终止认证流程,节约资源并提升用户的认证体验。
  • 建议认证前调用此接口,对netType为Wi-Fi的用户-提醒关闭W-iFi或者提供其他认证方式,对于netType为unknown和cellular的用户继续一键登录流程。

调用示例

var netType =  phoneNumberServer.getConnection();
// console.log(netType);
// netType的值为 wifi cellular(移动数据网络)unknown(未知)
            

鉴权接口(checkLoginAvailable)

请求参数

参数名称 参数类型是否必填参数说明
accessTokenstring号码认证业务鉴权Token由阿里云对外的getAuthToken接口生成。
jwtTokenstringAPI鉴权Token由阿里云对外的getAuthToken接口生成。
timeoutnumber接口请求超时时间,默认值为10s。
successfunction成功回调。
errorfunction失败回调。

返回参数

参数名称参数说明
code返回的状态码。
  • 返回600000代表请求成功。
  • 其他错误码,请参见返回码说明
requestId请求ID,根据此ID可查询相关日志。
content运营商SDK的返回结果,方便客户定位问题。
msg返回结果的描述。

调用示例

var phoneNumberServer = new PhoneNumberServer();

// 调用之前先去用户服务端获取accessToken和jwtToken
phoneNumberServer.checkLoginAvailable({
    accessToken: 'XXXXXXXXxx',
    jwtToken:'******',
    success:function(res){
        console.log(res);
            if(res.code===600000){
                // 在此调用getLoginToken接口
            }
    },

    error: function(res){
        // 提示用户关闭Wi-Fi或者尝试其他登录方案
    }

});

获取登录Token接口(getLoginToken)

在checkLoginAvailable成功的回调中调用此接口。

请求参数

参数名称参数类型是否必填参数说明
successfunction成功回调。
errorfunction失败回调。
watchfunction授权页状态监听函数。
protocolPageWatchfunction预授权页状态监听函数。
authPageOptionobject配置选项。

authPageOption字段说明

参数名称参数类型是否必填参数说明
mountstring指定挂载节点的ID,默认挂载到body标签。
navTextstring导航栏标题文案,默认值:本机号码登录。
navBackImgstring导航栏返回按钮图片的src链接。
说明 仅全屏模式有返回按钮,此配置仅全屏模式生效。
subtitleHTMLElement|string副标题导航栏下面的说明文案,不传则不显示。
isHideLogoboolean是否隐藏Logo。取值:
  • false(默认值):表示显示。
  • true:表示隐藏。
logoImgstringLogo图片设置,默认值:阿里云Logo。
numberLabelHTMLElement|string手机号码前面的文案或图片,不传则不展示。
btnTextstring按钮文案,默认值:登录。
agreeSymbolstring协议和协议之间链接符号,默认用“和”连接。
privacyVenderIndexnumber运营商协议的位置,默认为2。
  • 0:最前面。
  • 1:中间位置。
  • 2:最后面。
vendorPrivacyPrefixstring设置运营商协议前缀符号,仅支持设置如下字符中的任意一个,如<>、()、《》、【】、『』、[]、()
vendorPrivacySuffixstring设置运营商协议后缀符号,仅支持设置如下字符中的任意一个,如<>、()、《》、【】、『』、[]、()
privacyBeforestring设置开发者隐私条款前置自定义文案。默认:我已阅读并同意。
privacyEndstring设置开发者隐私条款前置自定义文案。
privacyCheckedImgHTMLImageElement默认为圆形勾选,如需自定义可传入需要的图片。
privacyOnestring自定义协议1,格式:['name',url]。
privacyTwostring自定义协议2,格式:['name',url]。
showCustomViewboolean是否展示自定义控件。取值:
  • true:表示展示自定义控件。
  • false:表示不展示自定义控件。
customViewObject添加此属性必须设置showCustomViewtrue,对象形式{element:'自定义节点',style:'自定义样式',js:'自定义交互'}。
isDialogboolean是否弹窗样式。取值:
  • true:表示登录页为弹窗。
  • false:表示登录页为全屏页面。
manualCloseboolean是否手动关闭弹窗/授权页。取值:
  • true:表示登录时需要手动关闭授权页。
  • false:表示登录时自动关闭授权页。
isPrePageTypeboolean协议是否前置。取值:
  • true:协议展示在预授权页面,用户同意协议,点击确认按钮后,跳转至授权页。
  • false:协议不前置。
isShowProtocolDescboolean预授权模式下,授权页弹窗是否展示协议。取值:
  • true:表示展示协议。
  • false:表示不展示协议。
prePageTypeOptionObjectisPrePageType参数为true时,需传入mount。
isShowExtraBtnboolean是否展示其他登录方式的按钮。默认不展示。取值:
  • true:表示展示。
  • false:表示不展示。
extraBtnHTMLElement登录按钮下方的自定义模块,方便用户自定义。

prePageTypeOption预授权页面配置

参数名称参数类型是否必填参数说明
mountHTMLElement|string指定挂载节点的ID,此参数不传或者找不到会直接报错。
btnTextHTMLElement|string按钮文案,默认值:点击登录。
privacyOnestring自定义协议1,格式['name',url]。
privacyTwostring自定义协议2,格式['name',url]。
tipsHTMLElement|string在预授权页面的登录按钮模块,可以加自己的小设计,提高可扩展性。
privacyVenderIndexnumber运营商协议的位置,默认为2。
  • 0:最前面。
  • 1:中间位置。
  • 2:最后面。
vendorPrivacyPrefixstring设置运营商协议前缀符号,仅支持设置如下字符中的任意一个,如<>、()、《》、【】、『』、[]、()
vendorPrivacySuffixstring设置运营商协议后缀符号,仅支持设置如下字符中的任意一个,如<>、()、《》、【】、『』、[]、()
privacyBeforestring设置开发者隐私条款前置自定义文案。默认:我已阅读并同意。
privacyEndstring设置开发者隐私条款前置自定义文案。
privacyCheckedImgHTMLImageElement默认为圆形勾选,如需自定义可传入需要的图片。

返回参数

参数名称参数类型参数说明
codestring返回的状态码。
  • 返回600000代表请求成功。
  • 其他错误码,请参见返回码说明
requestIdstring请求ID,根据此ID可查询相关日志。
spTokenstring运营商一键登录Token。
clearInputfunction调用清空当前所有输入框,将光标置于第一个输入框。
focusOnfunction入参为:1-4,将光标置于入参对应下标的输入框内。
setMessagefunction设置弹出Toast提示框(有默认样式)。入参:
{  
showMessage: boolean, // 是否弹出Toast提示框  
messageContent: string, // 弹出内容  
messageStyle: object, // 自定义弹窗样式  
time: number // 弹出时间ms
}

监听回调说明(watch)

参数名称参数说明
status授权页状态。
  • 1:授权页拉起。
  • 2:点击返回按钮。
  • 3:点击协议。
  • 5:点击登录按钮。
  • 6:获取掩码成功。获取此状态时,需了解当前使用的是哪个运营商网络,在预授权模式中,协议和登录按钮需此时展示。
data监听函数返回的额外数据。

监听回调说明(protocolPageWatch)

参数名称参数说明
status(number)授权页状态。
  • 1:协议前置UI渲染成功。
  • 3:协议前置UI界面,点击查看协议。
  • 5:协议前置UI界面,点击立即登录按钮。
data监听函数返回的额外数据。

data(watch, protocolPageWatch)参数说明

参数名称参数说明
requestId本地调用的唯一ID,根据此ID可查询相关日志。

调用示例

// 调用之前先去用户服务端获取accessToken和jwtToken
phoneNumberServer.getLoginToken({
    authPageOption: {
        navText: '测试',
        subtitle: '', // 副标题
        isHideLogo: false, // logo显示隐藏
        logoImg: 'XXX',
        btnText: '立即登录',
        agreeSymbol: '、',
        privacyOne: ['《中国移动认证服务条款》',''],
        privacyTwo: ['《中国移动认证服务条款》', ''],
        showCustomView: true,
        customView:{
            element: '<div class="btn_box other" onclick="clickEvent()">切换其他登录方式</div>',
            style: '.btn_box.other{background: #fff; color: #f00}',
            js: 'function clickEvent(){alert(666666)}'
        },
        privacyBefore: '我已阅读并同意',
        privacyEnd: '',
        vendorPrivacyPrefix: '《',
        vendorPrivacySuffix: '》',
        privacyVenderIndex: 2,
        isDialog: true, // 是否是弹窗样式
        manualClose: true // 是否手动关闭弹窗/授权页
        isPrePageType: false,
        isShowProtocolDesc: false,
        // prePageTypeOption: {
        //     // mount: '',
        //     privacyOne: ['条款1', 'https://wap.cmpassport.com/resources/html/contract.html'],
        //     privacyTwo: ['条款2', 'https://wap.cmpassport.com/resources/html/contract.html'],
        //     // showCustomView: true,
        //     agreeSymbol: '及',
        //     tips: <div style={{ position: 'absolute', top: '10px', right: '10px', borderRadius: '30%', fontSize: '12px', color: '#fff'}}>tips</div>,
        //     btnText: '',
        // }
},
success: res => {
    console.log(res);
    if(res.code===600000){
        // 拿到spToken去服务端发起token验证
        phoneNumberServer.closeLoginPage(); // 手动关闭授权页时调用关闭页面
        res.clearInput(); // 清空输入框并将光标置于第一个输入框
        res.focusOn(2); // 将光标置于第1-4个输入框

        res.setMessage({  // 设置弹出toast提示框(有默认样式)
            showMessage: true, // 是否弹出Toast提示框
            messageContent: 'test content', // 弹出内容
            messageStyle: {  // 自定义弹窗样式,写入css样式即可
                color: '#fff',
                borderRadius: '8px',
            },
            time: 3000 // 弹出时间/ms,默认3000毫秒
        });
    }
},

    error: res => {
    // 提示用户关闭wifi或者尝试其他登录方案
},

    watch: function(status, data){
    // console.log('-----------------status', status, data);
    // 当status为2时整个流程结束,比如如果按钮有loading状态此处置为false
},

});

authPageOption传入manualClose控制是否手动关闭弹窗,弹窗/授权页状态下调用phoneNumberServer.closeLoginPage关闭授权页面。

var phoneNumberServer = new PhoneNumberServer();

(弹窗/授权页已弹出后)
phoneNumberServer.closeLoginPage(); // 关闭授权页

样式说明

移动授权页样式说明

// 此处可修改导航栏整体样式:字体大小,字体颜色,背景颜色等
.page-type-container .nav {

}

// 此处可修改导航栏返回按钮的样式: 高度、宽度等
.page-type-container .nav .nav-back-icon-img {

}

// 此处可修改导航栏标题样式: 字体大小,颜色等
.page-type-container .nav .nav-title {

}

// 此处可修改logo容器的样式: 宽度 高度,圆角等
.page-type-container .logo {

}

// 此处修改电话号码的样式: 颜色、字体大小等
.page-type-container .number-con {
}

// 此处修改电话号码掩码的样式:宽度、高度、字体颜、色间距等
.page-type-container .number-con input {
}

// 此处修改协议勾选、选中时的颜色
.page-type-container .agreement .checke-1 svg g {
    fill: blue;
}

// 此处修改协议区域的样式: 字体颜色,大小等
.page-type-container .agreement .agree-content {

}

// 此处修改协议名称的样式:颜色大小等
.page-type-container .agreement a {

}
// 此处修改登录按钮的样式:颜色大小背景色等
.page-type-container .submit-btn{

}

授权弹窗样式说明

// 此处可修改标题栏整体样式:字体大小、字体颜色、背景颜色等
.dialog-type-container .nav {

}


// 此处可修改标题样式: 字体大小,颜色等
.dialog-type-container .nav .nav-title {

}

// 此处可修改logo容器的样式: 宽度、高度、圆角等
.dialog-type-container .logo {

}

// 此处修改电话号码的样式: 字体颜色、字体大小等
.dialog-type-container .number-con {
}

// 此处修改电话号码掩码的样式:宽度、高度、字体颜、色间距等
.dialog-type-container .number-con input {
}

// 此处修改协议勾选、选中时的颜色
.dialog-type-container .agreement .checke-1 svg g {
    fill: blue;
}

// 此处修改协议区域的样式: 字体颜色、大小等
.dialog-type-container .agreement .agree-content {

}

// 此处修改协议名称的样式:字体颜色、大小等
.dialog-type-container .agreement a {

}
// 此处修改登录按钮的样式:颜色大小背景色等
.dialog-type-container .submit-btn{

}

预授权模式样式说明

// 按钮样式
div.number-auth-demo .protocol-front-page-container .number-auth-btn-wrap {

  // border-radius: 30px;
  // width: 300px;
  // height: 80px;
  // color: #666;
}

返回码说明

返回码说明
600000成功返回code。
600004方案号不存在。
600009无法判断运营商。
600010未知异常。
600011获取Token失败。
600013运营商维护升级,该功能不可用。
600014运营商维护升级,该功能调用次数已达上限。
600015调用接口超时。
600025接入方身份信息校验失败。
600028入参错误(accessToken,jwtToken)。
除阿里云SDK返回码外,运营商错误码详情请参见运营商SDK错误码