Chase Orbital CIT/MIT CGEN XML 请求 DTD 错误
结论
05 - Request does not adhere to the DTD 表示 XML 结构校验失败,并非普通的交易拒绝。Orbital 尚未处理商户配置、卡号或授权逻辑,就已判定请求结构与当前端点使用的 DTD 不匹配。
CGEN 和 Y 通常只是字段值,必须放在对应的 XML 元素中,不能直接加入请求。即使元素名称正确,以下情况仍会触发同一错误:
- 当前 XML DTD 未定义该元素;
- 元素属于其他 API 或 schema 版本;
- 元素所在的父节点不正确;
- 元素顺序不符合 DTD;
- 当前
MessageType不允许使用该元素; - 请求发送到了不支持该消息结构的端点;
- 文档描述的是 REST/JSON 字段,却被直接映射到 Orbital XML。
所以,不能因为指南中出现了 CGEN 和 Y,就认为它们可以加入任意 Orbital XML Auth 请求。需要根据认证环境实际部署的 DTD、消息类型和端点,确认对应的元素名称及顺序。
为什么 XML 格式正确仍会报错
“Well-formed XML”和“符合 DTD”是两个不同的概念。
下面的 XML 语法没有问题:
<NewOrder>
<MessageType>AC</MessageType>
<SomeMITIndicator>Y</SomeMITIndicator>
</NewOrder>
但如果 SomeMITIndicator 未在该端点的 DTD 中定义,或者 DTD 要求它出现在其他元素之前,Orbital 仍会返回:
05
Request does not adhere to the DTD. Please correct and send again.
传统 DTD 通常会严格规定元素序列。例如:
<!ELEMENT NewOrder (
OrbitalConnectionUsername,
OrbitalConnectionPassword,
IndustryType,
MessageType,
BIN,
MerchantID,
TerminalID,
...
)>
按照这种定义,即使新增元素本身合法,只要位置不符合规定的序列,请求也会失败。在 Orbital XML 集成中,不能根据阅读习惯随意调整元素顺序。
CGEN 与 MIT indicator 不是同一件事
这两个概念需要分开理解:
CGEN通常表示生成或创建 customer profile;- MIT indicator 用于表明后续交易属于 merchant-initiated transaction;
- CIT/MIT 属性还可能涉及 stored credential、首次消费者授权、后续交易引用或原交易关联信息。
创建 profile 不等于自动将当前授权标记为 MIT。认证前应先确定用例处于哪个阶段:
- 消费者参与的首次交易,也就是 CIT;
- 在首次交易中保存支付凭证或创建 profile;
- 商户随后使用已保存的凭证发起 MIT;
- 确认后续 MIT 是否需要引用首次交易返回的标识。
如果在首次 CIT + profile creation 请求中加入“后续 MIT”字段,这些字段可能不符合该 MessageType 的 XML 定义。反过来,创建了 profile 也不表示后续授权已经满足 stored credential 或 MIT 的全部网络规则。
建议的排查顺序
1. 先保留已通过的 Auth 请求
以能够正常返回授权结果的 Basic CIT Auth 为起点,每次只增加一个元素:
- 原始 CIT Auth;
- 只增加 profile action;
- 再增加 profile-from-order 或同类字段;
- 最后增加 stored credential / MIT 相关字段。
这种方式可以找出第一个触发 DTD 错误的元素。不要一次加入整组 profile/MIT 字段,否则很难判断问题出在字段名称、元素位置还是字段组合。
2. 核对字段的完整 XML 名称
文档表格可能只列出值:
CGEN
Y
实际请求需要包含相应的元素,例如:
<CustomerProfileAction>CGEN</CustomerProfileAction>
<CustomerProfileFromOrderInd>Y</CustomerProfileFromOrderInd>
这里的元素名称只用于说明“字段名 + 字段值”的关系,并不代表它们已经得到当前 Orbital DTD 的确认。不同指南、接入产品或版本可能采用不同名称,Y 也不一定是该字段允许的值。
应请 Chase certification/support 明确提供以下信息:
- XML element name;
- parent element;
- DTD-defined position;
- allowed values;
- applicable
MessageType; - applicable endpoint;
- certification BIN 对应的 DTD/version。
3. 严格按照 DTD 调整元素顺序
除了确认字段是否存在,还要核对它与前后元素的顺序。下面两段 XML 对普通 XML 解析器来说都合法,但面对顺序严格的 DTD 时,可能只有一段有效:
<NewOrder>
<MessageType>AC</MessageType>
<CustomerProfileAction>CGEN</CustomerProfileAction>
<Amount>0</Amount>
</NewOrder>
<NewOrder>
<MessageType>AC</MessageType>
<Amount>0</Amount>
<CustomerProfileAction>CGEN</CustomerProfileAction>
</NewOrder>
最终应采用哪种顺序,需要以当前端点的 DTD 或 Chase 提供的认证样例为准。
4. 确认 profile creation 是否允许与当前 Auth 合并
需要向 Chase 确认认证用例采用哪种方式:
- 在一个
NewOrder请求中合并 Auth 与 profile creation; - 先执行 Auth,再发送独立的 profile 请求;
- 使用特定的 profile-specific message type;
- 通过订单字段生成 profile,而不是直接提交 profile action。
CGEN 能否用于当前请求取决于 DTD 的定义,不能只根据它的字面含义判断。
5. 分别验证首次 CIT 和后续 MIT
不要用同一份 XML 同时验证这两个阶段。
首次 CIT 请求应重点包含:
consumer participation
authorization/account verification
profile creation or credential storage
customer consent
后续 MIT 请求应重点包含:
existing profile/token reference
MIT or stored-credential classification
applicable transaction reason
original/initial transaction reference, if required
除非 Chase 的认证脚本明确要求重新生成 profile,否则后续 MIT 通常不应再次执行 CGEN。
可用于沟通结构的 XML 模板
问题中没有提供实际元素名称、DTD 内容、MessageType 和端点版本,因此无法提供一份可以确认直接运行的 Chase XML。下面的内容只能作为结构核对模板,尖括号中的占位符必须替换为当前认证环境文档规定的元素和值。
CIT Auth + Create Profile
<?xml version="1.0" encoding="UTF-8"?>
<Request>
<NewOrder>
<OrbitalConnectionUsername>...</OrbitalConnectionUsername>
<OrbitalConnectionPassword>...</OrbitalConnectionPassword>
<IndustryType>...</IndustryType>
<MessageType>...</MessageType>
<BIN>...</BIN>
<MerchantID>...</MerchantID>
<TerminalID>...</TerminalID>
<!-- 按当前 DTD 指定的顺序放置交易和支付字段 -->
<AccountNum>...</AccountNum>
<Exp>...</Exp>
<Amount>...</Amount>
<!-- 以下名称和值必须由当前 Orbital XML DTD 确认 -->
<PROFILE_ACTION_ELEMENT>CGEN</PROFILE_ACTION_ELEMENT>
<PROFILE_FROM_ORDER_ELEMENT>Y</PROFILE_FROM_ORDER_ELEMENT>
<!-- CIT / stored-credential 字段同样必须使用 DTD 中的正式名称 -->
<CIT_INDICATOR_ELEMENT>...</CIT_INDICATOR_ELEMENT>
</NewOrder>
</Request>
Subsequent MIT Auth using an existing profile
<?xml version="1.0" encoding="UTF-8"?>
<Request>
<NewOrder>
<OrbitalConnectionUsername>...</OrbitalConnectionUsername>
<OrbitalConnectionPassword>...</OrbitalConnectionPassword>
<IndustryType>...</IndustryType>
<MessageType>...</MessageType>
<BIN>...</BIN>
<MerchantID>...</MerchantID>
<TerminalID>...</TerminalID>
<!-- 引用首次 CIT 创建的 profile/token -->
<CUSTOMER_PROFILE_ID_ELEMENT>...</CUSTOMER_PROFILE_ID_ELEMENT>
<Amount>...</Amount>
<!-- 使用 XML DTD 明确定义的 MIT 字段 -->
<MIT_INDICATOR_ELEMENT>...</MIT_INDICATOR_ELEMENT>
<MIT_REASON_ELEMENT>...</MIT_REASON_ELEMENT>
<INITIAL_TRANSACTION_REFERENCE_ELEMENT>...</INITIAL_TRANSACTION_REFERENCE_ELEMENT>
</NewOrder>
</Request>
这些模板只用于区分首次 CIT/profile creation 与 subsequent MIT,不能直接提交到生产或认证端点。
QuickResp 与完整端点
不能默认 QuickResp 和完整 Orbital 端点使用完全相同的请求 schema。即使它们最终进入同一个处理平台,也可能存在以下差异:
- 接受的根元素或消息类型不同;
- 部署的 DTD 版本不同;
- 支持的可选字段集合不同;
- profile 或 stored-credential 扩展仅在特定入口开放;
- QuickResp 可能只改变响应形式,也可能需要通过特定 URL、header 或处理通道启用。
具体行为应由 Chase 根据当前认证 URL 确认。最直接的验证方式,是将完全相同的请求分别提交到认证团队指定的两个端点,并记录:
- 请求 URL;
- HTTP headers;
- 根元素和
MessageType; - Orbital response code;
- XML parser/DTD error;
- Chase request trace identifier。
如果相同的 XML 只在其中一个端点返回 DTD 错误,问题通常可以收敛到端点能力或 schema 差异。
Merchant enablement 是否会导致这个错误
商户级功能开通可能影响 profile、tokenization、stored credentials 或 MIT 的实际处理,但这类检查通常发生在 XML 通过解析之后。
可以根据报错阶段安排排查:
DTD validation error:先检查元素名称、顺序、父节点、消息类型和端点;- “feature not enabled”、无权限或业务拒绝:再检查 merchant-level enablement;
- issuer decline 或 authorization decline:检查交易数据和发卡行响应。
不能完全排除某些入口会根据商户配置选择不同 schema,但这一点需要 Chase 明确确认。只要求“开启 MIT”,未必能解决纯粹的 DTD 错误。
应向 Chase certification/support 索取的信息
为避免在不同版本的指南之间反复猜测,可以将问题整理成一份供认证团队直接核验的清单:
- 当前 certification URL 对应的 XML DTD 文件及版本;
CGEN对应的正式 XML element name;- 值为
Y的字段正式名称及允许值; - 两个元素在
NewOrder中的准确顺序; - 支持这些元素的
MessageType; - CIT Auth + Create Profile 的原始 XML 样例;
- Subsequent MIT Auth using profile 的原始 XML 样例;
- MIT 是否需要针对 merchant、BIN、TerminalID 或 certification account 单独开通;
- QuickResp 与完整
/orbital入口之间的请求字段差异; - 首次 CIT 返回的哪个字段必须在后续 MIT 中引用。
提交工单时,应附上脱敏后的完整请求,而不是只提供新增字段。DTD 问题经常由新增元素与前后元素的顺序引起,缺少完整 XML 很难定位。
注意事项
- 不要将 REST/JSON 字段名称直接转换成同名 XML 标签;
- 不要假设 XML 子元素可以任意排序;
- 不要在后续 MIT 中重复提交卡号和
CGEN,除非认证脚本明确要求; - 不要将 profile creation、stored credential 和 MIT indicator 视为同一个功能;
- 测试请求中的 PAN、密码及其他敏感数据应删除或遮盖;
- 在取得当前端点的 DTD 或官方 XML 样例前,任何所谓的“可运行 XML”都只能算推测。
目前最可能的原因不是 credentials、BIN 或 MerchantID,而是新增字段不属于该端点的 XML DTD,或者字段在 NewOrder 中的位置不符合 DTD。先确认正式元素名称和顺序,再核对消息类型、端点及商户功能开通情况,通常能更快解除认证阻塞。
备注:内容仅供参考。
