ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

银行卡识别接口接入教程:参数、请求示例与返回字段解读

银行卡识别接口接入教程:参数、请求示例与返回字段解读

在线开户、支付绑卡这类流程里,让用户手动输入一长串卡号既慢又容易出错。银行卡识别接口可以从图片中识别卡号与有效期,辅助录入和核对。本文从第一次调用写起:要准备什么、最小请求怎么发、返回值怎么看。

一、适用场景

  • 在线开户:用户上传银行卡照片后自动填入卡号,减少手输错误。
  • 支付绑卡辅助录入:识别后由用户确认,再进入后续流程。
  • 卡号核对:用户提交的卡号与图片识别结果做一致性比对。
  • 客服工单:用户上传卡面截图时,辅助提取关键信息。

注意:识别结果是“辅助录入”用的,最终仍应让用户确认,不要直接跳过人工确认环节。

二、接口能力边界

项目说明
请求方法POST
参数input_type、input_data
识别内容银行卡号、有效期
输入方式URL、Base64 两种
图片格式jpg、png
文件大小不超过 10MB
识别效果图片清晰、卡面完整时效果更好

需要明确:接口只识别卡号与有效期,不校验卡号真实性,也不做银行归属查询。识别成功不等于卡号有效,业务上仍需走各自的校验流程。

三、请求参数与鉴权

参数共两个:

参数说明
input_type输入类型,区分 URL 与 Base64,具体取值以文档为准
input_data输入数据,与input_type对应

鉴权方式、请求头字段名与请求体编码,素材未给出,以文档为准。接入前请先在文档中确认 API Key 的传递位置。

调用前先做本地校验:文件格式是否为 jpg/png、大小是否在 10MB 以内、卡面是否完整。这三项能过滤掉大部分失败请求。

四、最小请求示例

下面是一个可复制的 curl 模板,YOUR_API_KEY、input_type取值与input_data内容均为占位,请按文档替换。

curl -X POST 'https://v1.apizero.cn/api/ocr-bank-card' \ -H 'Content-Type: application/json' \ -H 'Authorization: YOUR_API_KEY' \ -d '{ "input_type": "<按文档填写,区分 URL 与 Base64>", "input_data": "<图片 URL 或 Base64 字符串>" }'

对应的 Python 调用示例,用本地图片转 Base64 后提交:

import base64 import requests def read_bank_card(image_path: str, input_type: str, api_key: str) -> dict: with open(image_path, "rb") as f: raw = f.read() if len(raw) > 10 * 1024 * 1024: raise ValueError("图片超过 10MB") input_data = base64.b64encode(raw).decode("utf-8") resp = requests.post( "https://v1.apizero.cn/api/ocr-bank-card", headers={"Authorization": api_key}, json={"input_type": input_type, "input_data": input_data}, timeout=15, ) resp.raise_for_status() return resp.json()

如果使用 URL 方式,只需把input_data换成可公网访问的图片地址,input_type按文档对应取值。

五、返回值解读

素材说明返回“卡号与有效期”,具体字段名以文档为准。接入时建议按以下方式处理:

  1. 读取卡号字段,去掉识别结果中的空格,再做长度与数字格式校验。
  2. 读取有效期字段,格式(如 MM/YY 或 MM/YY 以外的形式)以文档为准,展示前统一格式化。
  3. 任一字段缺失时按“识别不完整”处理,引导用户重拍或手动输入。

一个防御式解析示例(字段名请替换为文档中的实际名称):

def parse_card(payload: dict) -> dict: data = payload.get("data") or {} number = (data.get("number") or "").replace(" ", "") # 字段名以文档为准 expiry = data.get("expiry") or "" # 字段名以文档为准 ok = number.isdigit() and 12 <= len(number) <= 19 return {"number": number, "expiry": expiry, "complete": ok}

卡号长度按行业常见范围做宽松校验即可,不要用固定 16 位硬卡,避免误杀其他卡种。

六、常见错误与排查

现象可能原因排查方向
鉴权失败Key 缺失或位置错误核对请求头,以文档为准
参数错误input_type与input_data不匹配按文档确认取值与数据形式
文件过大图片超过 10MB上传前压缩或裁剪
格式不支持非 jpg/png转码后再提交
识别为空卡面模糊、倾斜、遮挡提示用户重拍,保证卡面完整
超时图片过大或网络抖动设置超时,压缩图片后重试

识别为空通常是图片质量问题,不是接口故障。把它映射为“请重试拍摄”的提示,比直接报错更友好。

七、工程化注意事项

  • 前端预校验:在客户端就限制格式与大小,减少无效请求。
  • 用户确认:识别结果填入表单后仍需用户确认,不要自动提交。
  • 敏感数据:卡号属于敏感信息,日志中必须脱敏,Base64 图片不要落盘。
  • 传输安全:Base64 会放大体积,大图优先用 URL 方式,避免请求体过大。
  • 重试策略:只对超时和 5xx 做有限次重试,识别为空不重试。
  • 有效期展示:统一格式化后再展示,避免不同来源格式不一致。

参考文档

  • 接口文档

返回列表