【发布时间】:2022-08-11 19:41:00
【问题描述】:
我正在使用 phpleague/omnipay-sagepay https://github.com/thephpleague/omnipay-sagepay
收到 3DS 通知的响应后,我正在运行以下代码:
$gateway = $this->fetchGateway();
$completeRequest = $gateway->completeAuthorize([
\'transactionId\' => $payment->transaction_id
]);
$completeResponse = $completeRequest->send();
print \"<pre>\";
print_r($completeResponse);
并收到以下消息:
[data:protected] => Array (
[VPSProtocol] => 3.00
[Status] => ERROR
[StatusDetail] => 3377 : The ACS has provided an Erro message. CReq validation failure. )
我还尝试在 $gateway->completeAuthorize() 函数中包含 CRes 和 CReq,但没有成功。
有人对此有任何线索吗?
协议 4 文档指出:
此 POST 需要包含 VPSTxId(或 MD)和 CRes(或 PARes)。 但如上所述,它似乎不起作用并返回 CReq 验证错误
不确定这是否相关? https://dijitul.uk/payment-gateway-3d-secure-timing-out-huge-issue/#comment-121740
我在某处读到,threeDSSessionData 周围的 {} 可能会导致问题,但删除它们没有效果。
有点担心这个截止日期是 3 月 14 日 :(
编辑:
我也尝试过同样的回应:
$gateway = $this->fetchGateway();
$completeRequest = $gateway->completeAuthorize([
\'VPSTxId\' => str_replace(\"{\", \"\", str_replace(\"}\", \"\", $payment->vpsTxId)),
\'CRes\' => $cres,
\'CreateToken\' => \'1\',
]);
$completeResponse = $completeRequest->send();
发送的 $payment->vpsTxId 等于:
923DD024-8E55-A543-AA6F-4E76AECB67D8
$cres 等于
ewogICJtZXNzYWdlVHlwZSIgOiAiRXJybyIsCiAgIm1lc3NhZ2VWZXJzaW9uIiA6ICIyLjEuMCIsCiAgImFjc1RyYW5zSUQiIDogIjZjOGE2MzQyLTI2OTUtNDAzMi04NDVkLTBmZGU2MDBiYmFhMyIsCiAgImVycm9yQ29kZSIgOiAiMjAzIiwKICAiZXJyb3JDb21wb25lbnQiIDogIkEiLAogICJlcnJvckRlc2NyaXB0aW9uIiA6ICJEYXRhIGVsZW1lbnQgbm90IGluIHRoZSByZXF1aXJlZCBmb3JtYXQgb3IgdmFsdWUgaXMgaW52YWxpZCBhcyBkZWZpbmVkIGluIFRhYmxlIEEuMS4iLAogICJlcnJvckRldGFpbCIgOiAidGhyZWVEU1Nlc3Npb25EYXRhIiwKICAiZXJyb3JNZXNzYWdlVHlwZSIgOiAiQ1JlcSIKfQ
不担心通过 testMode 发布的安全性
-
目前有完全相同的问题。有趣的是,响应是协议 v3,直到谷歌搜索 ACS 错误消息发现您的(非常新鲜的)问题,我才注意到这一点。
-
我们当中好像有不少人。希望有人能尽快找到解决方案!
-
我在下面添加了一个答案。去掉括号后,VPS 协议确实返回 4.00