createVerificationSession method
Create a new verification session
Implementation
@override
Future<Map<String, dynamic>> createVerificationSession(Map<String, dynamic> sessionData, {File? documentFile}) async {
try {
if (documentFile != null) {
// Create multipart request when document file is provided (for facematch)
final request = http.MultipartRequest(
'POST',
Uri.parse('$_baseApiUrl/verification_sessions'),
);
// Add headers including Accept-Language
final headers = getMultipartHeaders();
request.headers.addAll(headers);
// Add session data fields
sessionData.forEach((key, value) {
request.fields[key] = value.toString();
});
// Add document file
final documentStream = http.ByteStream(documentFile.openRead());
final documentLength = await documentFile.length();
request.files.add(http.MultipartFile(
'document_file',
documentStream,
documentLength,
filename: documentFile.path.split('/').last,
));
final streamedResponse = await request.send();
final response = await http.Response.fromStream(streamedResponse);
if (response.statusCode == 200 || response.statusCode == 201) {
final responseData = jsonDecode(response.body);
print('=== API RESPONSE: CREATE VERIFICATION SESSION ===');
print('Status Code: ${response.statusCode}');
print('Response Data: $responseData');
print('=====================================');
return responseData;
} else {
print('=== API ERROR: CREATE VERIFICATION SESSION ===');
print('Status Code: ${response.statusCode}');
print('Error Body: ${response.body}');
print('=====================================');
throw Exception('Failed to create verification session: ${response.statusCode}');
}
} else {
// Standard JSON request when no document file
final headers = getHeaders();
print('🔑 createVerificationSession: JSON request headers: $headers');
print('🔑 createVerificationSession: Request URL: $_baseApiUrl/verification_sessions');
print('🔑 createVerificationSession: Request body: $sessionData');
// Double-check token availability right before request
print('🔑 Final token check before HTTP request:');
print('🔑 _bearerToken: $_bearerToken');
print('🔑 _hasValidBearerToken: ${_hasValidBearerToken}');
print('🔑 Authorization header in headers: ${headers['Authorization']}');
print('🔑 About to make HTTP POST request:');
print('🔑 URL: $_baseApiUrl/verification_sessions');
print('🔑 Headers: $headers');
print('🔑 Body: ${jsonEncode(sessionData)}');
// Try using Dio instead of http package to see if that helps
try {
final dio = Dio();
dio.options.headers.addAll(headers);
print('🔑 Using Dio for HTTP request');
final response = await dio.post(
'$_baseApiUrl/verification_sessions',
data: sessionData,
);
print('🔑 Dio Response received:');
print('🔑 Status Code: ${response.statusCode}');
print('🔑 Response Headers: ${response.headers}');
print('🔑 Response Data: ${response.data}');
if (response.statusCode == 200 || response.statusCode == 201) {
final responseData = response.data;
print('=== API RESPONSE: CREATE VERIFICATION SESSION (NO DOCUMENT) - DIO ===');
print('Status Code: ${response.statusCode}');
print('Response Data: $responseData');
print('=====================================');
return responseData;
} else {
print('=== API ERROR: CREATE VERIFICATION SESSION (NO DOCUMENT) - DIO ===');
print('Status Code: ${response.statusCode}');
print('Error Data: ${response.data}');
print('=====================================');
throw Exception('Failed to create verification session: ${response.statusCode}');
}
} catch (dioError) {
print('🔑 Dio request failed, falling back to http package: $dioError');
final httpResponse = await http.post(
Uri.parse('$_baseApiUrl/verification_sessions'),
headers: headers,
body: jsonEncode(sessionData),
);
print('🔑 HTTP Response received:');
print('🔑 Status Code: ${httpResponse.statusCode}');
print('🔑 Response Headers: ${httpResponse.headers}');
print('🔑 Response Body: ${httpResponse.body}');
if (httpResponse.statusCode == 200 || httpResponse.statusCode == 201) {
final responseData = jsonDecode(httpResponse.body);
print('=== API RESPONSE: CREATE VERIFICATION SESSION (NO DOCUMENT) ===');
print('Status Code: ${httpResponse.statusCode}');
print('Response Data: $responseData');
print('=====================================');
return responseData;
} else {
print('=== API ERROR: CREATE VERIFICATION SESSION (NO DOCUMENT) ===');
print('Status Code: ${httpResponse.statusCode}');
print('Error Body: ${httpResponse.body}');
print('=====================================');
throw Exception('Failed to create verification session: ${httpResponse.statusCode}');
}
}
}
} catch (e) {
throw Exception('Error creating verification session: $e');
}
}