Problema de integración de Paypal en titanio

Tengo que implementar Paypal en mi aplicación. Aquí he agregado algunos productos en el carrito. Si hago clic en el carro, tengo que pagar el monto usando Paypal.

Al hacer clic en el button de Paypal, aparece el siguiente error:

Las cantidades especificadas para el precio del artículo, los impuestos y el envío no sumn la cantidad total.

¿Por qué estoy recibiendo este error?

Estoy usando el siguiente código:

$.paypalWindow.addEventListener('open', function(){ var Paypal = require('ti.paypal'); var u = Ti.Android != undefined ? 'dp' : 0; var status = Ti.UI.createLabel({ top: 20 + u, height: 50 + u, color: '#333', text: 'Loading, please wait...' }); $.paypalWindow.add(status); var price = totalamount; var invoiceitemslist = JSON.stringify(data); var button; function addButtonToWindow() { if (button) { $.paypalWindow.remove(button); button = null; } button = Paypal.createPaypalButton({ width: 194 + u, height: 37 + u, buttonStyle: Paypal.BUTTON_194x37, top: 20 + u, language: 'en_US', appID: 'APP-80W284485P519543T', paypalEnvironment: Paypal.PAYPAL_ENV_SANDBOX, feePaidByReceiver: false, enableShipping: false, payment: { paymentType: Paypal.PAYMENT_TYPE_BUSINESS, subtotal: price, tax: 0.00, shipping: 0.00, currency: 'USD', recipient: 'thaibusiness@gmail.com', customID: 'anythingYouWant', invoiceItems: [{"name":"Bajaj 200 mm Ultima PT01 Personal Fan","totalPrice":2997,"itemPrice":999,"itemCount":3}, ], ipnUrl: 'http://www.appcelerator.com/', merchantName: 'EYMOBINS Insurance', memo: 'For the insurance with EYMOBINS!' } }); button.addEventListener('paymentCancelled', function (e) { alert('Payment cancelled. Please try again!'); addButtonToWindow(); }); button.addEventListener('paymentSuccess', function (e) { alert('Payment successfull. Please get your Policy No.!'+" "+e.transactionID); $.paypalWindow.remove(button); //addButtonToWindow(); }); button.addEventListener('paymentError', function (e) { alert('Payment Error. Please try again!'); addButtonToWindow(); }); button.addEventListener('buttonDisplayed', function () { $.paypalWindow.remove(status); //alert('Please pay '+Ti.App.totalcost+'$ with Paypal!') }); button.addEventListener('buttonError', function () { }); $.paypalWindow.add(button); } addButtonToWindow(); }); $.paypalWindow.open(); 

Por favor, revisa el código y dame una idea para resolver el problema anterior.

EDITAR:

Aquí estoy enfrentando un problema:

 [{"name":"Bajaj 200 mm Ultima PT01 Personal Fan","totalPrice":999,"itemPrice":999,"itemCount":1},{"name":"Average2Excellent CBSE KG EVS MATHS ENG Educational CD ROMS","totalPrice":547,"itemPrice":547,"itemCount":1}] 

Aquí el totalamount es 1546. Aquí he impreso los elementos de factura en la console, y estoy obteniendo los datos como arriba.

Así que he dado como:

 invoiceItems:invoiceitems, 

Me gusta get la emisión (los importes especificados para el precio del artículo, los impuestos y el envío no sumn la cantidad total).

Lo mismo que he escrito el código como:

 invoiceItems:[{"name":"Bajaj 200 mm Ultima PT01 Personal Fan","totalPrice":999,"itemPrice":999,"itemCount":1},{"name":"Average2Excellent CBSE KG EVS MATHS ENG Educational CD ROMS","totalPrice":547,"itemPrice":547,"itemCount":1}] 

está funcionando perfectamente.

No funciona dinámicamente cuando se le asigna el valor. ¿Puedes verificar el código y ayudar?

EDITAR:

Si he intentado ejecutar este código en un dispositivo Android, onclick en el button de PayPal, no pasa nada. Por qué el formulario de inicio de session no está abierto en el dispositivo Android.

¿Por qué estás escapando de las citas en este código?

 [{"name":"Bajaj 200 mm Ultima PT01 Personal Fan","totalPrice":2997,"itemPrice":999,"itemCount":3} 

Esto no es JSON válido (o Javascript para el caso). ¿Esto es requerido por Paypal? Creo que debería verse así:

 [{"name":"Bajaj 200 mm Ultima PT01 Personal Fan","totalPrice":2997,"itemPrice":999,"itemCount":3} 

Editar:

He echado un vistazo más de cerca a tu muestra de código. ¿Puedes confirmar de dónde totatamount ? A medida que la muestra del código permanece, no estará undefined , lo que sería coherente con el post de error que ha descrito. ¿Puedes confirmar que es definitivamente el valor correcto INMEDIATAMENTE antes de enviar estos datos?

La especificación ti.paypal tiene un bonito ejemplo de código en el file README , que proporciona un buen ejemplo de cómo configurar createPaypalButton . Yo recomendaría mirar esto si aún no lo has hecho.

 button = Paypal.createPaypalButton({ // NOTE: height/width only determine the size of the view that the button is embedded in - the actual button size // is determined by the buttonStyle property! width: 194 + u, height: 37 + u, buttonStyle: Paypal.BUTTON_194x37, // The style & size of the button bottom: 50 + u, language: 'en_US', textStyle: Paypal.PAYPAL_TEXT_DONATE, // Causes the button's text to change from "Pay" to "Donate" appID: '<<<YOUR APP ID HERE>>>', // The appID issued by Paypal for your application; for testing, feel free to delete this property entirely. paypalEnvironment: Paypal.PAYPAL_ENV_SANDBOX, // Sandbox, None or Live feePaidByReceiver: false, // This will only be applied when the transaction type is Personal enableShipping: false, // Whether or not to select/send shipping information advancedPayment: { // The payment itself payments: [ { isPrimary: true, // Mark this as the primary vendor; this marks this as a chain payment. merchantName: 'Primary Vendor', paymentType: Paypal.PAYMENT_TYPE_SERVICE, // The type of payment paymentSubtype: Paypal.PAYMENT_SUBTYPE_DONATIONS, // The subtype of the payment; you must be authorized for this by Paypal! subtotal: 13, // The total cost of the order, excluding tax and shipping tax: 0, shipping: 0, recipient: '<<<YOUR RECIPIENT HERE>>>', customID: 'anythingYouWant', invoiceItems: [ { name: 'Shoes', totalPrice: 8, itemPrice: 2, itemCount: 4 }, { name: 'Hats', totalPrice: 2, itemPrice: 0.5, itemCount: 4 }, { name: 'Coats', totalPrice: 3, itemPrice: 1, itemCount: 3 } ] }, { merchantName: 'Vendor 1', paymentType: Paypal.PAYMENT_TYPE_SERVICE, // The type of payment paymentSubtype: Paypal.PAYMENT_SUBTYPE_DONATIONS, // The subtype of the payment; you must be authorized for this by Paypal! subtotal: 10, // The total cost of the order, excluding tax and shipping tax: 0, shipping: 0, recipient: '<<<YOUR RECIPIENT HERE>>>', customID: 'anythingYouWant', invoiceItems: [ { name: 'Shoes', totalPrice: 8, itemPrice: 2, itemCount: 4 }, { name: 'Hats', totalPrice: 2, itemPrice: 0.5, itemCount: 4 } ] }, { merchantName: 'Vendor 2', paymentType: Paypal.PAYMENT_TYPE_SERVICE, // The type of payment paymentSubtype: Paypal.PAYMENT_SUBTYPE_DONATIONS, // The subtype of the payment; you must be authorized for this by Paypal! subtotal: 3, // The total cost of the order, excluding tax and shipping tax: 0, shipping: 0, recipient: '<<<YOUR RECIPIENT HERE>>>', customID: 'anythingYouWant', invoiceItems: [ { name: 'Coats', totalPrice: 3, itemPrice: 1, itemCount: 3 } ] } ], ipnUrl: 'http://www.appcelerator.com/', currency: 'USD', memo: 'For the orphans and widows in the world!' } });