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