2012-04-17 17 views
15

Estoy trabajando con la API de pago exprés de PayPal y tengo problemas para establecer la cantidad. A continuación son mis parámetros URI:API de Paypal: los totales de los montos de los artículos del carrito no coinciden con los importes de los pedidos

$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" 
); 

Si L_PAYMENTREQUEST_0_QTY0 se establece en 1 el proceso está bien. Sin embargo, cambiándolo a 2 y añadiendo 'PAYMENTREQUEST_0_ITEMAMT' => "100.00" a la matriz me da el siguiente error:

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 

He tratado durante horas para arreglarlo y he dado por vencido. ¿Alguien puede resaltar lo que necesito hacer para que funcione?

+0

¿Ha intentado hacer 'L_PAYMENTREQUEST_0_QTY0 = 2' 'y 'L_PAYMENTREQUEST_0_AMT0 '=> "100.00" 'while'' PAYMENTREQUEST_0_AMT '=> "100.00" '? Tal vez PayPal no calcule el 2x50.00, pero solo busca TOTAL por LÍNEA. Solo estoy haciendo suposiciones aquí. – Jakub

+0

Por desgracia, eso no funcionó. – Rijndael

+0

no sé si ayudaría, pero tal vez todos sus valores en dólares debe ser formateado correctamente '0.00' – thescientist

Respuesta

24

Te falta ITEMAMT. Vea también mi respuesta en Paypal Express checkout with shipping cost and error que contiene un ejemplo de trabajo con cantidades múltiples.

&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 
+2

0down voto Esto fija mi "He añadido el coste de envío, ¿por qué es roto?" pregunta. Los documentos de PayPal deberían simplemente vincularse a este sitio ... –

+0

¿Alguien sabe cómo puedo agregar dos o más productos? ... con respecto a este buen ejemplo? Gracias. –

2

No directamente relacionada con la pregunta, pero ya que esta aparece por primera vez en Google cuando se busca a través de mensajes de error Esto puede ser útil para otras personas que están recibiendo este error.

Es posible que aparezca este error si algunos de los campos no están configurados (null/blank).

Por ejemplo, en mi caso fue añadido (saltos de línea para mayor claridad):

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 

Y me estaba dando el mismo error, a pesar de que las cantidades están muy bien. creo que es un tema de análisis, ya que si se inserta un espacio, incluso después de L_PAYMENTREQUEST_0_NAME0 = en

&L_PAYMENTREQUEST_0_NAME0=&L_PAYMENTREQUEST_0_AMT0=1.00 

Trabaja muy bien.

Así que mi conjetura es que al final de la PayPal simplemente asigna "& L_PAYMENTREQUEST_0_AMT0 = 1,00" a L_PAYMENTREQUEST_0_NAME0, por lo tanto eliminando de forma eficaz desde el mensaje y, en consecuencia provoca este error, ya que sin esa línea las cantidades no suman de hecho.

0

que tenían el mismo problema y lo resolvió por formatear precios en foreach por Number_format de función del parámetro L_PAYMENTREQUEST_0_AMT $ k

Ejemplo:

$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); 
Cuestiones relacionadas