PAYATHON 2026

如何将 3D Secure 集成到 Payius payment system?

支付老李

结论

不能仅凭文档中的 https:///merchant/mpi,就认定测试地址是 https://testpayments.payius.com/merchant/mpi。原地址缺少主机名,可能只是占位符或排版错误,也可能需要使用 Payius 为商户分配的环境地址。

/merchant/mpi 通常也不是可以直接在浏览器中打开的普通页面。它往往需要通过 POST 提交交易编号、金额、卡信息或 3DS 上下文。直接访问时,如果缺少必要参数、会话或商户权限,出现错误很正常。

正确的集成思路

如果接口采用传统的 3D Secure 1 流程,大致顺序如下:

  1. 商户服务端创建支付交易,取得 Payius 返回的交易标识。
  2. 判断该交易是否需要进行 3DS 验证。
  3. 将浏览器连同 Payius 要求的字段提交至 MPI 地址。
  4. 用户在发卡行页面完成身份验证。
  5. 浏览器返回商户自己的回调地址。
  6. 商户服务端校验返回结果,再继续授权或确认支付。
  7. 最终支付状态必须通过 Payius 的服务端查询或通知确认,不能只依据浏览器返回值。

不要把 Referer 请求头当作可靠的回调配置。浏览器、代理和安全策略都可能移除这个请求头,它也无法证明请求来自 Payius。如果旧文档确实依赖 referrer,需要向 Payius 确认商户后台是否还要配置固定的返回地址。

不要直接打开 MPI URL

下面这种访问通常没有意义:

GET https://testpayments.payius.com/merchant/mpi

该接口可能只接受包含完整参数的表单提交,例如:

<form method="post" action="PAYIUS_TEST_MPI_URL">
  <input type="hidden" name="transactionId" value="TRANSACTION_ID">
  <input type="hidden" name="returnUrl" value="https://merchant.example.com/payius/3ds-return">
  <!-- 其他字段必须使用 Payius 文档规定的名称和值 -->
  <button type="submit">继续验证</button>
</form>

这里的 PAYIUS_TEST_MPI_URL、transactionId 和 returnUrl 仅用于说明流程,并不代表 Payius 的真实参数名称。不要照着示例自行添加字段,应使用支付初始化响应及 Payius 商户配置中明确提供的地址和参数。

回调端不能只显示 “支付成功”,还要再次向支付平台核实状态:

<?php

$transactionId = $_REQUEST['transactionId'] ?? null;

if ($transactionId === null) {
    http_response_code(400);
    exit('Missing transaction identifier');
}

// 使用 Payius 提供的服务端查询接口核实:
// 1. 商户号是否匹配
// 2. 金额和币种是否匹配
// 3. 3DS 验证及支付状态是否成功
// 4. 该交易是否已处理,避免重复入账

出错时重点检查

常见原因有:

  • 测试商户账户尚未开通 3DS 或 MPI 功能;
  • 测试主机名或路径错误;
  • 接口要求使用 POST,实际发送的却是 GET 请求;
  • 请求中缺少交易标识、签名、金额、币种或返回地址;
  • 测试凭据与生产环境地址混用;
  • 回调地址不是公网可访问的 HTTPS 地址;
  • 回调地址未在 Payius 商户后台登记;
  • 请求签名使用的字段顺序、编码或密钥不正确;
  • 文档描述的是已经停用的 3DS1 流程,而当前账户要求使用 3DS2。

建议的处理方式

文档中的 URL 并不完整,仅靠这份信息无法可靠完成集成。需要向 Payius 或实际收单机构索取以下内容:

  • 当前有效的 sandbox MPI endpoint;
  • 账户使用的是 3DS1 还是 3DS2;
  • MPI 请求方法和完整字段列表;
  • 返回地址的配置方式;
  • 测试卡、测试验证码及预期测试场景;
  • 服务端支付状态查询接口;
  • 具体错误码和错误日志说明。

你对 “需要进入 3DS 流程” 的总体理解没有问题。不过,将缺少主机名的 https:///merchant/mpi 直接补成测试域名,再通过浏览器访问,并不是完整、正确的集成方式。最终地址和请求参数必须以 Payius 为该商户账户提供的环境配置为准。

备注:内容仅供参考。