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

Я работаю с API-интерфейсом управления информацией о клиентах (CIM) Authorize.net. Мой тестовый пример сосредоточен вокруг пользователя, указывающего неправильный адрес во время оформления заказа.

Мое приложение будет пытаться создать профиль клиента каждый раз, когда пользователь отправляет форму:

$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 дополнительных минуты ошибок, пока происходит тайм-аут транзакции.


person Nick    schedule 16.07.2012    source источник


Ответы (1)


В коде SDK Authorize.net есть ошибка:

~Строка 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;
}
person Nick    schedule 16.07.2012
comment
API Authorize.net ужасен, у меня печальный опыт работы с ним. - person Acyra; 05.05.2013
comment
Должен сказать, Stripe — лучший API для обработки платежей, который я когда-либо использовал. - person Nick; 16.07.2014