2016-04-22 7 views
0

Ich erhalte eine Autorisierung fehlgeschlagen Antwort von 2Checkout bei der Verwendung OmniPay API.2Checkout OmniPay - Autorisierung fehlgeschlagen

Ich hatte Stripe erfolgreich mit OmniPay verbunden, also ging ich zum Anschluss von 2Checkout. Wenn Sie dies tun, warnt Sie das erste Paket auf Github, the newer version from a user collizo4sky zu erhalten. Also tat ich es, und dann ging es leicht ohne fatalen Fehler zu arbeiten.

In meinem Webformular erstelle ich ein Token ordnungsgemäß und die Sandbox-Protokolle bei 2Checkout bestätigen dies. Ich habe dann diesen Code in OmniPay verwenden, um zu versuchen, die Karte zu laden:

use Omnipay\Omnipay; 
$sMerchantTransID = rand(11111111,99999999); 
$oGateway = Omnipay::create('TwoCheckoutPlus_Token'); 
$oGateway->setPrivateKey($config->TWOCHECKOUT_PRIVATE_KEY); 
$oGateway->setAccountNumber($config->TWOCHECKOUT_SELLERID); 
$oGateway->setTestMode(true); 
$oResponse = $oGateway->purchase(array(
    'amount' => $sPrice, 
    'currency' => 'USD', 
    'token' => $sToken, 
    'transactionId' => $sMerchantTransID 
))->send(); 
if (!$oResponse->isSuccessful()) { 
    die('ERROR: ' . $oResponse->getMessage()); 
} 

Jedoch kommt die Nachricht zurück mit „Autorisierung fehlgeschlagen“. Also ging ich in den Quellcode des OmniPay API für Paket collizo4sky in diesem Pfad ...

omnipay/vendor/collizo4sky/omnipay-2checkout/src/Message/TokenPurchaseRequest.php 

... und fügte etwas Protokolldatei Debuggen der senddata() Klassenmethode. Dies ist, was es reagierte mit, und beachten Sie, dass ich einige der Werte, aus offensichtlichen Gründen der Privatsphäre geändert:

array (
    'sellerId' => '901414261', 
    'privateKey' => 'EAEC8615-4C48-4D98-B7E5-4B6D8865E1BA', 
    'merchantOrderId' => 65639323, 
    'token' => 'FDI1ZTM3N2UtY2VkZS00NTM1LWE5MTctYzI4MjA5YWI4Yjhm', 
    'currency' => 'USD', 
    'total' => '519.00', 
) 

Ja, die SellerID und die privateKey aus der Sandbox-Konto kam, wie die veröffentlichbare Schlüssel tat, als ich die erzeugte Token in der Webform an erster Stelle.

Also, wie auch immer, wenn diese in der Sandbox-URL gesendet wird, gibt es mit dieser Antwort:

HTTP/1.1 400 Bad Request 
Server: Apache-Coyote/1.1 
Cache-Control: no-cache, no-store, must-revalidate 
Date: Fri, 22 Apr 2016 03:30:37 GMT 
Expires: 0 
Pragma: no-cache 
Content-Type: application/json;charset=UTF-8 
Transfer-Encoding: chunked 

{"validationErrors":null,"response":null,"exception":{"errorMsg":"Authorization Failed","httpStatus":"400","exception":false,"errorCode":"600"}} 

Was mache ich falsch?

EDIT:

Ich habe dann versucht, die 2Checkout-supported PHP library verwenden, die sie bieten. Ich habe genau die gleiche Transaktion ausgeführt und es gibt auch "Authorization Failed" zurück.

Ich frage mich, ob es eine Einstellung auf meinem Konto ist, obwohl ich eine Sandbox verwende? Ich meine, ich wurde noch nicht in der Produktion genehmigt und versuchte, die Sandbox bis dahin zu bekommen, damit ich eine Demo machen konnte.

Ich generierte auch API-Schlüssel in der Sandbox und versuchte es erneut, und das ist fehlgeschlagen.

Die Kreditkarte, die ich verwendete, war die, die sie auf der Sandbox unter den Sandbox-API-Schlüsseln bereitstellen, und ich verwendete eine CVV von 123 mit 12/18 als Ablaufdatum. Ich dachte dann, vielleicht wollte es ein 4-stelliges Jahr, also aktualisierte ich das und versuchte es erneut, und das scheiterte auch mit dem gleichen konsistenten Fehler von "Authorization Failed".

Wenn ich überprüfe, was "Authorization Failed" bedeutet, scheint es, dass es die Kreditkarte ist, die das Problem ist.

Mein Bauchgefühl sagt mir, dass ich alles richtig mache und dass es eine Flagge auf meinem Konto ist, dass das Problem ist. Ich meine, wenn mein regulärer Account noch nicht genehmigt ist, wird die Sandbox noch funktionieren?

+0

An dieser Stelle ich versucht sein würde 2checkout Support zu kontaktieren. Es sieht so aus, als ob du das Richtige machst, es muss etwas mit deinem Account sein. Ich denke nicht, dass es die Karte ist, ich denke nicht, dass sie die Karte im Sandbox-Modus validieren. – delatbabel

+0

Auf das Bett schlagen. Der Fix war der Demo-Modus-Parameter. Ich werde in ein paar Stunden eine Antwort schreiben, wenn ich wieder aufstehe. – Volomike

