常见问题2026-11-10· 9 分钟阅读

接口参数怎么传:7 个端点的必填参数与签名字段对照

核验类与短信 7 个端点的必填参数、参与签名的字段、必填但不参与签名的字段一次列清。附参数名写错返回 1108 而非 1104、title 必填与 OpenAPI required 不一致等 5 个坑。

诺
诺正通研究院

一句话结论

7 个接口的必填参数和参与签名的字段不是一回事:核验类 6 个端点里有 3 个、短信接口算 1 个,合计 4 个端点存在"必填但不参与签名"的字段——改这些字段,签名不变,服务端也不会报签名错,只会给你一个业务结论。参数传错要分三层看:参数名写错 → 1108 参数异常;值格式错 → 1103 编码不合法;只有参与签名的字段算错 → 1104 签名不合法。

7 个端点的必填参数和参与签名的字段分别是什么?

签名统一是 md5(按各接口文档固定顺序拼接业务字段 + tm + appkey),拼接不带分隔符。下面这张表把"必填"和"进签名"分开列——第 4 列是本文的重点。

端点必填参数(除 sign)参与签名的业务字段必填但不参与签名
/v2/id-servermall_id, realname, idcard, tmrealname, idcard—
/phone/namemall_id, realname, phone, tmrealname, phone—
/phone/three-detailmall_id, realname, idcard, phone, tmrealname, idcardphone
/v3/card2-servermall_id, realname, cardnum, tmrealname, cardnum—
/v3/card3-servermall_id, realname, idcard, cardnum, tmrealname, cardnumidcard
/v3/card4-servermall_id, realname, idcard, cardnum, bankPreMobile, tmrealname, cardnumidcard、bankPreMobile
/sms.phpmall_id, phone, code, titlephone, codetitle

两点补充:

  • /phone/name 不传 idcard。二要素端点的参数表里根本没有身份证号这一项;文档注意事项里"本接口签名不包含 idcard"的提醒,容易被读成"要传但不参与签名",实际是连传都不用传。
  • /v3/card2-server 同样不传 idcard。银行卡二要素 = 卡号 + 姓名;要带身份证号必须换三要素端点。
  • 必填但不参与签名的字段,改错了会报签名错吗?

    这是最容易被漏掉的一类。4 个端点里有 4 个字段必填却不进签名串。以银行卡四要素为例,idcard 与 bankPreMobile 都必填,但签名只算 5 个字段(mall_id + realname + cardnum + tm + appkey)。

    后果是:把这两个参数的值改错,签名依然计算通过,服务端照常受理,然后返回一个业务结论——不会报 1104。联调时如果只看错误码,很容易误判成"接口没问题,是用户数据不对"。

    同一组示例值本地复算(appkey 用示例值,换成你自己的即可复现):

    银行卡四要素 正确签名(不含 idcard / bankPreMobile)
    

    md5("100001"+"张三"+"6222021234567890123"+"1730000000000"+"test_appkey") = 59553c65d1e98cad3a1aa89cb51dc3c9

    误把 idcard 拼进签名 md5("100001"+"张三"+"11010519491231002x"+"6222021234567890123"+"1730000000000"+"test_appkey") = e6a60ef8b04688ae1127b3aa7b38d3c2

    误把 bankPreMobile 拼进签名 md5("100001"+"张三"+"6222021234567890123"+"13900139000"+"1730000000000"+"test_appkey") = 81093a54b7640ef94ed13932d02b9577

    三个结果互不相同——这正是"多拼一个字段就 1104"的机制。反过来说,只要这两个字段的值和签名无关,改它们就不会触发 1104,所以参数值写错要靠"逐字核对请求参数"发现,不能等签名报错来提示你。

    手机号三要素详版是同一个形状:phone 必填但不参与签名(签名 = mall_id + realname + idcard + tm + appkey)。

    参数名写错了会返回 1108 还是 1104?

    参数名的大小写和拼写属于参数层,不参与签名,所以写错不会报签名错。

    银行卡四要素的预留手机号参数名固定是 bankPreMobile(大驼峰),写成 bankPremobile、mobile 或 phone,服务端会认为缺必填参数,返回 1108 参数异常。同样,证件号写成 idcard_no、卡号写成 card_no 也都落在 1108。

    排查顺序上可以这样区分:

    现象落在哪一层怎么改
    1104 签名不合法签名层核对拼接顺序、是否多拼了不参与签名的字段
    1108 参数异常参数层核对参数名拼写与大小写、必填项是否齐全
    1103 编码不合法值格式层身份证末位 x、卡号空格与分隔符、手机号位数

    短信的 title 参数到底要不要传?

    短信接口的参数表把 title(模板固定内容)标为"是(必填)",同一行的说明却写着"可为空";而机器可读规格(openapi 的 SmsRequest)里,required 列表是 [mall_id, phone, code, sign],并不包含 title。

    两份文档在同一处不一致,联调时先实测再下结论:直接按参数表把 title 传上去(传空串也可以),如果服务端报参数异常再按 required 列表去掉它。不要凭规格文件推断行为,也不要凭参数表推断——这类地方实测一次比读十遍文档快。

    标题字段的定位要记住:它不参与签名(短信签名 = md5(mall_id + phone + code + appkey)),所以改 title 不用重算签名;真正参与签名的是 code(短信内容原文),改一个字都要重算。

    身份证末位是 X 时要转成小写 x 吗?

    证件号末位是 X 时必须转成小写 x,否则返回 1103。银行卡号要去掉空格与连字符,用纯数字;手机号用 11 位大陆号码,不带 +86 与空格。

    这几个端点的值格式要求都能在各自接口文档的注意事项里找到。

    短信接口可以直接发 JSON 请求体吗?

    短信接口只接受 application/x-www-form-urlencoded 表单(或 GET 查询串);发 JSON 请求体不会被解析。核验类接口同样是表单编码。

    另外短信签名不含 tm,核验类接口的 tm 是 13 位毫秒时间戳且必须与签名时用同一个值——这是两套签名规则最容易互串的地方。

    上线检查单

  • [ ] 每个端点单独建一张参数表,不要用一份模板改字段名
  • [ ] 签名函数按端点查表,不按业务推导(哪些字段进签名,照官方顺序表抄)
  • [ ] 不参与签名的必填字段单独列出来,联调时逐字核对参数值
  • [ ] 参数名大小写按文档抄(bankPreMobile)
  • [ ] 证件号末位转小写 x;卡号去分隔符
  • [ ] 短信用表单编码;短信签名不含 tm
  • [ ] 只在 status=2001 时读 data.code
  • 相关阅读

  • 通用接入规范:签名顺序与错误码:各接口签名顺序表与返回结构
  • API 签名机制一篇讲透:md5 拼接原理与 5 个常见踩坑
  • 手机号三要素核验返回 1003/1004/1005:三要素详版的判定与处置
  • 银行卡四要素核验怎么接:二/三/四要素选型与签名坑
  • 错误码详解:1000-1110 全码表:参数码、鉴权码、账户码的完整区分
  • 关于诺正通

    身份证、手机号、银行卡核验接口与短信验证码接口按量计费、面议,含 100 次免费试用用于联调,具体价格向商务询价。

    #接口参数#签名参与字段#1108 参数异常#接入避坑#参数对照表

    看完想立刻接入?

    100 次免费调用,1 个工作日开通

    限时新用户 100 次免费

    1 个工作日开通 · 7×24 技术支持