完成身份认证对接 qcloud

This commit is contained in:
aaron 2025-01-24 21:56:56 +08:00
parent 1bfeb23782
commit fd28f612b4
3 changed files with 93 additions and 1 deletions

View File

@ -20,6 +20,7 @@ from datetime import datetime, timedelta
from sqlalchemy import text from sqlalchemy import text
from app.models.community import CommunityDB from app.models.community import CommunityDB
from app.models.user_auth import UserAuthDB, UserAuthCreate, UserAuthInfo from app.models.user_auth import UserAuthDB, UserAuthCreate, UserAuthInfo
from app.core.qcloud import qcloud_manager
router = APIRouter() router = APIRouter()
@ -516,11 +517,24 @@ async def create_user_auth(
return error_response(code=400, message="该用户已有认证记录") return error_response(code=400, message="该用户已有认证记录")
try: try:
# 调用实名认证
verify_result = await qcloud_manager.verify_id_card(
id_card=auth.id_number,
name=auth.name
)
# 验证不通过
if verify_result["Result"] != "0": # 0 表示一致,其他值表示不一致
return error_response(
code=400,
message=f"实名认证失败: {verify_result['Description']}"
)
# 创建认证记录 # 创建认证记录
auth_record = UserAuthDB( auth_record = UserAuthDB(
user_id=current_user.userid, user_id=current_user.userid,
name=auth.name, name=auth.name,
id_number=auth.id_number, id_number=auth.id_number
) )
db.add(auth_record) db.add(auth_record)

View File

@ -38,6 +38,7 @@ class Settings(BaseSettings):
# 腾讯云短信配置 # 腾讯云短信配置
TENCENT_SECRET_ID: str = "AKIDxnbGj281iHtKallqqzvlV5YxBCrPltnS" TENCENT_SECRET_ID: str = "AKIDxnbGj281iHtKallqqzvlV5YxBCrPltnS"
TENCENT_SECRET_KEY: str = "ta6PXTMBsX7dzA7IN6uYUFn8F9uTovoU" TENCENT_SECRET_KEY: str = "ta6PXTMBsX7dzA7IN6uYUFn8F9uTovoU"
TENCENT_REGION: str = "ap-guangzhou" # 接口地域
SMS_SDK_APP_ID: str = "1400961527" SMS_SDK_APP_ID: str = "1400961527"
SMS_SIGN_NAME: str = "蜂快到家公众号" SMS_SIGN_NAME: str = "蜂快到家公众号"
SMS_TEMPLATE_ID: str = "2353143" # 验证码短信模板ID SMS_TEMPLATE_ID: str = "2353143" # 验证码短信模板ID

77
app/core/qcloud.py Normal file
View File

@ -0,0 +1,77 @@
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.faceid.v20180301 import faceid_client, models
from app.core.config import settings
import json
class QCloudManager:
"""腾讯云服务管理类"""
def __init__(self):
"""初始化认证信息"""
self.cred = credential.Credential(
settings.TENCENT_SECRET_ID,
settings.TENCENT_SECRET_KEY
)
# 配置 HTTP
self.http_profile = HttpProfile()
self.http_profile.endpoint = "faceid.tencentcloudapi.com"
# 配置 Client
self.client_profile = ClientProfile()
self.client_profile.httpProfile = self.http_profile
# 初始化人脸识别客户端
self.faceid_client = faceid_client.FaceidClient(
self.cred,
settings.TENCENT_REGION,
self.client_profile
)
async def verify_id_card(self, id_card: str, name: str) -> dict:
"""
身份证实名认证
Args:
id_card: 身份证号
name: 姓名
Returns:
dict: {
"Result": "0"/"1"/"2", # 0:一致 1/2:不一致
"Description": str, # 结果描述
"RequestId": str # 请求ID
}
Raises:
TencentCloudSDKException: 调用API失败
"""
try:
# 构建请求
req = models.IdCardVerificationRequest()
params = {
"IdCard": id_card,
"Name": name
}
req.from_json_string(json.dumps(params))
# 发送请求
response = self.faceid_client.IdCardVerification(req)
# 解析结果
result = json.loads(response.to_json_string())
return {
"Result": result.get("Result", "0"),
"Description": result.get("Description", "验证失败"),
"RequestId": result.get("RequestId", "")
}
except TencentCloudSDKException as e:
raise Exception(f"身份证实名认证失败: {str(e)}")
# 创建全局实例
qcloud_manager = QCloudManager()