9

Estoy trabajando con la API del Administrador de información al cliente (CIM) de Authorize.net. Mi caso de prueba se centra en un usuario que da la dirección incorrecta durante el pago.Authorize.net CIM Ventana de transacciones duplicadas

Mi aplicación intentará crear un perfil de cliente cada vez que el usuario envía el formulario:

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

He tratado de establecer que pasa x_duplicate_window como se puede ver arriba a "Opciones adicionales", que, en el SDK, es la siguiente parte de la solicitud:

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

No importa cuál es el valor que utilizo para x_duplicate_window, authorize.net siempre devolverá un error hasta que haya transcurrido el tiempo predeterminado.

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

Me preocupa si uno de nuestros usuarios (potenciales) intenta enviar la dirección equivocada, se da cuenta de su error, y luego se recibió con 3 minutos más adicionales de errores mientras se produce el tiempo de espera de transacción.

Respuesta

9

Hay un error en el código SDK Authorize.net:

~ Línea 360-364 en 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"); resultados en un nodo que no coincide con la llamada str_replace: <extraOptions/>

La modificación de str_replace solucionará esto, que pasará a lo largo del parámetro x_duplicate_window muy bien:

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

La API de Authorize.net es terrible, estoy teniendo una experiencia miserable trabajando con ella. – Acyra

+2

Debo decir que Stripe ha sido la mejor API de procesamiento de pagos que he usado. – Nick