Authorize.net Окно Дубликата транзакции CIM


Я работаю с 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 дополнительных минуты ошибок во время ожидания транзакции.

Author: Nick, 2012-07-16

1 answers

В 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;
}
 9
Author: Nick, 2012-07-16 05:05:50