compra en la aplicación con el servidor

Quiero implementar un mecanismo de compra en la aplicación que admita Google Checkout y PayPal para comprar artículos virtuales en una de mis aplicaciones de Android. Leí ambas referencias de estos mecanismos, pero todavía tengo una pregunta sobre cuál es la forma correcta de manejar dichas compras. El problema es que me gustaría administrar una llamada a mi propio servidor como parte de la transacción de compra y, en caso de que esa llamada falle, cancelar/revertir toda la transacción. Si primero realizo la transacción de compra y solo cuando está confirmada llamo a mi propio servicio, ¿qué debo hacer si falla? Si primero llamo a mi servicio y luego trato de manejar la transacción y falla, necesito revertir mi llamada (¿y qué sucede si la reversión falla? ??)

¿Cuál es la forma correcta de gestionarlo? ¿Hay alguna forma de crear una transacción de varias fases que me falta?

preguntado el 22 de mayo de 12 a las 17:05

4 Respuestas

Intenta usar el Google Checkout Mecanismo proporcionado para InApp Billing que PayPal SDK, ya que es la mejor manera de obtener las respuestas de error de la transacción, así como RESTORE TRANSACTIONS si la aplicación se elimina del dispositivo y se vuelve a instalar. Google proporciona notificaciones de transmisión asíncronas durante las transacciones de facturación de la aplicación. Los tipos de compra se pueden dividir en administrados (por cuenta de usuario) y no administrados.

Google proporciona la información aquí: Descripción general de la facturación en la aplicación como a continuación:

1.Algunas implementaciones de facturación en la aplicación también pueden usar un servidor remoto privado para entregar contenido o validar transacciones, pero no se requiere un servidor remoto para implementar la facturación en la aplicación.

2. Un servidor remoto puede ser útil si vende contenido digital que debe enviarse al dispositivo de un usuario, como archivos multimedia o fotos.

3. También puede usar un servidor remoto para almacenar el historial de transacciones de los usuarios o realizar varias tareas de seguridad de facturación en la aplicación, como la verificación de firmas.

4. Aunque puede manejar todas las tareas relacionadas con la seguridad en su aplicación, se recomienda realizar esas tareas en un servidor remoto porque ayuda a que su aplicación sea menos vulnerable a los ataques de seguridad.

Por lo tanto, finalmente, me gustaría recomendarle la implementación de facturación de Google InApp sobre otros procesos de pago de terceros.

Respondido el 04 de junio de 12 a las 14:06

Aunque esta respuesta no es perfecta para lo que estoy buscando, es la más cercana a ella... Sigo buscando una solución para permitir ambos mecanismos (Google Checkout y PayPal) con mi servidor de aplicaciones como parte de la misma transacción: Músico

Nunca antes había usado Google Checkout, solo PayPal.

Lo que podría estar buscando es el SDK de PayPal Payments Pro.

Esto permite que su servidor se convierta en la cara de la transacción de pago (y no en el sitio de PayPal como el Checkout express normal).

Debe implementar un mecanismo de compromiso de 2 fases.

Puedo recomendar dos enfoques diferentes:

a) Puede iniciar el proceso de compra en su servidor y dejarlo en un estado medio "no comprometido" en la base de datos. Llamas a PayPal desde tu servidor para que PP pueda procesar tu llamada, y cuando tienes la respuesta de PP, y si la respuesta significa que el pago fue aceptado, confirmas tu compra. El problema con este enfoque es que su aplicación debe tomar la decisión de completar o rechazar la transacción en ese momento, y no es así como se comportaría una transacción de compra en el mundo real. En ocasiones, PayPal puede responder algo diferente a simplemente OK/Error, el pago puede estar pendiente o puede estar bien con una advertencia.

b) Aún más confiable es dejar que PayPal le notifique sobre el estado del pago.

Haces el mismo flujo que se describió antes con un cambio. Una vez que PayPal procese el pago y le dé un positivo respuesta, almacena la identificación de la transacción en su base de datos pero no compromete nada. Solo dígale al usuario que la transacción se completó.

Como parte de la llamada al servidor de PayPal, hay un parámetro que puede usar, ese parámetro se denomina URL de escucha de IPN.

IPN significa notificación de pago instantáneo, es una llamada de regreso a tu servidor, originado por PayPal, en el que su aplicación obtendrá información instantánea sobre el estado de su pago.

Esto es realmente importante ya que las transacciones pendientes pueden ser aceptadas o rechazadas. Incluso una transacción aceptada puede ser revertida por usted o por una reclamación presentada por su comprador a PayPal.

Avíseme si necesita más información sobre cómo implementar el PP IPN Listener.

contestado el 31 de mayo de 12 a las 00:05

Gracias por su respuesta, pero dado que probablemente usaré el SDK de PayPal para Android, el SDK maneja la transacción y todo lo que obtengo es una indicación de OK/Cancelar/Error en el dispositivo, y ni siquiera en el servidor. Si elijo la transacción del lado del servidor, pierdo todos los beneficios de usar un SDK nativo para Android dentro de la aplicación, que es mucho más fácil de usar: Músico

@muzikant seguro que es mejor usar el SDK nativo para Android, pero eso no significa que no pueda configurar su cuenta de comerciante de PayPal para usar IPN. Dado que puede configurar este parámetro como una configuración global para todas las transacciones en su cuenta API, esta funcionalidad de IPN lo ayudará a tener un mecanismo a prueba de fallas en caso de que falle su primer mecanismo de confirmación. - Adrián Salazar

Gracias. Probablemente lo probaré. Sin embargo, sigo buscando una solución con Google Checkout... - Músico

Si aún está buscando una forma de implementar un método de pago manejado por Google, puede encontrar una descripción detallada sobre cómo implementar Facturación integrada en Android Market aquí:

http://developer.android.com/guide/market/billing/index.html

Respondido el 04 de junio de 12 a las 09:06

AFAIK, no es posible "revertir" la transacción. Creo que la lógica de Google es lo más simple posible: si tiene un producto (agregado a Developer Console), puede venderlo.
Cuando el servicio de mercado de Google le indique PURCHASE_STATE_CHANGED, debe confirmar la transacción. De lo contrario, la aplicación recibirá PURCHASE_STATE_CHANGED hasta que no se confirme, pero el hecho es que el usuario ya cobró. Y no puede revertir esta transacción.
Si su servidor puede rechazar la transacción, debe implementar una lógica adicional para tales casos, por ejemplo:

  • comprobar si el producto está disponible ANTES de iniciar la compra;
  • si el producto está disponible, use "reservar" para el producto para asegurarse de que existe cuando se realiza la compra;
  • y así;
  • de lo contrario, debe decirle al usuario que se comunique con el soporte para obtener un reembolso.

Respondido 04 Jul 13, 11:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.