PAYATHON 2026

Converge API 返回 error 6042 Invalid Request Format

支付阿杰

明确结论

请求中的 xmldata 不是完整的 XML,而是一串以空格分隔的值。有效的 XML 需要根元素、字段标签和正确闭合的标签,例如 <txn>...</txn>。服务器无法解析当前内容,因此返回:

6042 Invalid Request Format
XML request is not well-formed or request is incomplete.

请求还通过 xmldata=... 提交表单参数,却将 Content-Type 设置为 text/xml,实际请求体格式与声明的媒体类型不符。

正确的 XML 结构

按照 Converge XML API 常见的字段结构,请求内容应类似:

<txn>
  <ssl_merchant_id>my_merchant_id</ssl_merchant_id>
  <ssl_user_id>my_user_id</ssl_user_id>
  <ssl_pin>my_pin</ssl_pin>
  <ssl_transaction_type>ccsale</ssl_transaction_type>
  <ssl_card_number>4000000000000002</ssl_card_number>
  <ssl_exp_date>1124</ssl_exp_date>
  <ssl_amount>1.00</ssl_amount>
  <ssl_cvv2cvc2_indicator>1</ssl_cvv2cvc2_indicator>
  <ssl_cvv2cvc2>786</ssl_cvv2cvc2>
  <ssl_first_name>adolfo</ssl_first_name>
</txn>

具体需要哪些必填字段,可能与账户配置、交易类型和 Converge API 接入方式有关,请以当前账户对应的接口文档为准。

推荐的 curl 写法

如果接口要求通过名为 xmldata 的表单字段提交 XML,应将媒体类型设为 application/x-www-form-urlencoded,并让 curl 对 XML 内容进行 URL 编码:

curl -X POST \
  'https://api.convergepay.com/VirtualMerchant/processxml.do' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'xmldata=<txn><ssl_merchant_id>my_merchant_id</ssl_merchant_id><ssl_user_id>my_user_id</ssl_user_id><ssl_pin>my_pin</ssl_pin><ssl_transaction_type>ccsale</ssl_transaction_type><ssl_card_number>4000000000000002</ssl_card_number><ssl_exp_date>1124</ssl_exp_date><ssl_amount>1.00</ssl_amount><ssl_cvv2cvc2_indicator>1</ssl_cvv2cvc2_indicator><ssl_cvv2cvc2>786</ssl_cvv2cvc2><ssl_first_name>adolfo</ssl_first_name></txn>'

也可以先将 XML 保存到 shell 变量中,以便检查:

XML_DATA='<txn>
<ssl_merchant_id>my_merchant_id</ssl_merchant_id>
<ssl_user_id>my_user_id</ssl_user_id>
<ssl_pin>my_pin</ssl_pin>
<ssl_transaction_type>ccsale</ssl_transaction_type>
<ssl_card_number>4000000000000002</ssl_card_number>
<ssl_exp_date>1124</ssl_exp_date>
<ssl_amount>1.00</ssl_amount>
<ssl_cvv2cvc2_indicator>1</ssl_cvv2cvc2_indicator>
<ssl_cvv2cvc2>786</ssl_cvv2cvc2>
<ssl_first_name>adolfo</ssl_first_name>
</txn>'

curl -X POST \
  'https://api.convergepay.com/VirtualMerchant/processxml.do' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode "xmldata=${XML_DATA}"

原请求中的具体问题

原请求实际发送的内容近似于:

xmldata=my_merchant_id my_user_id my_pin ccsale ...

其中有几个问题:

  1. 缺少 <txn> 这样的 XML 根元素。
  2. 每个值都没有对应的 XML 标签。
  3. XML 元素没有开始标签和结束标签。
  4. xmldata= 表示请求提交的是表单字段,而 Content-Type: text/xml 表示整个请求体是原始 XML,两者相互矛盾。
  5. 如果直接拼接 XML 而不进行 URL 编码,特殊字符还可能破坏表单请求。

注意事项

示例中的有效期 1124 通常表示 2024 年 11 月,目前已经过期。即使修复了 XML 格式,这个值仍可能触发其他交易校验错误,需要换成测试环境允许的有效值。

不要在日志、工单或公开环境中记录真实的 ssl_pin、完整银行卡号和 CVV。示例卡号也只能用于 Converge 指定的测试环境。生产地址、测试地址、测试卡号和必填字段,请以实际账户使用的 Converge 接口文档为准。

备注:内容仅供参考。