9

我正在使用 Authorize.net 的客户信息管理器 API (CIM)。我的测试用例以用户在结账时提供错误地址为中心。

每次用户提交表单时,我的应用程序都会尝试创建客户资料:

$txrq = new AuthorizeNetCIM;
$txrsp = $txrq->createCustomerProfileTransaction("AuthCapture", $transaction, 'x_duplicate_window=0');

x_duplicate_window正如您在上面看到的那样,我尝试将传递设置为“额外选项”,在 SDK 中,它是请求的以下部分:

<extraOptions><![CDATA[' . $this->_extraOptions . ']]></extraOptions>

无论我为 x_duplicate_window 使用什么值,authorize.net 都会一直返回错误,直到默认时间过去。

AuthorizeNet Error: Response Code: 3 Response Subcode: 1 Response Reason Code: 11 Response Reason Text: A duplicate transaction has been submitted.

我担心如果我们的一个(潜在)用户尝试提交错误的地址,意识到他或她的错误,然后在交易超时发生时又收到 3 分钟的额外错误。

4

1 回答 1

9

Authorize.net SDK 代码有错误:

~ 360-364 行CIM.php's method _setPostString()

if ($this->_extraOptions) {
    $this->_xml->addChild("extraOptions");
    $this->_post_string = str_replace("<extraOptions></extraOptions>",'<extraOptions><![CDATA[' . $this->_extraOptions . ']]></extraOptions>', $this->_xml->asXML());
    $this->_extraOptions = false;
}

$this->_xml->addChild("extraOptions");导致节点与 str_replace 调用不匹配:<extraOptions/>

修改 str_replace 将解决这个问题,它将很好地传递x_duplicate_window参数:

if ($this->_extraOptions) {
    $this->_xml->addChild("extraOptions");
    $this->_post_string = str_replace("<extraOptions/>",'<extraOptions><![CDATA[' . $this->_extraOptions . ']]></extraOptions>', $this->_xml->asXML());
    $this->_extraOptions = false;
}
于 2012-07-16T05:05:50.197 回答