客户端
persona-node-client 是节点/ JS 和 TypeScript 客户端
个人a 允许您使用普通节点
查询、核查、报告、账户和其他数据的语法
从人a
API 密码。 。 。 .
安装
# with npm
$ npm install @flexbase/persona-node-client
使用量
这个读取器不会涵盖Persona是什么的所有细节, 和如何使用它 - 它的目标作为一个 伴侣 致 Persona 开发者 文档 解释每个终点和一般人物如何 API 密码 工作时.
不过,我们会举出很多例子 这样就可以清楚如何使用这个 库与 OPersona 互动.
获取您的 API 密钥
这个客户端使用相同的 API 密钥, 当你访问 docs about 获取 您的 API 键 . 不管是沙盒钥匙 还是生产钥匙 文件和Persona Dashboard都是 相当清楚如何得到你的API密钥.
创建客户端
目前,有针对性地提供一组职能 客户端。 这些目前涉及账户和核查领域,例如: 以及详细的数据库核查领域。 随着我们增加更多的特征, 这个客户会大吃一惊的 但现在,我们需要它来做这个.
客户的基本构造是:
import { Persona } from 'persona-node-client'
const client = new Persona(apiKey)
如果您想提供 Persona 版本来使用, 或密钥插入, 这些也可以在构造器中提供:
const client = new Persona(apiKey, {
personaVersion: '2021-07-05',
keyInflection: 'camel',
})
备选办法可包括:
host- 发送所有 Persona 呼叫的主机名apiKey- API 键,如果你想把它放在选项中keyInflection- 答复的外壳:camel, (中文(简体) ),snake等 (中文(简体) ).personaVersion- 您想拨打的Persona API版本
账户呼叫
如《人物》所述a 文档数字 :
该账户代表一个经核实的个人,其中包含一名或一名 更多的查询。 账户终点的主要用途是: 获取个人先前提交的信息.
列出全部账户
您可以使用单调获取所有已存在的账户列表 :
const resp = await client.account.list()
如果默认为显示该组织的前10个账户, 反应是:
{
success: true,
accounts: [
{
type: 'account',
id: 'act_ivNy2ZA8HHazkkPDZUWDmo2K',
attributes: [Object]
},
{
type: 'account',
id: 'act_S62jF245bU8pvPKvv9ALYKHM',
attributes: [Object]
},
{
type: 'account',
id: 'act_e9ZNggooRhGywARBeRLo2e4Q',
attributes: [Object]
},
{
type: 'account',
id: 'act_2mqkNU3uPecc3vrTf2xDnwkF',
attributes: [Object]
},
{
type: 'account',
id: 'act_smwy9CMVW5TzNMH1booyF9W6',
attributes: [Object]
},
...
],
details: {
requestId: '48b9dda8-083b-4db7-8fdb-74467748db5f',
runtime: 0.713731
}
}
其中每个 [Object] 数值 attributes 看起来像:
{
referenceId: '03f1a8f1-75ad-435a-8b9e-05dc77f2f61a',
createdAt: '2022-06-30T16:25:26.000Z',
updatedAt: '2022-06-30T16:25:27.000Z',
nameFirst: 'Tralisha',
nameMiddle: null,
nameLast: 'Fenton',
phoneNumber: '903-991-3776',
emailAddress: '[email protected]',
addressStreet1: '327 Briarbend Rd',
addressStreet2: null,
addressCity: 'Goose Creek',
addressSubdivision: 'South Carolina',
addressPostalCode: '294457778',
countryCode: 'US',
birthdate: '1998-01-11',
socialSecurityNumber: '111-22-3333',
tags: [],
id: 'act_smwy9CMVW5TzNMH1booyF9W6'
}
许多Persona的电话有几种可选的参数, 并且他们都以这种形式被列入呼吁中:
const resp = await client.account.list({
size: 20,
})
对这一呼吁,可选择如下:
beforeId- 账户的编号,即终端账户 用于列表afterId- 该账户的ID,不会出现在名单上,和 经常是 最后一个 代码来自之前的求取列表 .size- 要返回的元素数量filterRefId- 那个referenceId以该值为基础过滤 账户创建时由用户提供.
如果出现错误,反应可能是:
{
"success": false,
"error": {
"type": "persona",
"causes": [
{ "title": "Record not found" },
...
]
}
}
所以看着 success 反应的价值将很快通知您呼叫的结果.
获取账户
您可以撤回一个以前创建的账户:
const resp = await client.account.byId('act_GSzquZ2gyBXsJ9yKB7HJuhW7')
唯一的论据是账号,结果会看 比如说:
{
success: true,
account: {
type: 'account',
id: 'act_GSzquZ2gyBXsJ9yKB7HJuhW7',
attributes: {
referenceId: 'ec9ff3f2-d49f-4cf5-9a3a-66bc628c47d1',
createdAt: '2022-06-25T11:12:22.000Z',
updatedAt: '2022-07-06T09:00:28.000Z',
nameFirst: 'Jacob',
nameMiddle: null,
nameLast: 'Woods',
phoneNumber: '680-206-6197',
emailAddress: '[email protected]',
addressStreet1: '8601 Sugarlimb Rd',
addressStreet2: null,
addressCity: 'Loudon',
addressSubdivision: 'Tennessee',
addressPostalCode: '377746323',
countryCode: 'US',
birthdate: '1998-01-11',
socialSecurityNumber: '111-22-3333',
tags: [Array]
}
},
details: {
requestId: 'be396edb-1999-49ac-acbf-b6694ed56feb',
runtime: 0.085191
}
}
创建账户
您可以通过至少输入其中的某些部分来创建账户
AccountAttributes 对象 :
const resp = await client.account.create({
referenceId: '7ab50553-67ee-4b59-9adb-dbce7f37af0a',
nameFirst: 'Jacob',
nameLast: 'Woods',
birthdate: '1998-01-11',
addressStreet1: '8601 Sugarlimb Ave',
addressCity: 'Loudon',
addressSubdivision: 'TN',
addressPostalCode: '37774',
countryCode: 'US',
emailAddress: '[email protected]',
phoneNumber: '312-555-1212',
socialSecurityNumber: '111-22-3333',
tags: ['bad-actor', 'trouble'],
})
结果会是:
{
success: true,
account: {
type: 'account',
id: 'act_GSzquZ2gyBXsJ9yKB7HJuhW7',
attributes: {
referenceId: '7ab50553-67ee-4b59-9adb-dbce7f37af0a',
nameFirst: 'Jacob',
nameLast: 'Woods',
birthdate: '1998-01-11',
addressStreet1: '8601 Sugarlimb Rd',
addressCity: 'Loudon',
addressSubdivision: 'Tennessee',
addressPostalCode: '377746323',
countryCode: 'US',
emailAddress: '[email protected]',
phoneNumber: '312-555-1212',
socialSecurityNumber: '111-22-3333',
tags: [ 'BAD-ACTOR', 'TROUBLE' ],
createdAt: '2022-07-01T10:58:46.000Z',
updatedAt: '2022-07-01T10:58:46.000Z',
nameMiddle: null,
addressStreet2: null,
},
},
details: {
requestId: 'efc22741-5d7e-40e5-92b4-7607e841ee57',
runtime: 0.41911
}
}
编辑账户
你可以软地删除Accout, 正如Persona所说:
永久删除账户中个人可识别信息(PII) 以及所有相关的调查、核查和报告。 此动作不能 被撤销.
这个终点可用于遵守隐私条例,例如: GDPR / CCPA 或强制数据隐私.
注:一个账户在编辑后仍可更新。 如果你想删除 数据持续,请联系我们 帮助你设置保留 政策.
const resp = await client.account.delete('act_e9ZNggooRhGywARBeRLo2e4Q')
结果会是:
{
success: true,
account: {
type: 'account',
id: 'act_e9ZNggooRhGywARBeRLo2e4Q',
attributes: {
referenceId: '7ab50553-67ee-4b59-9adb-dbce7f37af0a',
createdAt: '2022-07-01T10:58:46.000Z',
updatedAt: '2022-07-01T11:06:53.000Z',
nameFirst: null,
nameMiddle: null,
nameLast: null,
phoneNumber: null,
emailAddress: null,
addressStreet1: null,
addressStreet2: null,
addressCity: null,
addressSubdivision: null,
addressPostalCode: null,
countryCode: null,
birthdate: null,
socialSecurityNumber: null,
tags: [ 'BAD-ACTOR', 'TROUBLE' ],
},
},
details: {
requestId: 'e988f99c-efe1-4727-af44-ae00d6e870e0',
runtime: 0.187149
}
}
更新账户
您可以以 :
const resp = await client.account.update('act_e9ZNggooRhGywARBeRLo2e4Q', {
emailAddress: '[email protected]',
})
且结果看起来与 byId()页:1.
添加标签
您可以使用简单的调用, 在已有的账户中添加标签 :
const resp = await client.account.addTag('act_e9ZNggooRhGywARBeRLo2e4Q', 'bad')
且结果看起来与 byId()页:1 这个
标记都由Persona大写, 和独有的,再次由Persona,所以
在添加标记时,您不必担心案件或独有性.
删除标记
您可以用简单的调用从已有账户中删除标签 :
const resp = await client.account.removeTag('act_e9ZNggooRhGywARBeRLo2e4Q', 'good')
且结果看起来与 byId()页:1 这个
标记都由Persona大写, 和独有的,再次由Persona,所以
在删除标记时,您不必担心案件或独有性.
另外,去除不存在的标签也没有处罚.
设置全部标记
您可以为已有账户设置完整的标签集 简单的调用 :
const resp = await client.account.setTags('act_e9ZNggooRhGywARBeRLo2e4Q',
['bad', 'iffy']
)
且结果看起来与 byId()页:1 这个
标记将全部由Persona大写, 和独有,再次由Persona,
这样你就可以不用担心标签中的情况或独特性.
合并账户
您可以合并所有与不同账户相关的资产 这其实是同一个身份 一个电话。 人形容这个 作为:
将多个源代码信息合并为一个目标 账号 任何调查、核查、报告和文件 账户将转移到目的地 账号 然而,账户的属性将不会被转移. 合并后,您可以更新目的地账户 属性.
此端点可用于清理重复的账号.
注:一个源账户只能被合并一次. 后来, 源账户将存档.
const resp = await client.account.consolidate(destAcctId,
[srcAcctId1, srcAcctId2, srcAcctId3]
)
第一个论点就是 目标 accountId,第二个
是一组 accountId 值为 合并 到达目的地。 这个
结果看起来类似于 byId()页:1.
调查呼吁
如《人物》所述a 文档数字 :
调查是个人试图 核实他们的身份。 调查终点的主要用途是: 从流中获取提交的信息 .
当个人开始核实其 身份证明 检查以下状态以确定是否 个人已完成流量。 见 模型和寿命周期 详细内容 概述个人如何验证其身份.
列出所有查询
您可以在Persona获得一份没有争议的所有询问列表:
const resp = await client.inquiry.list()
结果会是:
{
success: true,
inquiries: [
{
type: 'inquiry',
id: 'inq_i8EnS9TdG2NqZcXbEQcaPSo9',
attributes: [Object],
relationships: [Object]
},
{
type: 'inquiry',
id: 'inq_y8Bqa4JpKFtxdWGkgEEdRtcC',
attributes: [Object],
relationships: [Object]
},
{
type: 'inquiry',
id: 'inq_QsYJm8yq8yjKdHqyAwKBFb64',
attributes: [Object],
relationships: [Object]
},
{
type: 'inquiry',
id: 'inq_2dB7wPwdUJYmf3ytKaxoXZRF',
attributes: [Object],
relationships: [Object]
},
...
],
details: {
requestId: '86f6aed9-c170-44dd-963d-4cb870fcad66',
runtime: 0.225322
}
}
地点 [Object] 数值 attributes 键会显示一些东西
例如:
{
status: 'completed',
referenceId: '7f2ca97f-a110-4f2d-b00e-0d648857db69',
note: null,
behaviors: [Object],
tags: [],
creator: 'API',
reviewerComment: null,
createdAt: '2022-07-01T10:36:59.000Z',
startedAt: '2022-07-01T10:36:59.000Z',
completedAt: '2022-07-01T10:37:00.000Z',
failedAt: null,
decisionedAt: null,
expiredAt: null,
redactedAt: null,
previousStepName: null,
nextStepName: null,
nameFirst: 'Tralisha',
nameMiddle: null,
nameLast: 'Fenton',
birthdate: '1998-01-11',
addressStreet1: '327 Briarbend Rd',
addressStreet2: null,
addressCity: 'Goose Creek',
addressSubdivision: 'South Carolina',
addressSubdivisionAbbr: 'SC',
addressPostalCode: '294457778',
addressPostalCodeAbbr: '29445',
socialSecurityNumber: '111-22-3333',
emailAddress: '[email protected]',
phoneNumber: '903-991-3776',
fields: [Object],
}
编辑 [Object] 数值 relationships {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}会看起来有些东西
例如:
{
account: { data: { type: 'account', id: 'act_wUWs7RWHpvWy9gnw4uqqnS3B' } },
template: { data: { type: 'template', id: 'tmpl_PPDFW92MxhJLomjh4gC2tb5x' } },
inquiryTemplate: { data: null },
inquiryTemplateVersion: { data: null },
reviewer: { data: null },
reports: { data: [] },
verifications: { data: [] },
sessions: { data: [ [Object] ] },
documents: { data: [] },
selfies: { data: [] }
}
许多Persona的电话有几种可选的参数, 并且他们都以这种形式被列入呼吁中:
const resp = await client.inquiry.list({
size: 20,
})
对这一呼吁,可选择如下:
beforeId- 作为终审调查的调查文件 用于列表afterId- 调查的ID,不会出现在名单上,和 经常是 最后一个 代码来自之前的求取列表 .size- 要返回的元素数量filterRefId- 那个referenceId以该值为基础过滤 由用户在创建调查时提供.filterAcctId- 那个accountId以账户 id 为基础过滤 作为本调查的基础.
获取调查
你可以得到一个具体的调查 人与仅仅 inquiryId数字 :
const resp = await client.inquiry.byId('inq_hckCfzvWeT3YEkkmVGzAuxKn')
结果会是:
{
success: true,
inquiry: {
type: 'inquiry',
id: 'inq_hckCfzvWeT3YEkkmVGzAuxKn',
attributes: {
status: 'expired',
referenceId: null,
note: null,
behaviors: {
requestSpoofAttempts: null,
userAgentSpoofAttempts: null,
distractionEvents: null,
hesitationBaseline: null,
hesitationCount: null,
hesitationTime: null,
shortcutCopies: null,
shortcutPastes: null,
autofillCancels: null,
autofillStarts: null,
devtoolsOpen: null,
completionTime: null,
hesitationPercentage: null,
behaviorThreatLevel: null
},
tags: [],
creator: '[email protected]',
reviewerComment: null,
createdAt: '2022-06-28T20:54:14.000Z',
startedAt: null,
completedAt: null,
failedAt: null,
decisionedAt: null,
expiredAt: '2022-06-29T20:54:31.000Z',
redactedAt: null,
previousStepName: null,
nextStepName: null,
nameFirst: null,
nameMiddle: null,
nameLast: null,
birthdate: null,
addressStreet1: null,
addressStreet2: null,
addressCity: null,
addressSubdivision: null,
addressSubdivisionAbbr: null,
addressPostalCode: null,
addressPostalCodeAbbr: null,
socialSecurityNumber: null,
emailAddress: null,
phoneNumber: null,
fields: {
birthdate: [Object],
nameLast: [Object],
nameFirst: [Object],
nameMiddle: [Object],
addressCity: [Object],
phoneNumber: [Object],
emailAddress: [Object],
addressStreet1: [Object],
addressStreet2: [Object],
addressPostalCode: [Object],
addressSubdivision: [Object],
addressCountryCode: [Object],
socialSecurityNumber: [Object]
},
},
relationships: {
account: { data: { type: 'account', id: 'act_wUWs7RWHpvWy9gnw4uqqnS3B' } },
template: { data: { type: 'template', id: 'tmpl_PPDFW92MxhJLomjh4gC2tb5x' } },
inquiryTemplate: { data: null },
inquiryTemplateVersion: { data: null },
reviewer: { data: null },
reports: { data: [] },
verifications: { data: [] },
sessions: { data: [ [Object] ] },
documents: { data: [] },
selfies: { data: [] }
}
},
details: {
requestId: '4b1e7bcd-be12-4fe8-af6b-dc41e8b230ae',
runtime: 0.09918
}
}
打印调查 PDF
调查的PDF字节 inquiryId数字 :
const resp = await client.inquiry.print('inq_hckCfzvWeT3YEkkmVGzAuxKn')
结果会是:
{
success: true,
inquiry: {
id: 'inq_hckCfzvWeT3YEkkmVGzAuxKn',
body: Gunzip {
_writeState: [Uint32Array],
_readableState: [ReadableState],
_events: [Object: null prototype],
_eventsCount: 4,
_maxListeners: undefined,
_writableState: [WritableState],
allowHalfOpen: true,
bytesWritten: 217026,
_handle: null,
_outBuffer: <Buffer 20 0a 30 30 30 30 32 32 38 39 30 38 20 30 30
30 30 30 20 6e 20 0a 30 30 30 30 32 32 39 35 36 36 20 30 30 30
30 30 20 6e 20 0a 30 30 30 30 32 32 39 36 ... 16334 more bytes>,
_outOffset: 911,
_chunkSize: 16384,
_defaultFlushFlag: 2,
_finishFlushFlag: 2,
_defaultFullFlushFlag: 3,
_info: undefined,
_maxOutputLength: 4294967296,
_level: -1,
_strategy: 0,
[Symbol(kCapture)]: false,
[Symbol(kCallback)]: null,
[Symbol(kError)]: null
}
}
}
创建调查
您可以创建调查:
const resp = await client.inquiry.create({
templateId: 'tmpl_PP...',
referenceId: '5f81c440-088a-4d71-8980-cdd2565abc8f'
})
并且结果看起来会非常类似 byId()
函数.
更新调查
您可以为调查更新数据 :
const resp = await client.inquiry.update(inquiryId, {
reviewerComment: 'looking good',
})
我们需要做更多的测试 这个电话的输出,但它 应该有用 但还没有经过测试.
继续调查
你可以在工作流程中恢复调查,用我们的话说 个人文件 :
恢复现有的调查。 如果调查处于待决状态, 您还必须指定从此端点生成的会话符号.
const resp = await client.inquiry.resume(inquiryId)
我们需要做更多的测试 这个电话的输出,但它 应该有用 但还没有经过测试.
核准调查
您可以手动批准一项调查:
const resp = await client.inquiry.approve(inquiryId)
我们需要做更多的测试 这个电话的输出,但它 应该有用 但还没有经过测试.
拒绝调查
您可以手动拒绝调查 :
const resp = await client.inquiry.decline(inquiryId)
我们需要做更多的测试 这个电话的输出,但它 应该有用 但还没有经过测试.
编辑调查
你可以通过编辑所有PII来软删除调查, 在其中 个人文件词:
永久删除个人可识别信息 a 调查及所有相关核查和报告。 这一行动 无法被撤销 .
这一终点可用于遵守隐私条例,例如: 作为GDPR / CCPA 或强制数据隐私.
const resp = await client.inquiry.delete(inquiryId)
我们需要做更多的测试 这个电话的输出,但它 应该有用 但还没有经过测试.
添加标签
您可以在已有的调查中添加标签, 并使用简单的调用 :
const resp = await client.inquiry.addTag('inq_2rs9qsQ1D5GJgmeMK7ktnzo1', 'bad')
且结果看起来与 byId()页:1 这个
标记都由Persona大写, 和独有的,再次由Persona,所以
在添加标记时,您不必担心案件或独有性.
删除标记
您可以用简单的调用从现有的调查中删除标签 :
const resp = await client.inquiry.removeTag('inq_2rs9qsQ1D5GJgmeMK7ktnzo1', 'good')
且结果看起来与 byId()页:1 这个
标记都由Persona大写, 和独有的,再次由Persona,所以
在删除标记时,您不必担心案件或独有性.
另外,去除不存在的标签也没有处罚.
设置全部标记
您可以为现有的调查设置完整的标签 简单的调用 :
const resp = await client.inquiry.setTags('inq_2rs9qsQ1D5GJgmeMK7ktnzo1',
['bad', 'iffy']
)
且结果看起来与 byId()页:1 这个
标记将全部由Persona大写, 和独有,再次由Persona,
这样你就可以不用担心标签中的情况或独特性.
核查呼吁
如《人物》所述a 文档数字 :
核查是指个人进行的多次核查. 调查包含一项或多项核查。 可用的属性 对于任何特定的核查,取决于其类型。 每项调查 关系字段列出所有相关验证的ID. 要在获取相片 URL 时认证, 请通过相同的授权 头曰.
核查随着个人通过 流动。 检查以下状态以监视进度并查找 完成结果.
获取验证
您可以用简单的 verificationId数字 :
const resp = await client.verification.byId('ver_6JxUgEi2GyMMXQ1vZUFYSGWS')
结果会是:
{
success: true,
verification: {
type: 'verification/database',
id: 'ver_JpPzxVnDz9P9tWs7UagHj7Gh',
attributes: {
status: 'submitted',
createdAt: '2022-07-06T09:03:46.000Z',
createdAtTs: 1657098226,
submittedAt: '2022-07-06T09:03:47.000Z',
submittedAtTs: 1657098227,
completedAt: null,
completedAtTs: null,
countryCode: 'US',
nameFirst: 'Tralisha',
nameMiddle: null,
nameLast: 'Fenton',
addressStreet1: '327 Briarbend Rd',
addressStreet2: null,
addressCity: 'Goose Creek',
addressSubdivision: 'SC',
addressPostalCode: '29445-7778',
birthdate: '1998-01-11',
phoneNumber: '903-991-3776',
emailAddress: '[email protected]',
checks: []
},
relationships: { inquiry: [Object] }
},
details: {
requestId: '6f0be052-502a-4e5c-8818-8df961128521',
runtime: 0.057535
}
}
打印验证 PDF
您可以用 PDF 打印出验证文件 :
const resp = await client.verification.print('ver_6JxUgEi2GyMMXQ1vZUFYSGWS')
结果会是:
{
success: true,
verification: {
id: 'ver_6JxUgEi2GyMMXQ1vZUFYSGWS',
body: Gunzip {
_writeState: [Uint32Array],
_readableState: [ReadableState],
_events: [Object: null prototype],
_eventsCount: 4,
_maxListeners: undefined,
_writableState: [WritableState],
allowHalfOpen: true,
bytesWritten: 217026,
_handle: null,
_outBuffer: <Buffer 20 0a 30 30 30 30 32 32 38 39 30 38 20 30 30
30 30 30 20 6e 20 0a 30 30 30 30 32 32 39 35 36 36 20 30 30 30
30 30 20 6e 20 0a 30 30 30 30 32 32 39 36 ... 16334 more bytes>,
_outOffset: 911,
_chunkSize: 16384,
_defaultFlushFlag: 2,
_finishFlushFlag: 2,
_defaultFullFlushFlag: 3,
_info: undefined,
_maxOutputLength: 4294967296,
_level: -1,
_strategy: 0,
[Symbol(kCapture)]: false,
[Symbol(kCallback)]: null,
[Symbol(kError)]: null
}
}
}
数据库核查呼叫
核查制度的一个子集是一个简单的数据库核查,其中: 身份的静态数据发送到个人,并贯穿于 一系列数据库 寻找它是否匹配一个坏演员.
检索数据库核查
您可以用简单的 verificationId数字 :
const resp = await client.verification.database.byId(verificationId)
其结果将非常像来自 byId() 页:1
a 一般性核查.
创建数据库验证
您可以简单地创建数据库验证:
const resp = await client.verification.database.create({
inquiryId,
nameFirst: 'James',
nameLast: 'Woods',
addressStreet1: '327 Briarbend Ave',
addressCity: 'Goose Creek',
addressSubdivision: 'SC',
addressPostalCode: '29445',
identificationNumber: '111-22-3333',
birthdate: '1998-01-11',
phoneNumber: '312-555-1212',
emailAddress: '[email protected]',
countryCode: 'US',
})
其结果将非常像来自 byId() 页:1
a 一般性核查.
提交数据库验证
数据库核查一旦建立,必须提交处理, 这样做的简单方法是:
const resp = await client.verification.database.submit(verificationId)
其结果将非常像来自 byId() 页:1
一般性核查,但 status 在数据中,很可能有
更改自 created 改为 submitted。然后,它将会在呼叫者身上
以获取完成时的网络信息
核查或使用 byId() 函数以民意测验 Persona 直至
页:1 status 更改终端条件.
同步运行数据库验证
因为它是一个简单的过程, 它有道理有一个 同步 创建、提交和监测数据库核查的方法 你可以做这个"等待"。 这可以用代码在 客户端 :
const resp = await client.verification.database.run({
inquiryId,
nameFirst: 'James',
nameLast: 'Woods',
addressStreet1: '327 Briarbend Ave',
addressCity: 'Goose Creek',
addressSubdivision: 'SC',
addressPostalCode: '29445',
identificationNumber: '111-22-3333',
birthdate: '1998-01-11',
phoneNumber: '312-555-1212',
emailAddress: '[email protected]',
countryCode: 'US',
})
输入与 create() 函数和
结果看起来很像来自 byId() 页:1
一般性核查,但 status 将是一个终审案件.
其中一个是 stage 输出属性。 这个会
经历了四个处理阶段:
create- 如果有错误create()呼叫,这是 在输出中,连同出错.submit- 里面有个错误submit()呼叫,这是 在输出中,连同出错complete- 如果核查工作完成,这将会是 输出和status输入verification改为: 最后处置.processing- 如果30秒后, 什么都没有改变, 那么这个会 ,连同来自byId()。 。 。 .
想法是错误被标记 与他们发生的电话, 那能帮助打电话的人知道发生了什么.
数据库TIN核查呼叫
核查系统的一个子集是数据库TIN(Tax Id号码) 核实公司名称和税务身份证或EIN的发送地点,以及Persona 检查是否真的符合 TIN 或 EIN 。 这是 没有 寻找彼此,但 核查 关于 双相匹配.
检索数据库 TIN 核查
您可以用简单的 verificationId数字 :
const resp = await client.verification.tin.byId(verificationId)
结果会是:
{
success: true,
verification: {
type: 'verification/database-tin',
id: 'ver_kVJEwKg2BsSGu81G78nTVdtA',
attributes: {
status: 'passed',
createdAt: '2022-07-08T19:18:37.000Z',
createdAtTs: 1657307917,
submittedAt: '2022-07-08T19:18:37.000Z',
submittedAtTs: 1657307917,
completedAt: '2022-07-08T19:18:37.000Z',
completedAtTs: 1657307917,
countryCode: 'US',
tin: '411234567',
tinType: 'ssn',
nameFirst: null,
nameLast: null,
checks: [Array]
},
relationships: { inquiry: [Object] }
},
details: {
requestId: 'b9553a39-fcc8-498c-9ef9-c0f4a69038aa',
runtime: 0.112685
},
stage: 'complete'
}
在许多方面与身份核查相似,但 公司的不同信息 而不是那个人.
创建数据库 TIN 校验
您可以简单地创建数据库 TIN 校验 :
const resp = await client.verification.tin.create({
nameBusiness: 'Microsoft Corp',
tin: '91-1144442',
verificationTemplateId: 'vtmpl_abcedfg...',
countryCode: 'US',
})
其结果将非常像来自 byId() 页:1
a 一般性核查.
提交数据库 TIN 验证
数据库TIN核查一旦建立,必须提交处理, 这样做的简单方法是:
const resp = await client.verification.tin.submit(verificationId)
其结果将非常像来自 byId() 页:1
一般性核查,但 status 在数据中,很可能有
更改自 created 改为 submitted。然后,它将会在呼叫者身上
以获取完成时的网络信息
核查或使用 byId() 函数以民意测验 Persona 直至
页:1 status 更改终端条件.
同步运行数据库 TIN 校验
因为它是一个简单的过程, 它有道理有一个 同步 如何创建、提交和监测数据库TIN核查,以便 你可以做这个"等待"。 这可以用代码在 客户端 :
const resp = await client.verification.tin.run({
nameBusiness: 'Microsoft Corp',
tin: '91-1144442',
verificationTemplateId: 'vtmpl_abcedfg...',
countryCode: 'US',
})
输入与 create() 函数和
结果看起来很像来自 byId() 页:1
一般性核查,但 status 将是一个终审案件.
其中一个是 stage 输出属性。 这个会
经历了四个处理阶段:
create- 如果有错误create()呼叫,这是 在输出中,连同出错.submit- 里面有个错误submit()呼叫,这是 在输出中,连同出错complete- 如果核查工作完成,这将会是 输出和status输入verification改为: 最后处置.processing- 如果30秒后, 什么都没有改变, 那么这个会 ,连同来自byId()。 。 。 .
想法是错误被标记 与他们发生的电话, 那能帮助打电话的人知道发生了什么.
发展
对于那些有兴趣在图书馆工作的人来说,有些事情是
工作会简单一点 代码的组织全部在
src/,每个模块 节 用户名: account, (中文(简体) ), inquiry, (中文(简体) ),
包括: 这使得函数的位置非常容易.
此外,与Persona服务的主要联系是:
src/index.ts 模块 fire() 函数。 在构造器中
客户,每个 节次 被创建,然后链接到
他们的交流工作主课.
设置
为了与守则合作,发展依赖包括: dotenv
以便每个用户都能创建 .env 具有单一工作值的文件
与个人a :
PERSONA_API_KEY这是Persona制作的"API密钥" API 个人 键页.
测试
有几个测试脚本可以测试和验证关于 Persona服务行使API的不同部分. 每个都是 自成一体,并可使用:
$ npm run ts tests/verification.ts
creating new Inquiry based off Database Template...
Success! we have created the new Inquiry inq_Cw4YUBJQDwSmasqN3ZVYpGri
running Database Verification for Inquiry inq_Cw4YUBJQDwSmasqN3ZVYpGri...
TWO {
success: true,
verification: {
type: 'verification/database',
id: 'ver_XmdrvsgCSSXfiSLpbL42Zywg',
attributes: {
status: 'passed',
createdAt: '2022-06-30T16:25:26.000Z',
createdAtTs: 1656606326,
submittedAt: '2022-06-30T16:25:27.000Z',
submittedAtTs: 1656606327,
completedAt: '2022-06-30T16:25:27.000Z',
completedAtTs: 1656606327,
countryCode: 'US',
nameFirst: 'Tralisha',
nameMiddle: null,
nameLast: 'Fenton',
addressStreet1: '327 Briarbend Rd',
addressStreet2: null,
addressCity: 'Goose Creek',
addressSubdivision: 'SC',
addressPostalCode: '29445-7778',
birthdate: '1998-01-11',
phoneNumber: '903-991-3776',
emailAddress: '[email protected]',
checks: [ [Object], [Object], [Object], [Object], [Object], [Object] ],
},
relationships: { inquiry: [Object] }
},
details: {
requestId: 'e578d72c-7b96-4be5-b078-c41564f994a1',
runtime: 0.114366
},
stage: 'complete'
}
Success! created the Database Verification ver_XmdrvsgCSSXfiSLpbL42Zywg
每次测试都会通过客户端进行一系列的通话,然后检查
结果显示操作成功。 如所示,如果所有步骤
报告内容 Success! 然后一切正常进行.
如果有一个电话有问题,那么 Error! 将打印
,从客户端返回的数据将被丢弃到控制台.