php - 即使尝试强制 3D 安全,3DSv2 也始终返回 Status=OK

标签 php curl opayo 3d-secure

我正在尝试设置 3DSv2,目前处于测试环境中。

客户端 URL (cURL)

$paymentUrl = 'https://test.sagepay.com/gateway/service/vspdirect-register.vsp';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $paymentUrl);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);

$curlResponse = curl_exec($ch);
$response = generateResponseArray($curlResponse);
var_dump($response);

function generateResponseArray($response)
{
    $output = [];

    $tempArray = explode(chr(10), $response);
    foreach ($tempArray as $row) {
        list($key, $value) = explode('=', $row, 2);
        $output[$key] = trim($value);
    }

    return $output;
}

我的 $postData 中包含以下项目:

Apply3DSecure=1 // Force 3DS Challenge
CardNumber=4929000005559 // VERes = N

回应

array(15) {
  ["VPSProtocol"]=>
  string(4) "4.00"
  ["Status"]=>
  string(2) "OK"
  ["StatusDetail"]=>
  string(40) "0000 : The Authorisation was Successful."
  ["VPSTxId"]=>
  string(38) "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
  ["SecurityKey"]=>
  string(10) "XXXXXXXXXX"
  ["TxAuthNo"]=>
  string(7) "XXXXXXX"
  ["AVSCV2"]=>
  string(24) "SECURITY CODE MATCH ONLY"
  ["AddressResult"]=>
  string(10) "NOTMATCHED"
  ["PostCodeResult"]=>
  string(10) "NOTMATCHED"
  ["CV2Result"]=>
  string(7) "MATCHED"
  ["3DSecureStatus"]=>
  string(2) "OK"
  ["CAVV"]=>
  string(28) "TnVqajA3TjdxTjhrRGFIMWROTzI="
  ["DeclineCode"]=>
  string(2) "00"
  ["ExpiryDate"]=>
  string(4) "0225"
  ["BankAuthCode"]=>
  string(6) "999777"
}

此时我的状态不应该恢复为 3DAUTH 吗?我需要继续构建我们的 3D 安全系统,但此付款不应具有 OK 状态。

我们在 Sage Pay 中设置了一条规则,要求超过 500 英镑的付款采用 3D-Secure。就是这个。

这是我正在处理的文档:Direct Integration and Protocol 4 Guidelines

最佳答案

在 Sagepay 测试环境中,您需要发送有效的测试卡号(我使用 4462 0000 000 0003),以及至关重要CardHolder 设置为 CHALLENGE

如果您不这样做,交易仍将通过 3-D Secure,但无摩擦(即用户不会看到任何 iframe 等)。您仍然会获得无摩擦交易的责任转移。

另请注意,您可以使用 CardHolder 字段来测试其他场景。以下是完整列表:

  • SUCCESSFUL - 模拟身份验证成功的无摩擦流程
  • NOTAUTH - 模拟身份验证不成功的无摩擦流程
  • CHALLENGE - 模拟质询流程,持卡人将被重定向到 ACS 以输入双因素身份验证。还将返回 CReq、VPSTxId、ACSURL 和 StatusDetail。 重定向到 ACSURL 后,在网站上输入正确的密码 (Text = challenge) 将模拟成功的身份验证,输入任何其他密码将模拟不成功的身份验证。
  • PROOFATTEMPT - 模拟持卡人尝试验证自己的身份,但该过程未完成。返回 CAVV,这被视为已成功验证。
  • NOTENROLLED - 模拟卡未注册到 3D 安全方案中。
  • 技术困难 - 模拟无法完成的 3D 安全身份验证。未进行身份验证。
  • STATUS201DS - 模拟回退到 3DSv1。您将收到 PAReq、MD、ACSURL 和 StatusDetail
  • 错误 - 模拟由于参与检查的一方的数据错误或服务不可用而无法执行 3D 身份验证的错误情况。

关于php - 即使尝试强制 3D 安全,3DSv2 也始终返回 Status=OK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57769410/

相关文章:

opayo - PSD2 SagePay - 什么要求

php - 回复 sagepay 中的通知帖子 (PHP)

opayo - SagePay 是否有其模拟器响应可以作为服务器的 IP 范围列表?

php - PHP中的 "&"中的 '&$var'是什么意思?

php - 在 Lighttpd 中的 ubuntu 14.04 PHP 中编辑 xdebug.max_nesting_level 的位置

php - 使用 PHP 的 CURL - 非常慢

c++ - 如何在ubuntu上编译curlpp?

linux - 从 'curl HEAD command' 获取日期值

php - 最后一行只显示 1 列

php - PHP 中的自动 CSS 版本控制?