最近使用云通信号码认证服务,完成了H5端和APP端手机号码一键登录功能,由于文档过于繁琐,缺少部分细节,且官方SDK还存在bug,所以还是记录一下整个功能的实现过程。
前端jssdk版本v2.0.2
后端使用PHP,由于项目过于老旧,所以使用了V1.0版本,具体版本号为1.8.109,仅要求PHP5.5以上版本
阿里云各PHP-SDK直通车:https://packagist.org/packages/alibabacloud/
打开后输入所需服务的sdk名称进行搜索,比如号码认证服务的sdk名称为:dypnsapi,点击搜索到的结果,打开即可看到现在的所有版本号,composer这些版本即可。
ps:为什么要进行这一步,因为在阿里云某些服务的文档中,给出的composer版本可能已不存在,通俗的说就是文档有bug,所以当composer报错sdk某个版本的包文件不存在时,就需要我们手动查找,若composer一切顺利,请忽略上面这些。
下面继续回到号码认真服务,首先登录阿里云管理平台,找到号码认证服务,在认证方案管理页面中,添加认证方案,必须完成此步骤,否则拿不到H5端获取spToken时所需的AccessToken和JwtToken。
IOS和Android也要创建认证方案,添加所需的参数,获取秘钥。
phpsdk文档地址:https://api.aliyun.com/document/Dypnsapi/2017-05-25/GetAuthToken
phpsdk示例地址:https://api.aliyun.com/api/Dypnsapi/2017-05-25/GetAuthToken?sdkStyle=old&lang=PHP
H5一键登录文档地址:https://help.aliyun.com/document_detail/465280.html
H5号码校验文档地址:https://help.aliyun.com/document_detail/189796.html
H5一键登录过程:
1、打开页面,异步请求后端,通过php-sdk获取到AccessToken和JwtToken,返回给前端;
2、拿到AccessToken和JwtToken后,执行jssdk的checkLoginAvailable方法进行鉴权;
3、鉴权成功,执行jssdk的getLoginToken获取spToken,并拉起云通信的登录页面;
4、拿到spToken后,传给后端,通过php-sdk获取到用户手机号码;
H5号码校验过程:
1、打开页面,异步请求后端,通过php-sdk获取到AccessToken和JwtToken,返回给前端;
2、拿到AccessToken和JwtToken后,执行jssdk的checkAuthAvailable方法进行鉴权;
3、鉴权成功,通过jssdk的getVerifyToken方法,获取本机号码校验spToken;
4、前三步是打开页面就要执行的,然后是用户输入手机号码,将号码和spToken一起传给后端,通过php-sdk验证合法性
校验成功返回参数示例:
校验失败返回参数示例:
APP端实现方法:
在APP中使用云通信号码认证服务SDK,可以拿到手机号码的前三位和后四位,并非完整手机号,只能用做页面展示,例如:138****3838,想拿到整个手机号码,需通过在App端SDK获取到登录AccessToken,传给后端PHP,再通过phpsdk获取手机号。
代码展示:
代码略多,文章中不多太多赘述,贴出代码结合备注理解。
后端PHP代码:
补充APP端获取手机号代码:
前端JS代码:
接口路径可忽略,实际使用中换成正式路径,下面提供demo,可用电脑浏览器下载
下载地址:dypnsapi