9

Pracuję z interfejsem API Customer Authorization.net (CIM) Authorize.net. Mój przypadek testowy koncentruje się wokół użytkownika podającego niewłaściwy adres podczas realizacji transakcji.Authorize.net Okno zduplikowanego klienta CIM

Moja aplikacja będzie próbował utworzyć profil klienta za każdym razem, gdy użytkownik przesyła formularz:

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

Próbowałem wcześniej, ustawienie przechodząc x_duplicate_window jak widać powyżej, „Extra Options”, który w SDK jest następujące części wniosku:

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

Bez względu na to, jaką wartość używam do x_duplicate_window, authorize.net zawsze zwraca błąd aż domyślny czas minął.

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

Martwię się, gdy jeden z naszych (potencjalnych) użytkowników próbuje wysłać zły adres, realizuje jego lub jej błąd, a następnie zostanie powitany z 3 więcej dodatkowych minut błędów podczas występuje limit czasu transakcji.

Odpowiedz

9

wystąpił błąd w kodzie Authorize.net SDK:

~ linii 360-364 w 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"); prowadzi do węzła, który nie zgadza się z połączenia str_replace: <extraOptions/>

Modyfikacja str_replace naprawi to, co przejdzie wzdłuż parametru x_duplicate_window tylko dobrze:

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

Interfejs API Authorize.net jest okropny, mam nędzne doświadczenie w pracy z nim. – Acyra

+2

Muszę powiedzieć, że Stripe jest najlepszym interfejsem do przetwarzania płatności, jakiego kiedykolwiek używałem. – Nick