9

Sto lavorando con l'API CIM (Customer Information Manager API) di Authorize.net. Il mio test case è centrato su un utente che fornisce l'indirizzo sbagliato durante il checkout.Authorize.net CIM Duplicate Transaction Window

La mia applicazione tenterà di creare un profilo del cliente ogni volta che l'utente invia il modulo:

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

Ho provato a installare passando x_duplicate_window come potete vedere sopra "Opzioni Extra", che, nel SDK, è la seguente parte della richiesta:

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

Non importa quale sia il valore che uso per x_duplicate_window, authorize.net restituirà sempre un errore fino a quando il tempo predefinito è passato.

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

mi preoccupo se uno dei nostri (potenziali) utenti tenta di inviare l'indirizzo sbagliato, realizza il suo errore, e poi viene salutato con altre 3 minuti aggiuntivi di errori, mentre si verifica il timeout di transazione.

risposta

9

C'è un errore nel codice Authorize.net SDK:

~ linea 360-364 in 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"); risultati in un nodo che non corrisponde alla chiamata str_replace: <extraOptions/>

La modifica di str_replace risolverà questo problema, che passerà lungo il parametro x_duplicate_window bene:

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

API di Authorize.net è terribile, sto avendo un'esperienza miserabile lavorando con esso. – Acyra

+2

Devo dire che Stripe è stata la migliore API di elaborazione dei pagamenti che abbia mai usato. – Nick