Newer Version Available
IdentityVerificationExt Interface
Namespace
Usage
The id_verification.IdentityVerificationExt interface is called by the Verify Customer Identity flow.
To implement this interface, you must first declare a class with the implements keyword as
follows:
Next, your class must also provide implementation for the following methods:
The method you implemented must be declared as global or public.
1public class IdentityVerificationExtImpl implements id_verification.IdentityVerificationExt{}1public id_verification.SearchResult search(id_verification.SearchRequest searchRequest){
2 //Your code here
3}
4
5public id_verification.VerificationContext getVerifiers(id_verification.VerificationContext verificationContext){
6 //Your code here
7}
8
9public id_verification.ProcessDetail getProcessDetail(id_verification.ProcessDetail processDetail){
10 //Your code here
11}IdentityVerificationExt Methods
The following are methods for IdentityVerificationExt.
getVerifiers(var1)
Signature
public id_verification.VerificationContext getVerifiers(id_verification.VerificationContext var1)
Parameters
- var1
- Type: id_verification.VerificationContext
- Contains information about the verification context, including the process definition, selected search result, selected verified result, and verified result.
Return Value
search(var1)
Signature
public id_verification.SearchResult search(id_verification.SearchRequest var1)
Parameters
- var1
- Type: id_verification.SearchRequest
- Contains information about the search request data. The search request represents search filters for object-based search, search terms for text-based search, and the verification context that includes the process definition, process details, and process fields.
Return Value
IdentityVerificationExt Example Implementation
This example shows an implementation of the id_verification.IdentityVerificationExt interface.
The MockIdentityVerificationExt implements the id_verification.IdentityVerificationExt interface and MockIdentityVerificationExtHelper contains the logic for each method.
1public class MockIdentityVerificationExt implements id_verification.IdentityVerificationExt {
2 public id_verification.SearchResult search(id_verification.SearchRequest searchRequest) {
3 id_verification.SearchResult searchResult = MockIdentityVerificationExtHelper.getDefaultSearchResult(
4 searchRequest.searchTerm, searchRequest.searchFilters);
5 return searchResult;
6 }
7
8 public id_verification.VerificationContext getVerifiers(id_verification.VerificationContext verificationContext) {
9 id_verification.VerificationContext context = MockIdentityVerificationExtHelper.getVerificationContext();
10 return context;
11 }
12
13 public id_verification.ProcessDetail getProcessDetail(id_verification.ProcessDetail processDetail) {
14 return MockIdentityVerificationExtHelper.getAccountProcessDetail(null, null);
15 }
16}1public class MockIdentityVerificationExtHelper {
2
3 // Mock records for search, in an ideal implementation these values will come from an API call
4 private static List <String[]> mockDb = new List<String[]> {
5 //MockAccountName, MockAccountNumber, MockPhone, MockPostalCode
6 new String[] {'James Smith', '263872', '4156546635', '94117'},
7 new String[] {'Michelle Smith', '123872', '3237654456', '56400'},
8 new String[] {'Robert Smith', '329478', '6548987709', '56410'},
9 new String[] {'David Smith', '428476', '6099176652', '08701'},
10 new String[] {'Mary Smith', '238476', '6155123342', '08790'},
11 new String[] {'Maria Garcia', '349872', '4156754040', '94108'},
12 new String[] {'Lee Hartman', '949857', '6457833434', '94110'}
13 };
14
15 public static id_verification.SearchResult getDefaultSearchResult(String searchTerm, List < id_verification.FieldValue > searchFilters) {
16 id_verification.SearchResult searchResult = new id_verification.SearchResult();
17 searchResult.searchResultHeaders = getSearchResultHeaders();
18 searchResult.searchResultRows = getSearchResultRows(searchTerm, searchFilters);
19 return searchResult;
20 }
21
22 private static List <id_verification.SearchResultHeader> getSearchResultHeaders() {
23 List <id_verification.SearchResultHeader> searchResultHeaders = new List <id_verification.SearchResultHeader>();
24
25 id_verification.SearchResultHeader nameHeader = new id_verification.SearchResultHeader();
26 nameHeader.developerName = 'MockName';
27 nameHeader.displayLabel = 'Name';
28 nameHeader.dataType = 'Name';
29 searchResultHeaders.add(nameHeader);
30
31 id_verification.SearchResultHeader accountNoHeader = new id_verification.SearchResultHeader();
32 accountNoHeader.developerName = 'MockAccountNo';
33 accountNoHeader.displayLabel = 'Account #';
34 accountNoHeader.dataType = 'Text';
35 searchResultHeaders.add(accountNoHeader);
36
37 return searchResultHeaders;
38 }
39
40 private static List <id_verification.SearchResultRow> getSearchResultRows(String searchTerm, List < id_verification.FieldValue > searchFilters) {
41 List <id_verification.SearchResultRow> searchResultRows = new List <id_verification.SearchResultRow>();
42
43 for (String[] row : mockDb) {
44 id_verification.SearchResultRow resultRow = new id_verification.SearchResultRow();
45 List <id_verification.FieldValue> fieldValues = new List <id_verification.FieldValue>();
46
47 Boolean found = false;
48
49 if (!String.isBlank(searchTerm)) { // Text Based Search else block can hold logic for object based search
50 found = textBasedSearch(searchTerm, row);
51 }
52
53 if (found) {
54 id_verification.FieldValue fieldValue = new id_verification.FieldValue();
55 fieldValue.developerName = 'MockAccountName';
56 fieldValue.value = row[0];
57 fieldValues.add(fieldValue);
58
59 fieldValue = new id_verification.FieldValue();
60 fieldValue.developerName = 'MockAccountNumber';
61 fieldValue.value = row[1];
62 fieldValues.add(fieldValue);
63
64 fieldValue = new id_verification.FieldValue();
65 fieldValue.developerName = 'MockPhone';
66 fieldValue.value = row[2];
67 fieldValues.add(fieldValue);
68
69 fieldValue = new id_verification.FieldValue();
70 fieldValue.developerName = 'MockPostalCode';
71 fieldValue.value = row[3];
72 fieldValues.add(fieldValue);
73
74 resultRow.searchResultFieldValues = fieldValues;
75 searchResultRows.add(resultRow);
76 }
77 }
78 return searchResultRows;
79 }
80
81 private static Boolean textBasedSearch(String searchTerm, String[] row) {
82 Boolean found = false;
83 List<String> terms = searchTerm.split(' ');
84 String allTxt = '';
85
86 for (String col : row) {
87 allTxt = allTxt + ' ' + col;
88 }
89
90 for (String term : terms) {
91 if (allTxt.toLowercase().contains(term.toLowercase())) {
92 found = true;
93 } else {
94 found = false;
95 break;
96 }
97 }
98 return found;
99 }
100
101 public static id_verification.VerificationContext getVerificationContext() {
102 id_verification.VerificationContext context = new id_verification.VerificationContext();
103 context.selectedSearchResult = new id_verification.SelectedSearchResult();
104 context.verifiedResult = new id_verification.VerifiedResult();
105 context.message = 'Success!';
106 context.isSuccess = true;
107
108 context.processDefinition = new id_verification.ProcessDefinition();
109 context.processDefinition.layoutType = 'Tab';
110 context.processDefinition.processDetail = new List <id_verification.ProcessDetail>();
111
112 context.processDefinition.processDetail.add(getAccountProcessDetail(context.selectedSearchResult, context.verifiedResult));
113 return context;
114 }
115
116 /* This method will return static/mock values for the context, these values can also be
117 pulled from the setup entities for Identity Verification
118 */
119 public static id_verification.ProcessDetail getAccountProcessDetail(
120 id_verification.SelectedSearchResult selectedSearchResult, id_verification.VerifiedResult verifiedResult) {
121 Integer numberOfOptionalVerifiers = 1;
122 id_verification.ProcessDetail accountProcessDetail = new id_verification.ProcessDetail();
123 accountProcessDetail.developerName = 'External_Process_Detail';
124 accountProcessDetail.label = 'External Process Detail';
125 accountProcessDetail.dataSourceType = 'External';
126 accountProcessDetail.searchObjectName = 'Account';
127 accountProcessDetail.searchSequenceNo = 1;
128 accountProcessDetail.searchType = 'Object-Based';
129 accountProcessDetail.searchResultUniqueIdField = 'MockAccountNo';
130 accountProcessDetail.searchResultFilter = '';
131 accountProcessDetail.searchResultSortOrder = '';
132 accountProcessDetail.optionalVerifierCount = 2;
133 //This should be the ID of the apex class implementing the interface
134 accountProcessDetail.apexClassName = '01pRM0000002iUX';
135 accountProcessDetail.verificationProcessFieldList = new id_verification.VerificationProcessFieldList();
136 accountProcessDetail.verificationProcessFieldList.verificationProcessFields = getAccountProcessFields(selectedSearchResult, verifiedResult, numberOfOptionalVerifiers);
137
138 return accountProcessDetail;
139 }
140
141 // This method does not populate all fields, this is just an example.
142 public static List < id_verification.VerificationProcessField > getAccountProcessFields(id_verification.SelectedSearchResult selectedSearchResult, id_verification.VerifiedResult verifiedResult, Integer numberOfOptionalVerifiers) {
143 List < id_verification.VerificationProcessField > processFields = new List < id_verification.VerificationProcessField >();
144
145 List < id_verification.FieldValue > selectedRecordFieldValues = new List < id_verification.FieldValue >();
146 List < id_verification.Verifier > requiredVerifiers = new List <id_verification.Verifier>();
147 List < id_verification.Verifier > optionalVerifiers = new List <id_verification.Verifier>();
148
149 List < id_verification.FieldValue > selectedPlaceholderOptionalFieldValues = new List < id_verification.FieldValue >();
150 List < id_verification.VerificationProcessField > optionalVerifierProcessFields = setOptionalVerifierProcessFields(selectedPlaceholderOptionalFieldValues);
151
152 id_verification.VerificationProcessField nameRequiredField = new id_verification.VerificationProcessField();
153 nameRequiredField.dataSourceType = 'External';
154 nameRequiredField.dataType = 'Name';
155 nameRequiredField.developerName = 'MockAccountName';
156 nameRequiredField.fieldName = 'Name';
157 nameRequiredField.fieldType = 'requiredVerifier';
158 nameRequiredField.label = 'AccountName';
159 processFields.add(nameRequiredField);
160
161 id_verification.FieldValue nameRequiredSelectedRecord = new id_verification.FieldValue();
162 nameRequiredSelectedRecord.developerName = nameRequiredField.developerName;
163 nameRequiredSelectedRecord.value = 'Monica Green';
164 selectedRecordFieldValues.add(nameRequiredSelectedRecord);
165 requiredVerifiers.add(new id_verification.Verifier(nameRequiredField.developerName, 'unset'));
166
167 id_verification.VerificationProcessField accountNumberRequiredField = new id_verification.VerificationProcessField();
168 accountNumberRequiredField.dataSourceType = 'External';
169 accountNumberRequiredField.dataType = 'Text';
170 accountNumberRequiredField.developerName = 'MockAccountNumber';
171 accountNumberRequiredField.fieldName = 'AccountNumber';
172 accountNumberRequiredField.fieldType = 'requiredVerifier';
173 accountNumberRequiredField.label = 'AccountNumber';
174 processFields.add(accountNumberRequiredField);
175
176 id_verification.FieldValue accountNumberRequiredSelectedRecord = new id_verification.FieldValue();
177 accountNumberRequiredSelectedRecord.developerName = accountNumberRequiredField.developerName;
178 accountNumberRequiredSelectedRecord.value = '923384';
179 selectedRecordFieldValues.add(accountNumberRequiredSelectedRecord);
180 requiredVerifiers.add(new id_verification.Verifier(accountNumberRequiredField.developerName, 'unset'));
181
182 selectedSearchResult.selectedRecordObject = selectedRecordFieldValues;
183
184 for (Integer i =0; i< optionalVerifierProcessFields.size(); i++) {
185 processFields.add(optionalVerifierProcessFields.get(i));
186 selectedRecordFieldValues.add(selectedPlaceholderOptionalFieldValues.get(i));
187 optionalVerifiers.add(new id_verification.Verifier(optionalVerifierProcessFields.get(i).developerName, 'unset'));
188 }
189 verifiedResult.requiredVerifiers = requiredVerifiers;
190 verifiedResult.optionalVerifiers = optionalVerifiers;
191
192 return processFields;
193 }
194
195 public static List < id_verification.VerificationProcessField > setOptionalVerifierProcessFields(List < id_verification.FieldValue > selectedPlaceholderValues) {
196 List < id_verification.VerificationProcessField > optionalVerifierProcessFields = new List < id_verification.VerificationProcessField >();
197
198 id_verification.VerificationProcessField postalCodeOptionalField = new id_verification.VerificationProcessField();
199 postalCodeOptionalField.dataSourceType = 'External';
200 postalCodeOptionalField.dataType = 'Text';
201 postalCodeOptionalField.developerName = 'MockPostalCode';
202 postalCodeOptionalField.fieldName = 'BillingPostalCode';
203 postalCodeOptionalField.fieldType = 'optionalVerifier';
204 postalCodeOptionalField.label = 'Zip Code';
205 optionalVerifierProcessFields.add(postalCodeOptionalField);
206
207 selectedPlaceholderValues.add(new id_verification.FieldValue(postalCodeOptionalField.developerName, '94117'));
208
209 id_verification.VerificationProcessField birthdateOptionalField = new id_verification.VerificationProcessField();
210 birthdateOptionalField.dataSourceType = 'External';
211 birthdateOptionalField.dataType = 'Text';
212 birthdateOptionalField.developerName = 'MockBirthdate';
213 birthdateOptionalField.fieldName = 'Birthdate';
214 birthdateOptionalField.fieldType = 'optionalVerifier';
215 birthdateOptionalField.label = 'Date of Birth';
216 optionalVerifierProcessFields.add(birthdateOptionalField);
217
218 selectedPlaceholderValues.add(new id_verification.FieldValue(birthdateOptionalField.developerName, '05/18/1986'));
219
220 return optionalVerifierProcessFields;
221 }
222}The following example tests the implementation:
1@isTest
2private class MockIdentityVerificationExtTest {
3 static testMethod void getSearchResults() {
4 MockIdentityVerificationExt mock = new MockIdentityVerificationExt();
5 id_verification.SearchRequest searchRequest= new id_verification.SearchRequest('Smith',null,null);
6 mock.search(searchRequest);
7 }
8
9 static testMethod void getVerificationContext() {
10 MockIdentityVerificationExt mock = new MockIdentityVerificationExt();
11 //To keep it simple here, we are passing null in the paramater & returning a default mock context
12 mock.getVerifiers(null);
13 }
14}