将 Didit 地址证明与 FastAPI 和 MongoDB 集成 (ZH)
了解如何通过将 Didit 的地址证明验证与 FastAPI 后端和 MongoDB 集成,构建可扩展的 KYC 系统。本指南涵盖环境设置、文档上传处理和验证流程。.

无缝集成将 Didit 的地址证明 API 与 FastAPI 和 MongoDB 集成,创建强大且可扩展的 KYC 后端,简化您的验证工作流程。
自动化验证利用 Didit 的 AI 原生能力,自动提取、验证地址文件并进行真实性检查,减少人工审查并提高准确性。
可配置的工作流程利用 Didit 灵活的设置,为各种验证结果(例如姓名不匹配或文件质量问题)定义自定义操作,确保符合不同的法规要求。
可扩展且经济高效Didit 提供模块化、开发者优先的方法,包括免费核心 KYC 和按成功检查付费的定价模式,使其成为寻求可扩展身份验证的各种规模企业的理想选择。
KYC 中地址证明验证的挑战
地址证明 (PoA) 验证是金融服务到在线市场等各个行业“了解您的客户”(KYC) 流程的关键组成部分。它对于确认用户的实际住址至关重要,有助于防止欺诈、遵守反洗钱 (AML) 法规并建立信任。然而,手动审查水电费账单、银行对账单和政府签发的文件既耗时又容易出错,并且无法扩展。企业需要一个强大、自动化且安全的解决方案来处理 PoA 验证的复杂性,同时保持流畅的用户体验。
传统的 PoA 解决方案通常涉及复杂的集成、高昂的设置成本和僵化的工作流程。这正是 Didit 等现代 AI 原生身份平台脱颖而出之处,它提供了一种开发者优先的方法,简化了集成并提供了强大、自动化的验证功能。通过将 Didit 的地址证明 API 与 FastAPI 等可扩展后端和 MongoDB 等灵活的 NoSQL 数据库相结合,企业可以构建高效且合规的 KYC 系统。
设置您的 FastAPI 和 MongoDB 环境
首先,您需要一个 FastAPI 应用程序和一个 MongoDB 实例。选择 FastAPI 是因为它具有高性能和易用性,而 MongoDB 则提供了存储各种文档类型和验证报告的灵活性。以下是一个基本设置:
1. FastAPI 应用程序设置
首先,安装 FastAPI 和 Uvicorn:
pip install fastapi uvicorn python-multipart motor
创建一个 main.py 文件:
from fastapi import FastAPI, UploadFile, File, Form, HTTPException
from motor.motor_asyncio import AsyncIOMotorClient
from typing import Optional
import httpx
import os
app = FastAPI()
# MongoDB setup
MONGO_DETAILS = os.getenv("MONGO_DETAILS", "mongodb://localhost:27017")
client = AsyncIOMotorClient(MONGO_DETAILS)
database = client.didit_kyc
# Didit API Key
DIDIT_API_KEY = os.getenv("DIDIT_API_KEY")
if not DIDIT_API_KEY:
raise ValueError("DIDIT_API_KEY environment variable not set")
@app.on_event("startup")
async def startup_db_client():
app.mongodb_client = client
app.mongodb = database
@app.on_event("shutdown")
async def shutdown_db_client():
app.mongodb_client.close()
@app.get("/health")
async def health_check():
return {"status": "ok", "message": "FastAPI is running"}
2. MongoDB 连接
确保 MongoDB 正在运行,无论是本地还是通过云服务。motor 库支持与 MongoDB 的异步交互,这对于高性能 FastAPI 应用程序至关重要。
集成 Didit 的地址证明 API
Didit 的地址证明 API 允许您提交文档图像或 PDF 进行验证,提取和验证地址信息,执行真实性检查,并返回结构化数据。得益于 Didit 的 AI 原生架构,此过程旨在实现高度自动化和准确。
1. 将文档发送到 Didit
您需要在 FastAPI 应用程序中创建一个端点,以接受文档上传并将其转发到 Didit。Didit 的 API 支持各种文档类型(PDF、JPEG、PNG、WebP、TIFF),并提供可配置的参数以增强验证。
@app.post("/verify-poa/")
async def verify_proof_of_address(
document: UploadFile = File(...),
expected_first_name: Optional[str] = Form(None),
expected_last_name: Optional[str] = Form(None),
expected_address: Optional[str] = Form(None),
expected_country: Optional[str] = Form(None),
poa_name_mismatch_action: str = Form("DECLINE"),
poa_document_issues_action: str = Form("DECLINE"),
poa_document_authenticity_action: str = Form("DECLINE"),
):
if not document.content_type.startswith(('image/', 'application/pdf')):
raise HTTPException(status_code=400, detail="Invalid document format. Only images and PDFs are allowed.")
DIDIT_POA_ENDPOINT = "https://verification.didit.me/v3/poa/"
headers = {"x-api-key": DIDIT_API_KEY}
# Prepare form data for Didit API
files = {'document': (document.filename, document.file.read(), document.content_type)}
data = {
"poa_name_mismatch_action": poa_name_mismatch_action,
"poa_document_issues_action": poa_document_issues_action,
"poa_document_authenticity_action": poa_document_authenticity_action,
}
if expected_first_name: data["expected_first_name"] = expected_first_name
if expected_last_name: data["expected_last_name"] = expected_last_name
if expected_address: data["expected_address"] = expected_address
if expected_country: data["expected_country"] = expected_country
async with httpx.AsyncClient() as client:
try:
didit_response = await client.post(DIDIT_POA_ENDPOINT, headers=headers, files=files, data=data, timeout=30.0)
didit_response.raise_for_status()
poa_result = didit_response.json()
# Store the result in MongoDB
verification_record = {
"filename": document.filename,
"user_id": "some_user_id", # Replace with actual user ID from your system
"timestamp": datetime.utcnow(),
"didit_response": poa_result,
"status": poa_result['poa']['status']
}
await app.mongodb["poa_verifications"].insert_one(verification_record)
return {"message": "POA verification initiated and result stored.", "result": poa_result}
except httpx.HTTPStatusError as e:
raise HTTPException(status_code=e.response.status_code, detail=f"Didit API error: {e.response.text}")
except Exception as e:
raise HTTPException(status_code=500, detail=f"An unexpected error occurred: {str(e)}")
此端点处理文件上传,为 Didit 的 API 构建请求,然后处理响应。请注意使用 httpx.AsyncClient 进行非阻塞 HTTP 请求,这对于 FastAPI 的性能至关重要。
2. 了解 Didit 的地址证明报告
Didit 为每个 PoA 验证提供全面的 JSON 报告。此报告包括:
poa.status:整体验证状态(已批准、已拒绝、正在审核)。poa.document_type:自动检测的文档类型(例如,UTILITY_BILL、BANK_STATEMENT)。poa.issuer、poa.issue_date、poa.expiration_date:关键文档详细信息。poa.name_on_document、poa.poa_address、poa.poa_formatted_address、poa.poa_parsed_address:提取和结构化的地址信息。poa.warnings:检测到的任何警告或问题列表,例如POOR_DOCUMENT_QUALITY、NAME_MISMATCH_WITH_PROVIDED或SUSPECTED_DOCUMENT_MANIPULATION。
这些详细的见解允许进行复杂的决策和自动化处理边缘情况。Didit 的可配置验证设置,例如 poa_name_mismatch_action 或 poa_document_issues_action,允许您定义系统如何响应特定风险,确保合规性并减少人工干预。
使用 MongoDB 存储和管理验证数据
MongoDB 是存储 PoA 验证结果的绝佳选择,因为它具有灵活的文档模型。您可以直接存储 Didit 的整个 JSON 响应,从而无需预定义模式即可轻松查询和分析。这种灵活性在验证要求发生变化或出现新数据点时至关重要。
1. 存储验证记录
如 FastAPI 示例所示,didit_response 直接存储在 poa_verifications 集合中。这种方法捕获了 Didit 提供的所有丰富数据。
2. 查询验证记录
您可以轻松查询 MongoDB 集合以检索验证状态、需要审查的文档或特定的用户数据:
from datetime import datetime
@app.get("/poa-verifications/{user_id}")
async def get_poa_history(user_id: str):
records = await app.mongodb["poa_verifications"].find({"user_id": user_id}).to_list(100)
if not records:
raise HTTPException(status_code=404, detail="No POA records found for this user.")
# MongoDB _id is an ObjectId, convert to string for JSON serialization
for record in records:
record["_id"] = str(record["_id"])
return records
@app.get("/poa-needs-review/")
async def get_poa_needs_review():
records = await app.mongodb["poa_verifications"].find({"status": "In Review"}).to_list(100)
for record in records:
record["_id"] = str(record["_id"])
return records
这些端点允许您获取用户的 PoA 历史记录或检索所有需要手动审查的验证,展示了 MongoDB 在管理复杂合规数据方面的强大功能。
Didit 如何提供帮助
Didit 提供了一个 AI 原生、开发者优先的身份平台,可简化地址证明等复杂的身份验证流程。我们的地址证明产品通过从各种文档中提取和验证关键信息,提供全面的验证。它自动检测文档类型,将地址解析为结构化格式,并执行真实性检查以识别潜在的操作。借助 Didit,您将受益于:
- 模块化架构:轻松将 PoA 验证作为独立服务集成,或将其与 Didit 的其他产品(如身份验证和AML 筛选与监控)结合使用,以构建完整的 KYC 工作流程。
- AI 原生准确性:我们先进的 AI 和机器学习算法确保数据提取和欺诈检测的高准确性,最大限度地减少误报和漏报。
- 可配置的工作流程:通过我们的 API 或无代码业务控制台,直接为不同的风险场景(例如姓名不匹配、文档质量问题或可疑操作)定义自定义规则和操作。
- 开发者优先体验:凭借即时沙盒、全面的公共文档和简洁的 API,开发者可以快速高效地集成 Didit。
- 经济高效的扩展:Didit 提供免费核心 KYC 和按成功检查付费模式,消除了设置费用,并确保您只需为您使用的服务付费,使其成为可扩展运营的理想选择。
通过利用 Didit,企业可以自动化信任,简化合规性,并提供卓越的用户入职体验,而无需承担复杂基础设施或人工审查的负担。
准备好开始了吗?
准备好亲身体验 Didit 的强大功能了吗?立即获取免费演示。
使用Didit 的免费套餐,免费开始验证身份。