# Eqjncvb 代收 `pay_type_code` 接入说明

Eqjncvb 的平台渠道代码为 `eqjncvb`。当前原始协议只证明代收下单、代收查询、支付结果字段和 MD5 验签规则，没有证明代付或银行能力。

## 商户请求标准

当前禁用预置能力为：

| 字段 | 值 | 说明 |
|---|---|---|
| `channelCode` | `eqjncvb` | 指定该渠道时填写；生产启用前必须完成合同范围和沙箱审核 |
| `countryCode` | `US` | 仅为待确认的预置维度，不代表已签约国家 |
| `currency` | `USD` | 原文验签示例使用 USD；正式支持范围以上游合同为准 |
| `payMethodCode` | `h5` | 托管页面跳转 |
| `payTypeCode` | `aggregate` | 平台标准综合收银台类型 |

商户不得提交 `payTypeCode=WALLET`。`WALLET` 是平台内部保存的上游协议元数据，不是平台标准支付类型。原文卡组织列表也不构成 `payTypeCode=card` 的产品证据。

## 最小请求示例

金额单位为平台分，且 Eqjncvb 要求转换成元后的第二位小数为 `0`，所以 `amount` 必须能被 10 分整除。

```json
{
  "appId": "<merchant-app-id>",
  "merchantOrderNo": "PAY202608010001",
  "amount": 12340,
  "currency": "USD",
  "countryCode": "US",
  "channelCode": "eqjncvb",
  "payMethodCode": "h5",
  "payTypeCode": "aggregate",
  "subject": "Test product",
  "payerEmail": "buyer@example.com",
  "clientIp": "203.0.113.10",
  "notifyUrl": "https://merchant.example.com/pay/notify",
  "returnUrl": "https://merchant.example.com/pay/result",
  "timestamp": "1785571200",
  "nonce": "nonce-202608010001",
  "apiVersion": "v1.0",
  "sign": "<HMAC-SHA256>"
}
```

Eqjncvb 还要求 `cancelUrl`。当前可在平台订单扩展字段 `cancelUrl` 中提供；未提供时平台使用 `returnUrl`。所有有值的商户开放接口字段仍按 AllOnePay HMAC-SHA256 规则参与签名，上游 MD5 由平台内部完成。

## 订单号与回调方向

- 商户的 `merchantOrderNo` 是商户订单号。
- AllOnePay 提交给 Eqjncvb 的 `orderNo` 是平台支付尝试单号，发生重试时可能带 `_A02` 等后缀。
- Eqjncvb 返回或回调的 `orderNo` 仍是我方提交号，用于定位本地订单/尝试。
- Eqjncvb 的 `orderNum` 是上游订单号，平台保存为 `UpstreamTxnId`。

不得把 `orderNo` 与 `orderNum` 对调。平台接收 Eqjncvb 回调后仍按统一商户支付回调协议通知商户，商户只按自己的 `merchantOrderNo` 和平台订单号处理幂等。

## 状态与安全边界

| 上游 `respCode` | 平台语义 |
|---|---|
| `10000` | 成功；只有验签、订单号、金额和币种全部一致才允许推进 |
| `10001` | 失败；必须先通过响应完整性校验 |
| `10002` | 处理中 |
| 未知值 | 保守保持处理中，等待查单或人工核验 |

上游 HTTP、JSON、签名、身份或金额校验异常属于查询失败，不等于业务支付失败。平台不会因技术异常自动把订单改成失败。

## 明确不支持

- Eqjncvb 代付下单、代付查单和代付回调；
- Eqjncvb `payeeType`；
- Eqjncvb 银行代码或银行列表；
- 将通用卡组织列表当作银行目录；
- 在生产范围、回调 ACK、签名向量和来源 IP 未确认前启用该预置路由。