Antwort

2

Die einzige Möglichkeit, eine Transaktion auszuführen, bestand darin, den Demo-Modus in den Sandbox-Einstellungen unter Konto> Site-Verwaltung manuell auf "Aus" zu setzen und dann mindestens eine Rechnungsadresse anzugeben. Ich würde gerne herausfinden, wie man die Anforderungen an die Rechnungsadresse nicht erfüllt (zum Beispiel für digitale Download-Produkte), aber bisher noch keinen Weg gefunden habe, oder wenn das überhaupt möglich ist.

Bitte beachten Sie, dass wenn Sie den Demomodus auf "Ein" setzen und keine Rechnungsadresse senden, die Transaktion in Ordnung verläuft, aber nicht als Verkauf auf der Registerkarte "Verkauf" angezeigt wird. Das ist nicht sehr nützlich, denn wenn Sie live gehen, möchten Sie einen tatsächlichen Verkauf, den Sie zurückzahlen können, und der Demomodus simuliert keine tatsächliche Gebühr, sondern lediglich eine Autorisierung dieser Karte. (Zumindest habe ich das herausgefunden.)

Auf dem transactionId Parameter habe ich eine Abkürzung für Zwecke hier genommen. Bitte machen Sie es zu einer eindeutigen Nummer in Ihrem System (wie eine mit UNIX-Zeit erzeugte Nummer) oder Sie könnten mit einer möglichen Kollision enden.

Ich habe auch versucht, nur die E-Mail, oder nur das Telefon, oder beides, kommentieren, und das hat nicht funktioniert - Sie erhalten "Parameter Error". Dann habe ich versucht, nur diese Felder unter card: billingName, email, billingPostcode und billingCountry zu senden - und das scheiterte auch mit "Parameter Error". Also habe ich dann billingState - "Parameter Error" hinzugefügt. Dann hinzugefügt billingCity - "Parameter Error". Damit die Transaktion ausgeführt werden kann, ist es erforderlich, dass die Rechnungsadresse angegeben wird und E-Mail und Telefon zu meiner Überraschung enthalten sein müssen, es sei denn, jemand kann mir eine Einstellungsüberschreibung oder -technik zeigen. Das ist ein Showstopper für einige Leute, wie diejenigen, die versuchen, nicht greifbare Dinge wie digitale Downloads zu verkaufen. Beachten Sie auch, dass ich versucht, die official 2Checkout-created PHP API und versuchte alle diese Tests erneut, und wieder, "Parameter Error" erhalten, es sei denn, die vollständige Rechnungsadresse (einschließlich E-Mail und Telefon zu) wurde verwendet. Diese vollständige Rechnungsadresse Anforderung mit auch E-Mail-und Rechnungs-Telefon wird ein Mist für einige Unternehmen werden, bin ich mir sicher.

EDIT:This answer, wenn ich richtig vermute ich, ist eine offizielle Antwort von jemandem bei 2Checkout arbeiten, selbst? Es sieht sicher so aus. Wie auch immer, er sagt, dass die Rechnungsadresse definitiv benötigt wird, weil er sagt: "Dies ist eine Anforderung unserer Bankpartner für die Adressverifizierung."

EDIT2: Sie müssen mit einer echten Live-Transaktion experimentieren, aber ich in mindestens Sandbox-Modus entdeckt, dass, wenn ich übergebe Sie eine leere Zeichenfolge für das phoneNumber Feld auf den official 2Checkout PHP library oder die billingPhone im OmniPay API, dann läuft die Transaktion in Ordnung. Sie wollen nur diesen Parameter sehen, obwohl er leer sein kann. Aber nehmen Sie mein Wort dafür nicht - testen Sie es bei einer Live-Transaktion (und erstatten Sie sich selbst) zur Bestätigung zurück, da ich dies nur in der Sandbox getan habe. This answer scheint offiziell von 2Checkout selbst zu bestätigen, dass sie dies zulassen.

Festcode:

use Omnipay\Omnipay; 
$sMerchantTransID = rand(11111111,99999999); 
$oGateway = Omnipay::create('TwoCheckoutPlus_Token'); 
$oGateway->setPrivateKey($config->TWOCHECKOUT_PRIVATE_KEY); 
$oGateway->setAccountNumber($config->TWOCHECKOUT_SELLERID); 
$oGateway->setTestMode(true); // turns on Sandbox access 
$oResponse = $oGateway->purchase(array(
    'amount' => $sPrice, 
    'currency' => 'USD', 
    'token' => $sToken, 
    'transactionId' => $sMerchantTransID, 
    'card' => array(
     'billingName' => $sName, 
     'billingAddress1' => $sStreet1, 
     'billingAddress2' => $sStreet2, 
     'billingCity' => $sCity, 
     'billingState' => $sState, 
     'billingPostcode' => $sZip, 
     'billingCountry' => $sCountry, 
     'email' => $sEmail, 
     'billingPhone' => $sPhone 
    ) 
))->send(); 
if (!$oResponse->isSuccessful()) { 
    die('ERROR: ' . $oResponse->getMessage()); 
} 
+0

In dem Fall, in dem 2Checkout fehlschlägt (Adresse der Rechnungsadresse), hat Stripe Vorrang. Ich habe festgestellt, dass ich mit Stripe keine Rechnungsadresse hinzufügen muss. – Volomike

Verwandte Themen