Cardinal Commerce 报告为何显示 Action "None Available"
明确结论
Action 显示为 "None Available",通常说明 Cardinal Commerce 管理后台没有为这笔交易提供后续操作,例如重试、继续认证、取消或退款。这个提示本身不代表交易成功、失败或被拒绝,也不能用来判断是否已经扣款。
排查时,应查看交易状态、3-D Secure 认证结果、错误信息,以及支付网关或收单行的处理记录。如果 Cardinal Commerce 只负责身份认证,那么认证完成并不等于支付完成。是否实际扣款,需要到支付网关或收单系统中确认。
为什么会出现 "None Available"
常见原因有:
- 交易已经进入终态,后台不再允许继续操作。
- 认证流程没有正常开始,没有可继续执行的步骤。
- 交易在初始化、设备数据收集、跳转或回调阶段中断。
- 当前账号只有查询权限,无权执行相关操作。
- 交易来自测试环境、批量导入或仅作为记录保存,后台没有对应的操作入口。
- Cardinal Commerce 只处理了 3-D Secure 认证,支付授权由其他系统完成。
- 报表记录不完整,或者交易还没有完成异步更新。
- 交易已经超过后台允许操作的时间窗口。
具体含义会因 Cardinal Commerce 产品、门户版本、商户配置和报表类型而有所不同,不能把 "None Available" 直接理解为某个固定的官方交易状态。
建议的排查步骤
1. 查看真正的状态字段
打开交易详情,不要只看 Action 列。优先检查以下信息,实际字段名称可能随集成版本而变化:
- Transaction ID
- Order ID / Merchant Reference
- Transaction Status
- Authentication Status
- Error Number / Error Description
- ECI
- CAVV、AAV 或其他认证值
- 交易创建时间和最后更新时间
- 3-D Secure 版本
- Challenge 或 Frictionless 流程结果
- Processor / Gateway Response
如果报表只显示摘要信息,可以导出详细报告,或者进入单笔交易详情页面查看。
2. 区分认证结果和支付结果
Cardinal Commerce 常用于 3-D Secure 身份认证。完整的支付链路通常如下:
订单创建
→ Cardinal Commerce 进行 3-D Secure 认证
→ 商户后端获得认证结果
→ 商户向支付网关或收单行发起授权
→ 网关返回 approved、declined 或 error
实际处理中可能出现这些情况:
- Cardinal 认证成功,但商户没有发起支付授权。
- Cardinal 认证成功,但支付授权被银行拒绝。
- Cardinal 认证失败,商户根据策略停止支付。
- Cardinal 没有返回完整的认证结果,但商户进行了非 3DS 授权。
- Cardinal 中有交易记录,支付网关中却没有对应记录。
是否最终扣款,应以支付网关、收单行或处理器的授权及结算记录为准。
3. 使用关联标识串联日志
可以用以下标识查询各个系统的日志:
merchantOrderId / orderId
Cardinal transactionId
paymentGatewayTransactionId
processorReference
timestamp
amount
currency
查询时需要确认:
- 是否使用了正确的生产或测试环境。
- 金额和币种是否一致。
- 时间是否受时区影响。
- 同一订单是否有过多次认证或支付尝试。
- Cardinal Transaction ID 是否正确保存到了订单记录中。
4. 检查前端认证流程
如果使用浏览器端 3-D Secure 集成,需要检查:
- Cardinal SDK 或脚本是否成功加载。
- 初始化请求是否成功。
- JWT 或其他初始化凭证是否有效。
- 认证调用是否真正执行。
- 浏览器是否阻止了第三方 Cookie、弹窗或重定向。
- Challenge 页面是否被用户关闭。
- 认证完成回调是否触发。
- 回调结果是否成功传到商户后端。
浏览器开发者工具中的 Console 和 Network 面板通常能帮助定位脚本错误、超时、跨域错误或被取消的请求。
5. 检查服务端处理
服务端需要确认:
- 是否收到认证完成通知或前端回调。
- 是否验证了回调内容。
- 是否把认证数据附加到支付授权请求中。
- 是否因为超时、异常或业务规则跳过了支付请求。
- 是否记录了支付网关的原始响应。
- 是否存在异步任务失败或重复消费。
日志记录示例
下面的代码只用于说明需要记录哪些关联信息,不代表 Cardinal Commerce 的正式 API。字段名称应替换为实际集成中使用的字段。
function logPaymentFlow({
orderId,
cardinalTransactionId,
authenticationStatus,
eci,
paymentGatewayTransactionId,
gatewayStatus,
errorCode,
errorMessage
}) {
console.info("payment_flow", {
orderId,
cardinalTransactionId,
authenticationStatus,
eci,
paymentGatewayTransactionId,
gatewayStatus,
errorCode,
errorMessage,
recordedAt: new Date().toISOString()
});
}
服务端也可以根据订单号查询本地保存的处理记录:
SELECT
order_id,
cardinal_transaction_id,
authentication_status,
payment_gateway_transaction_id,
gateway_status,
error_code,
created_at,
updated_at
FROM payment_attempts
WHERE order_id = ?
ORDER BY created_at DESC;
如果一个订单查出多条记录,需要逐条核对。用户刷新页面或重新提交时,可能会产生多次认证和授权尝试。
如何判断实际发生了什么
可以根据下面的情况初步归类:
| Cardinal 记录 | 支付网关记录 | 可能情况 |
|---|---|---|
| 有成功认证结果 | 授权成功 | 认证和支付均已完成 |
| 有成功认证结果 | 授权失败 | 认证成功,但支付被拒绝或处理失败 |
| 有成功认证结果 | 无授权记录 | 商户后端可能没有发起支付 |
| 有失败或错误结果 | 无授权记录 | 认证失败后流程被停止 |
| 有不完整记录 | 无授权记录 | 页面中断、超时或回调未执行 |
| 无完整认证结果 | 有授权记录 | 可能走了非 3DS、降级或其他支付路径 |
这些情况只能作为排查方向,最终仍要结合交易详情和各系统日志判断。
何时联系 Cardinal Commerce 支持
如果交易详情提供的信息不足,或者报表与接口日志不一致,可以向 Cardinal Commerce 支持团队提供:
- Merchant ID,但不要发送密钥。
- Cardinal Transaction ID。
- 商户订单号。
- 交易发生时间和明确的时区。
- 金额和币种。
- 使用的环境。
- 报表名称及相关截图。
- 认证或错误状态。
- 对应支付网关的处理结果。
不要提交完整卡号、CVV、JWT、API Secret、Session ID 或未经脱敏的持卡人信息。Cardinal 支持可以解释其系统中的认证记录,但要确认支付是否完成授权、捕获或结算,通常还需要支付网关或收单行协助。
注意事项
对 "None Available" 最稳妥的理解是“当前报表页面没有可用操作”,而不是“交易没有结果”。不要仅凭这一列重新扣款或要求用户再次支付,以免产生重复授权。应先通过订单号和 Transaction ID 核对 Cardinal、商户后端和支付网关三方记录,再决定是否需要重试。
备注:内容仅供参考。
