2013-01-24 23 views
5

Ci sono molti post su questo errore, ma non tutti si applicano a me. Davvero non capisco perché gli importi non corrispondano. Ho ITEMAMT che corrisponde a AMT0 * QTY0. E AMT corrisponde a ITEMAMT + SHIPPINGAMT. Ho controllato i documenti più e più volte e dovrebbe funzionare davvero in questo modo. Funziona quando rimuovo completamente la spedizione fuori di esso ...API PayPal: i totali degli importi degli articoli del carrello non corrispondono agli importi dell'ordine

L'AMT nell'URL di checkout è 73.9.

Spero davvero che qualcuno abbia familiarità con questo errore molto confusa, e sa che cosa sto facendo male ...

Grazie in anticipo

Array 
(
    [TIMESTAMP] => 2013-01-24T22:56:09Z 
    [CORRELATIONID] => 
    [ACK] => Failure 
    [VERSION] => 62.0 
    [BUILD] => 4181146 
    [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 
) 
Array 
(
    [PAYMENTREQUEST_0_PAYMENTACTION] => Sale 
    [L_PAYMENTREQUEST_0_NAME0] => XXXX 
    [L_PAYMENTREQUEST_0_NUMBER0] => 30533 
    [L_PAYMENTREQUEST_0_DESC0] => XXXX 
    [L_PAYMENTREQUEST_0_AMT0] => 30.95 
    [L_PAYMENTREQUEST_0_QTY0] => 2 
    [PAYMENTREQUEST_0_ITEMAMT] => 61.9 
    [PAYMENTREQUEST_0_TAXAMT] => 0 
    [PAYMENTREQUEST_0_SHIPPINGAMT] => 12 
    [PAYMENTREQUEST_0_INSURANCEAMT] => 0 
    [PAYMENTREQUEST_0_AMT] => 73.9 
    [PAYMENTREQUEST_0_CURRENCYCODE] => USD 
    [REQCONFIRMSHIPPING] => 1 
    [PAYMENTREQUEST_0_SHIPTOSTREET] => XXXX 
    [PAYMENTREQUEST_0_SHIPTOCITY] => XXXX 
    [PAYMENTREQUEST_0_SHIPTOSTATE] => XX 
    [PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE] => XX 
    [PAYMENTREQUEST_0_SHIPTOZIP] => XXXXXX 
    [PAYMENTREQUEST_0_SHIPTOPHONENUM] => XXXXXXXX 
) 

risposta

2

La risposta alla mia domanda probabilmente non è utile alla maggior parte di voi che passano. Ma uno dei miei articoli conteneva uno & nella descrizione (L_PAYMENTREQUEST_0_DESC0). '&' è sfuggito ai dati trasmessi con CURL. E questo ha creato l'errore (che è completamente fuori). Ricorda che questo accadrà anche quando inserisci caratteri che conterranno uno & quando l'URL viene codificato, ad es. é diventa é

Mi scuso per aver rimosso la descrizione dell'oggetto dal mio primo post, ma non avevo idea che questo avesse qualcosa a che fare con esso, a causa del messaggio di errore sugli importi.

4

è obbligatorio che si invia di valuta con 2 decimali posti. Sembra che si sta fornendo solo 1.

$amt = 61.9; 
$amt = sprintf("%.2f",$amt); // 61.90 

Paypal restituirà questo errore perché l'importo non è nel formato corretto:

Date un'occhiata al Table A.2 sotto la AMT fila:

http://www.paypalobjects.com/en_US/ebook/PP_NVPAPI_DeveloperGuide/Appx_fieldreference.html

Questa regola dovrebbe applicarsi ogni volta che si imposta un parametro di 'soldi' .

+0

Grazie per la risposta, ma questo non sembra fare il trucco: [AMT] => 73.90 [L_PAYMENTREQUEST_0_AMT0] => 30,95 [PAYMENTREQUEST_0_ITEMAMT] => 61.90 [PAYMENTREQUEST_0_TAXAMT] => 0.00 [PAYMENTREQUEST_0_SHIPPINGAMT] => 12.00 [PAYMENTREQUEST_0_INSURANCEAMT] => 0.00 [PAYMENTREQUEST_0_AMT] => 73.90 ancora ottenuto il esatto stesso errore – Chris

+0

@Chris hai trovato una soluzione Sto avendo lo stesso problema. Con i decimali ottengo errori.Sto cercando di dividere il prezzo totale in totalpriceexvat + iva prima di inviare a paypal – alex

+0

ho trasformato tutti i soldi var sprintf ("%. 2f", $ var) – alex

0

Ho avuto lo stesso problema qualche giorno fa quando cercavo di comunicare, poi ho solo capito che questi totali di ordini non corrispondono realmente, con qualche decimale minuto. Se provi la comunicazione con alcuni numeri interi come 50, come item amt e total (senza alcuna precessione), allora non darà alcun errore. Mi sono anche rotto la testa e anche se paypal ha qualche problema. (ma davvero lo ero) Quindi è meglio controllare i calcoli e si noti che paypal accetterà importi fino a solo 2 decimali o posizioni decimali. Sono d'accordo con Samuel su ciò che ha detto.

Anche la quantità di spedizione di inviarle meglio come 12,00 invece di 12 e di altri numeri come 61.90, 73.90 ...

+2

So che è necessario, proprio come ha detto Samuel Cook. Ma non era proprio il caso qui. Ho usato round ($ value, 2) in php, il che significa che arrotonderà a due decimali, se è necessario. 12,00 saranno 12, 61,90 saranno 61,9 e 30,95 saranno 30,95. Non è che PayPal non accetti valori con meno di due decimali, ma se non si arrotondano a due decimali, i valori non si sommano nei calcoli di PayPal. Se dai loro AMT0 => 10.55, QTY0 => 2 paypal calcolerà che a 21.10, un ITEMAMT di 21.1 andrà bene, ma fai QTY0 => 3 e il valore è 31.65, che richiede di avere due dec – Chris

Problemi correlati