一、引言
在企業風控、背景調查、盡職調查等場景中,判決書查詢是一個非常重要的環節。通過判決書查詢,可以了解個人或企業的司法涉訴情況,為風險評估提供數據支持。本文將詳細介紹如何開發和使用一個司法涉訴查詢API接口,包括客戶端實現、數據處理與風險評估等核心技術點。
二、API概述
本文介紹的"個人司法涉訴(詳版)"API可查詢個人的司法涉訴信息,包括失信被執行人、執行信息、刑事案件等多維度數據。該API通過加密傳輸,確保數據安全,返回標準化的風險評估結果。
- API代碼:FLXG0V4B
- API名稱:個人司法涉訴(詳版)
- 請求端點:https://api.tianyuanapi.com/api/v1/FLXG0V4B
- 獲取密鑰:https://tianyuanapi.com
三、API客戶端實現
3.1 ApiClient類
首先,我們需要實現一個API客戶端類處理與
import json
import time
import base64
import requests
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytesclass ApiClient:def __init__(self, use_mock=None):"""初始化API客戶端"""# 從配置獲取API設置self.base_url = 'https://api.tianyuanapi.com'self.access_id = '您的ACCESS_ID' # 請替換為實際的ACCESS_IDself.encryption_key = '您的加密密鑰' # 請替換為實際的加密密鑰self.use_mock = False if use_mock is None else use_mockself.timeout = 30def call_api(self, api_code, params, query_id=None):"""調用API接口Args:api_code: API代碼params: 請求參數query_id: 查詢ID,用于記錄日志Returns:解密后的響應數據 """# 如果是模擬模式,直接返回模擬數據if self.use_mock:return self._get_mock_response(api_code, params)try:# 將參數轉換為JSON字符串params_json = json.dumps(params, ensure_ascii=False)# 對請求參數進行加密encrypted_data = self._encrypt_data(params_json)# 構建請求頭headers = {'Content-Type': 'application/json','Access-Id': self.access_id}# API請求地址url = f"{self.base_url}/api/v1/{api_code}"# 發送請求response = requests.post(url,json={'data': encrypted_data},headers=headers,timeout=self.timeout)# 檢查響應狀態碼if response.status_code != 200:return {'success': False,'code': response.status_code,'message': f"API請求失敗,狀態碼: {response.status_code}",'data': None}# 解析響應數據response_json = response.json()# 檢查響應格式if 'code' not in response_json:# 直接返回業務數據的APIreturn {'success': True,'code': 0,'message': '成功','data': response_json}# 標準API響應處理api_response_code = response_json.get('code')api_message = response_json.get('message', '')encrypted_response = response_json.get('data', '')# 判斷API響應碼if api_response_code != 0:return {'success': False,'code': api_response_code,'message': api_message,'data': None}# 如果沒有返回加密數據if not encrypted_response:return {'success': True,'code': 0,'message': api_message,'data': {}}# 解密響應數據decrypted_data = self._decrypt_data(encrypted_response)result = json.loads(decrypted_data)return {'success': True,'code': 0,'message': api_message,'data': result}except Exception as e:return {'success': False,'code': -1,'message': f"調用API異常: {str(e)}",'data': None}def _encrypt_data(self, data):"""AES-128-CBC加密數據"""# 將16進制密鑰轉換為字節key = bytes.fromhex(self.encryption_key)# 生成隨機IV(初始化向量)iv = get_random_bytes(16)# 創建AES-CBC加密器cipher = AES.new(key, AES.MODE_CBC, iv)# 對數據進行填充并加密padded_data = pad(data.encode('utf-8'), AES.block_size)encrypted_data = cipher.encrypt(padded_data)# 將IV和加密后的數據拼接,并進行Base64編碼result = base64.b64encode(iv + encrypted_data).decode('utf-8')return resultdef _decrypt_data(self, encrypted_data):"""AES-128-CBC解密數據"""# 將16進制密鑰轉換為字節key = bytes.fromhex(self.encryption_key)# Base64解碼encrypted_bytes = base64.b64decode(encrypted_data)# 提取IV和加密數據iv = encrypted_bytes[:16]ciphertext = encrypted_bytes[16:]# 創建AES-CBC解密器cipher = AES.new(key, AES.MODE_CBC, iv)# 解密并去除填充padded_data = cipher.decrypt(ciphertext)decrypted_data = unpad(padded_data, AES.block_size).decode('utf-8')return decrypted_data
服務器的通信,包括請求加密、發送和響應解密:
四、司法涉訴查詢接口實現
4.1 查詢函數實現
def query(name, id_card, query_id=None, use_mock=False):"""查詢個人司法涉訴信息Args:name: 姓名id_card: 身份證號碼query_id: 查詢ID,用于日志記錄use_mock: 是否使用模擬數據Returns:查詢結果字典"""start_time = time.time()print(f"開始查詢個人司法涉訴信息: name={name}, id_card={id_card[:6]}****{id_card[-4:]}")# 參數驗證if not name or not id_card:print("參數錯誤:姓名和身份證號不能為空")return {"api_code": "FLXG0V4B","狀態": "失敗","錯誤信息": "姓名和身份證號不能為空"}# 計算授權時間范圍(當前日期前后三天)today = datetime.now()start_date = today - timedelta(days=3)end_date = today + timedelta(days=3)auth_date = f"{start_date.strftime('%Y%m%d')}-{end_date.strftime('%Y%m%d')}"# 準備API請求參數params = {"name": name,"id_card": id_card,"auth_date": auth_date,"description": "個人司法涉訴(詳版)"}try:# 調用APIapi_client = ApiClient(use_mock=use_mock)api_result = api_client.call_api("FLXG0V4B", params, query_id=query_id)# 初始化基本返回結構result = {"api_code": "FLXG0V4B","狀態": "失敗","風險等級": "無風險","風險評分": 0,"風險描述": "未查詢到司法涉訴記錄","風險詳情": {"案件統計": {},"案件列表": [],"各類案件統計": {"刑事案件": 0,"民事案件": 0,"行政案件": 0,"執行案件": 0,"強制清算與破產案件": 0,"非訴保全審查": 0,"失信被執行人": 0,"限制高消費": 0}}}# 處理API響應if not api_result.get('success'):error_message = api_result.get('message', '未知錯誤')result["錯誤信息"] = error_messagereturn result# 獲取API返回的數據response_data = api_result.get('data', {})# 檢查API狀態碼api_code = Noneapi_message = Noneapi_id = Noneif isinstance(response_data, dict):api_code = response_data.get("code", "")api_message = response_data.get("message", "")api_id = response_data.get("id", "")# 處理API狀態碼if api_code and api_code != "00000" and api_code != "200":result["狀態"] = "失敗"result["錯誤信息"] = f"{api_message}"result["API狀態碼"] = api_coderesult["API流水號"] = api_idreturn result# API調用成功,解析結果result["狀態"] = "成功"result["API狀態碼"] = api_code or "00000"result["API流水號"] = api_id or ""# 判斷結果是否為空if not response_data or (isinstance(response_data, dict) and "data" not in response_data):print("API返回空結果")result["風險描述"] = "未查詢到司法涉訴記錄"return result# 解析司法涉訴數據,評估風險risk_assessment = assess_judicial_risk(response_data)# 填充風險評估結果result["風險等級"] = risk_assessment.get("風險等級", "無風險")result["風險評分"] = risk_assessment.get("風險評分", 0)result["風險描述"] = risk_assessment.get("風險描述", "未查詢到司法涉訴記錄")result["風險詳情"]["案件統計"] = risk_assessment.get("案件統計", {})result["風險詳情"]["案件列表"] = risk_assessment.get("案件列表", [])result["風險詳情"]["各類案件統計"] = risk_assessment.get("各類案件統計", {})return resultexcept Exception as e:print(f"司法涉訴查詢異常: {str(e)}")return {"api_code": "FLXG0V4B","狀態": "失敗","錯誤信息": f"處理異常: {str(e)}","風險等級": "無風險","風險評分": 0,"風險描述": "查詢過程發生異常","風險詳情": {"各類案件統計": {"刑事案件": 0,"民事案件": 0,"行政案件": 0,"執行案件": 0,"強制清算與破產案件": 0,"非訴保全審查": 0,"失信被執行人": 0,"限制高消費": 0}}}
最佳實踐
- 合規使用:根據《數據安全法》和《個人信息保護法》,查詢個人司法涉訴信息需獲得被查詢人授權。本API設計了auth_date參數用于傳遞授權日期信息。
- 錯誤處理:在生產環境中,務必添加完善的錯誤處理機制,應對可能出現的網絡超時、服務器錯誤等異常情況。
- 結果緩存:對于頻繁查詢的對象,考慮實現緩存機制,減少API調用次數,降低成本。
- 日志記錄:記錄每次API調用的請求參數和響應結果,便于后期問題排查。
- 響應解析:API返回的數據可能非常復雜,建議實現專門的解析函數,提取關鍵信息。
- 異步處理:對于大批量查詢場景,考慮使用異步處理方式,如Celery任務隊列,避免阻塞主流程。
八、總結
本文詳細介紹了個人司法涉訴查詢API的開發與使用,包括客戶端實現、數據處理與風險評估算法。通過該API,可以全面了解個人的司法涉訴情況,為風險控制、盡職調查等業務場景提供數據支持。
開發過程中,我們需要重視數據安全和隱私保護,確保在合規的前提下使用API。同時,針對不同業務場景,可對風險評估算法進行調整,優化風險評分的精確度和實用性。