it-swarm.com.de

Paypal-API: Die Beträge der Warenkorbpositionen stimmen nicht mit den Bestellmengen überein

Ich arbeite mit der Paypal Express Checkout API und habe Probleme mit der Mengeneinstellung. Hier sind meine URI-Parameter:

$params = array(
   'METHOD' => 'SetExpressCheckout',
   'PAYMENTREQUEST_0_SHIPPINGAMT' => '0',
   'PAYMENTREQUEST_0_TAXAMT' => '0',
   'PAYMENTREQUEST_0_HANDLINGAMT' => '0',
   'PAYMENTREQUEST_0_AMT' => "50.00",
   'RETURNURL' => $this->_returnUri,
   'CANCELURL' => $this->_cancelUri,
   'HDRIMG' => $this->_logoUri,
   'PAYMENTREQUEST_0_CURRENCYCODE' => 'GBP',
   'L_PAYMENTREQUEST_0_DESC0' => 'Product description',
   'L_PAYMENTREQUEST_0_NAME0' => 'Product name',
   'L_PAYMENTREQUEST_0_AMT0' => "50.00",
   'L_PAYMENTREQUEST_0_QTY0' => "2"
);

Wenn L_PAYMENTREQUEST_0_QTY0 auf 1 gesetzt ist, ist der Prozess in Ordnung. Das Ändern auf 2 und das Hinzufügen von 'PAYMENTREQUEST_0_ITEMAMT' => "100.00" zum Array verursacht jedoch den folgenden Fehler:

TIMESTAMP: 2012-04-17T12:11:16Z
CORRELATIONID: da43f6c91254
ACK: Failure
VERSION: 88.0
BUILD: 2808426
L_ERRORCODE0: 10413
L_SHORTMESSAGE0: Transaction refused because of an invalid argument. See additional error messages for details.
L_LONGMESSAGE0: The totals of the cart item amounts do not match order amounts.
L_SEVERITYCODE0: Error

Ich habe stundenlang versucht, das Problem zu beheben, und habe aufgegeben. Kann jemand hervorheben, dass ich es tun muss, damit es funktioniert?

15
Rijndael

Ihnen fehlt eine ITEMAMT. Siehe auch meine Antwort in Paypal Express Checkout mit Versandkosten und Fehler die ein Arbeitsbeispiel mit mehreren Mengen enthält. 

&L_PAYMENTREQUEST_0_NAME0=10% Decaf Kona Blend Coffee  
&L_PAYMENTREQUEST_0_NUMBER0=623083  
&L_PAYMENTREQUEST_0_DESC0=Size: 8.8-oz 
&L_PAYMENTREQUEST_0_AMT0=9.95  
&L_PAYMENTREQUEST_0_QTY0=2  
&L_PAYMENTREQUEST_0_NAME1=Coffee Filter bags  
&L_PAYMENTREQUEST_0_NUMBER1=623084  
&L_PAYMENTREQUEST_0_DESC1=Size: Two 24-piece boxes  
&L_PAYMENTREQUEST_0_AMT1=39.70  
&L_PAYMENTREQUEST_0_QTY1=2  
&PAYMENTREQUEST_0_ITEMAMT=99.30  
&PAYMENTREQUEST_0_TAXAMT=2.58  
&PAYMENTREQUEST_0_SHIPPINGAMT=3.00  
&PAYMENTREQUEST_0_HANDLINGAMT=2.99  
&PAYMENTREQUEST_0_SHIPDISCAMT=-3.00  
&PAYMENTREQUEST_0_INSURANCEAMT=1.00  
&PAYMENTREQUEST_0_AMT=105.87  
&PAYMENTREQUEST_0_CURRENCYCODE=USD  
25
Robert

Nicht direkt bezog sich auf die Frage, aber da dies bei der Suche nach Fehlernachrichten zuerst in Google angezeigt wird, kann dies für andere Personen nützlich sein, die diesen Fehler erhalten.

Diese Fehlermeldung wird möglicherweise angezeigt, wenn einige Felder nicht festgelegt sind (null/leer).

In meinem Fall war es beispielsweise (Zeilenumbrüche wurden der Klarheit halber hinzugefügt):

    PAYMENTREQUEST_0_PAYMENTACTION=Sale
    &REQCONFIRMSHIPPING=0
    &RETURNURL=some_url
    &CANCELURL=some_other_url
    &BRANDNAME=Brand
    &L_PAYMENTREQUEST_0_NAME0=
    &L_PAYMENTREQUEST_0_AMT0=1.00
    &L_PAYMENTREQUEST_0_QTY0=1
    &PAYMENTREQUEST_0_AMT=1.00
    &PAYMENTREQUEST_0_CURRENCYCODE=USD

Und es gab mir den gleichen Fehler, obwohl die Beträge in Ordnung sind. Ich denke, es ist ein Parsing-Problem, denn wenn Sie nach L_PAYMENTREQUEST_0_NAME0 = sogar ein Leerzeichen einfügen 

&L_PAYMENTREQUEST_0_NAME0=&L_PAYMENTREQUEST_0_AMT0=1.00

Es funktioniert gut. 

Meine Vermutung ist also, dass am Ende des Paypal L_PAYMENTREQUEST_0_NAME0 einfach "& L_PAYMENTREQUEST_0_AMT0 = 1.00" zugewiesen wird, wodurch es effektiv aus der Nachricht entfernt wird und dieser Fehler ausgelöst wird, da sich die Beträge ohne diese Zeile nicht addieren.

2
Zar Shardan

Ich hatte das gleiche Problem und löste es, indem ich die Preise in foreach mit der Funktion number_format für den Parameter L_PAYMENTREQUEST_0_AMT $ k formatierte

Beispiel:

$items_amount = 0;
foreach ($products as $k => $product) {
    $params["L_PAYMENTREQUEST_0_NAME$k"] = $product['name'];
    $params["L_PAYMENTREQUEST_0_DESC$k"] = $product['desc'];
    $params["L_PAYMENTREQUEST_0_AMT$k"] = number_format($product['priceIVA'], 2);
    $params["L_PAYMENTREQUEST_0_QTY$k"] = $product['count'];
    $items_amount += (floatval($product['priceIVA']) * $product['count']);
}

$params['PAYMENTREQUEST_0_AMT'] = $params['PAYMENTREQUEST_0_ITEMAMT'] = number_format($items_amount, 2);
0
realmag777