# 开发指南
> 注意:暂只支持连接云端,不支持连接本地运行
## 接口说明@introduce
通过对比权威数据源,对用户上传的姓名、身份证号和手机号进行验证,校验此三要素是否一致
- 支持携号转网,支持阿里宝卡、腾讯王卡等互联网公司与运营合作推出的手卡
- 只支持移动,电信,联通下发的手机主卡,广电号暂不支持
- 不支持物联网卡、虚拟运营商卡(如阿里小号)
## 添加 uni-cloud-verify 扩展库依赖@extend
在需要调用此API的云函数或云对象右键,添加依赖
![](https://web-ext-storage.dcloud.net.cn/unicloud/uni-rpia/b866f119-1427-49ba-b3a1-7915cebd5624.png)
勾选 uni-cloud-verify 扩展库依赖
![](https://web-ext-storage.dcloud.net.cn/unicloud/uni-rpia/665b7307-7506-42ad-ad3f-6c7c1d59569f.png)
## API@api
### 响应公共字段@publicreturn
|字段 |类型 |说明 |
|:-: |:-: |:- |
|errCode|Number |为0代表请求成功,其他均为请求失败,注意,请求成功不代表验证通过 |
|errMsg |String |请求失败的错误描述 |
|data |Object | 请求成功时,服务端返回的数据 |
### 获取uni认证管理对象@getuniverifymanager
云端在操作前,需要先获取 uniVerifyManager 对象实例,然后再通过 uniVerifyManager.xxx 调用对应的API
**云端代码**
```js
const uniVerifyManager = uniCloud.getUniVerifyManager({
provider: "univerify"
});
```
**请求参数**
|参数名 |类型 |必填 |默认值 |说明 |
|:-: |:-: |:-: |:-: |:- |
|provider |String |是 |- |必填,当前固定填写 univerify 即可 |
### 获取手机号二要素认证结果@mobile2eleverify
接口名:mobile2EleVerify
你可以在调用 extStorageManager.mobile2EleVerify 前执行一些自己的业务逻辑,判断用户是否有权限执行此API等等
**云端代码**
```js
const uniVerifyManager = uniCloud.getUniVerifyManager({
provider: "univerify"
});
let verifyRes = await uniVerifyManager.mobile2EleVerify({
realName: "姓名",
mobile: "手机号",
});
console.log('认证结果: ', verifyRes.data);
```
**请求参数**
|参数名 |类型 |必填 |默认值 |说明 |
|:- |:-: |:-: |:-: |:- |
|realName |String |是 |- |姓名 |
|mobile |String |是 |- |手机号 |
**响应参数**
响应字段如下,响应通用字段已省略,详细见[响应公共字段](#publicreturn)
|名称 |类型 |必须返回 |描述 |
|:- |:-: |:-: |:- |
|status |Number |是 |认证结果,1-通过 2-不通过 3-查无结果 0-待定 |
|reasonType |Number |否 |原因详情:
2-认证不一致
3-查无此手机号
4-认证信息格式错误
7-结果获取失败,请重试 |
|logId |String |是 |本次请求日志id,可以根据该标识在控制台查询结果 |
|isPayed |Number |是 |本次请求是否收费标识,1代表收费,0代表不收费 |
|mobileType |String |是 |运营商类型:1-移动,2-联通,3- 电信,9,-未知 |
**响应体示例**
```json
{
"errCode": 0,
"errMsg": "",
"data": {
"status": 1,
"reasonType": 1,
"logId": "9f9def8638c74506b3f5ef17f893c8b9",
"isPayed": 1,
"mobileType": "3",
"note": ""
}
}
```
### 获取手机号三要素(简版)认证结果@mobile3eleverify
接口名:mobile3EleVerify
你可以在调用 extStorageManager.mobile3EleVerify 前执行一些自己的业务逻辑,判断用户是否有权限执行此API等等
**云端代码**
```js
const uniVerifyManager = uniCloud.getUniVerifyManager({
provider: "univerify"
});
let verifyRes = await uniVerifyManager.mobile3EleVerify({
realName: "姓名",
idCard: "身份证",
mobile: "手机号",
});
console.log('认证结果: ', verifyRes.data);
```
**请求参数**
|参数名 |类型 |必填 |默认值 |说明 |
|:- |:-: |:-: |:-: |:- |
|realName |String |是 |- |姓名 |
|idCard |String |是 |- |身份证 |
|mobile |String |是 |- |手机号 |
**响应参数**
响应字段如下,响应通用字段已省略,详细见[响应公共字段](#publicreturn)
|名称 |类型 |必须返回 |描述 |
|:- |:-: |:-: |:- |
|status |Number |是 |认证结果,1-通过 2-不通过 3-查无结果 0-待定 |
|reasonType |Number |否 |原因详情:
2-认证不一致
3-该手机号查询无记录
4-认证信息有误
5-号码状态异常(空号、停机等)
6-解析手机号运营商失败
7-其他出错 |
|logId |String |是 |本次请求日志id,可以根据该标识在控制台查询结果 |
|isPayed |Number |是 |本次请求是否收费标识,1代表收费,0代表不收费 |
|mobileType |String |是 |运营商类型:1-移动,2-联通,3- 电信,9,-未知 |
**响应体示例**
```json
{
"errCode": 0,
"errMsg": "",
"data": {
"status": 1,
"reasonType": 1,
"logId": "9f9def8638c74506b3f5ef17f893c8b9",
"isPayed": 1,
"mobileType": "3",
"note": ""
}
}
```
### 获取手机号三要素认证(详版)结果@mobile3eleverify
接口名:mobile3EleVerifyPro
你可以在调用 extStorageManager.mobile3EleVerifyPro 前执行一些自己的业务逻辑,判断用户是否有权限执行此API等等
**云端代码**
```js
const uniVerifyManager = uniCloud.getUniVerifyManager({
provider: "univerify"
});
let verifyRes = await uniVerifyManager.mobile3EleVerifyPro({
realName: "姓名",
idCard: "身份证",
mobile: "手机号",
});
console.log('认证结果: ', verifyRes.data);
```
**请求参数**
|参数名 |类型 |必填 |默认值 |说明 |
|:- |:-: |:-: |:-: |:- |
|realName |String |是 |- |姓名 |
|idCard |String |是 |- |身份证 |
|mobile |String |是 |- |手机号 |
**响应参数**
响应字段如下,响应通用字段已省略,详细见[响应公共字段](#publicreturn)
|名称 |类型 |必须返回 |描述 |
|:- |:-: |:-: |:- |
|status |Number |是 |认证结果,1-通过 2-不通过 3-查无结果 0-待定 |
|reasonType |Number |否 |原因详情:
2-认证不一致
3-该手机号查询无记录
4-认证信息有误
5-号码状态异常(空号、停机等)
6-解析手机号运营商失败
7-其他出错
以下返回为详版专属
20-手机号已实名,姓名正确,但证件号错误
21-手机号已实名,证件号正确,但姓名错误
22-手机号已实名,但证件号和姓名均非该手机号绑定信息 |
|logId |String |是 |本次请求日志id,可以根据该标识在控制台查询结果 |
|isPayed |Number |是 |本次请求是否收费标识,1代表收费,0代表不收费 |
|mobileType |String |是 |运营商类型:1-移动,2-联通,3- 电信,9,-未知 |
**响应体示例**
```json
{
"errCode": 0,
"errMsg": "",
"data": {
"status": 1,
"reasonType": 1,
"logId": "9f9def8638c74506b3f5ef17f893c8b9",
"isPayed": 1,
"mobileType": "3",
"note": ""
}
}
```
## 外部系统通过http方式调用接口@http
1. 新建云对象 `uni-cloud-verify-co`,云对象名字可自己修改,这里以 `uni-cloud-verify-co` 为例。
![](https://web-ext-storage.dcloud.net.cn/unicloud/uni-rpia/56e57aba-9c24-4482-b0f0-328e3b88242d.png)
在弹窗的窗口中选择云对象,输入名称 uni-cloud-verify-co
![](https://web-ext-storage.dcloud.net.cn/unicloud/uni-rpia/f1575aef-48de-4ea9-bee7-4e73ce8325dc.png)
2. 修改云对象下的 `package.json` 文件,完整替换内容如下
```js
{
"name": "uni-cloud-verify-co",
"dependencies": {},
"extensions": {
"uni-cloud-verify": {}
},
"cloudfunction-config": {
"concurrency": 1,
"memorySize": 512,
"path": "/http/uni-cloud-verify-co",
"timeout": 60,
"triggers": [],
"runtime": "Nodejs18"
}
}
```
3. 修改云对象下的 `index.obj.js` 文件,完整替换内容如下
**注意:请修改变量apiKey的值为你的通讯密钥**
如果你自己有更好的安全验证逻辑,可自行修改 `_before` 内的逻辑
```js
const apiKey = "xxxxxx"; // 请替换为你的通讯密钥
const uniVerifyManager = uniCloud.getUniVerifyManager({
provider: "univerify",
});
class MyError extends Error {
constructor(err) {
super();
this.err = err;
}
}
module.exports = {
_before: function() {
const params = this.getParams();
const data = params[0] || params;
// 验证通讯密钥
if (data.key !== apiKey) {
throw new MyError({
code: -1,
msg: "非法请求"
});
}
},
_after: function(error, result) {
if (error) {
if (error.err) {
return error.err;
}
throw error;
}
return result
},
// 手机号三要素认证(简版)
async mobile3EleVerify(data) {
let {
realName,
idCard,
mobile,
} = data;
const res = await uniVerifyManager.mobile3EleVerify({
realName,
idCard,
mobile
});
return res;
},
// 手机号三要素认证(详版)
async mobile3EleVerifyPro(data) {
let {
realName,
idCard,
mobile,
} = data;
const res = await uniVerifyManager.mobile3EleVerifyPro({
realName,
idCard,
mobile
});
return res;
},
// 手机号二要素认证
async mobile2EleVerify(data) {
let {
realName,
idCard,
mobile,
} = data;
const res = await uniVerifyManager.mobile2EleVerify({
realName,
idCard,
mobile
});
return res;
}
}
```
4. 上传云对象 `uni-cloud-verify-co`
![](https://web-ext-storage.dcloud.net.cn/unicloud/uni-rpia/828ae99b-21b1-4967-a987-26ef9eea4824.png)
5. 查看http接口地址,登录 [uniCloud控制台](https://unicloud.dcloud.net.cn/),进入空间详情,点击左侧菜单 - 云函数/云对象 - 函数/对象列表,进入 uni-cloud-verify-co 的详情
![](https://web-ext-storage.dcloud.net.cn/unicloud/uni-rpia/8bd9c241-fdea-41a1-9547-86ce03005257.png)
6. 进入详情后点击右下方的复制路径按钮
![](https://web-ext-storage.dcloud.net.cn/unicloud/uni-rpia/133c5359-503f-4d4b-b648-cdf86b5a4c66.png)
假设复制的路径是:`https://xxxxxxxxxx.next.bspapp.com/http/uni-cloud-verify-co`
则
请求手机号三要素认证(简版)的完整http请求地址为:
GET请求
```
https://xxxxxxxxxx.next.bspapp.com/http/uni-cloud-verify-co/mobile3EleVerify?realName=姓名&idCard=身份证&mobile=手机号&key=通讯密钥
```
请求手机号三要素认证(详版)的完整http请求地址为:
GET请求
```
https://xxxxxxxxxx.next.bspapp.com/http/uni-cloud-verify-co/mobile3EleVerifyPro?realName=姓名&idCard=身份证&mobile=手机号&key=通讯密钥
```
请求手机号二要素认证的完整http请求地址为:
GET请求
```
https://xxxxxxxxxx.next.bspapp.com/http/uni-cloud-verify-co/mobile2EleVerify?realName=姓名&mobile=手机号&key=通讯密钥
```