{"id":137924,"date":"2022-12-15T00:00:00","date_gmt":"2022-12-15T00:00:00","guid":{"rendered":"https:\/\/adapty.io\/es-android-in-app-purchases-part-5-server-side-purchase-validation\/"},"modified":"2022-12-15T00:00:00","modified_gmt":"2022-12-15T00:00:00","slug":"android-in-app-purchases-part-5-server-side-purchase-validation","status":"publish","type":"post","link":"https:\/\/adapty.io\/es\/blog\/android-in-app-purchases-part-5-server-side-purchase-validation\/","title":{"rendered":"Las compras dentro de la aplicaci\u00f3n de Android, parte 5: Validaci\u00f3n de las compras del lado del servidor"},"content":{"rendered":"\n

La validaci\u00f3n del lado del servidor (server-side) puede ayudarte a validar la autenticidad de la compra. El dispositivo har\u00e1 una petici\u00f3n a los servidores de Google para averiguar si la compra se realiz\u00f3 realmente y si es v\u00e1lida.<\/p>\n\n\n\n

En esta gu\u00eda, hablaremos de c\u00f3mo configurar la validaci\u00f3n del lado del servidor para las aplicaciones de Android. <\/p>\n\n\n\n

\u00bfPor qu\u00e9 validar las compras?<\/h2>\n\n\n\n

Cabe se\u00f1alar que la validaci\u00f3n del lado del servidor no es obligatoria: las compras dentro de la aplicaci\u00f3n seguir\u00e1n funcionando sin la misma. Sin embargo, tiene algunas ventajas importantes:<\/p>\n\n\n\n

    \n
  1. An\u00e1lisis de pagos adelantados, <\/strong>lo que es especialmente importante para las suscripciones, ya que todo lo que ocurre despu\u00e9s de la activaci\u00f3n no es procesado por el dispositivo. Sin un procesamiento de compras del lado del servidor, no podr\u00e1s recuperar el estado actual de la suscripci\u00f3n y saber si el usuario renov\u00f3 la suscripci\u00f3n o la cancel\u00f3, si hay problemas de pago, etc.<\/li>\n\n\n\n
  2. Poder verificar la autenticidad de la compra. <\/strong>Estar\u00e1s seguro de que la transacci\u00f3n no es fraudulenta, y que el usuario ha pagado realmente por tu producto.<\/li>\n\n\n\n
  3. Suscripciones multiplataforma. <\/strong>Al poder comprobar el estado de la suscripci\u00f3n del usuario en tiempo real, podr\u00e1s sincronizarlo con otras plataformas. Por ejemplo, el usuario que compr\u00f3 la suscripci\u00f3n desde un dispositivo iOS podr\u00e1 utilizarla en Android, en la Web y en otras plataformas. <\/li>\n\n\n\n
  4. Podr\u00e1s controlar el acceso al contenido desde el lado del servidor<\/strong>, lo que te proteger\u00e1 de los usuarios que intenten acceder a los datos sin estar suscritos, simplemente ejecutando solicitudes al servidor. <\/li>\n<\/ol>\n\n\n\n

    Seg\u00fan nuestra experiencia, la primera ventaja es suficiente para establecer el procesamiento de compras en el lado del servidor.<\/p>\n\n\n\n\n\n

    Validaci\u00f3n del pago<\/h2>\n\n\n\n

    Podemos resumir la validaci\u00f3n del pago (purchase validation) en Android con este esquema:<\/p>\n\n\n\n

    \"\"<\/figure>\n\n\n\n

    Autenticaci\u00f3n para las solicitudes de la API para desarrolladores de Google Play<\/h3>\n\n\n\n

    Para utilizar Google Play Developer API, primero tendr\u00e1s que generar una clave para firmar las solicitudes. En primer lugar, tendr\u00e1s que vincular tu cuenta de Google Play Console (donde gestionas tu aplicaci\u00f3n) con tu cuenta de Google Cloud (donde generar\u00e1s una clave para la firma de solicitudes). Una vez que todo est\u00e9 configurado, tendr\u00e1s que conceder al usuario los derechos de gesti\u00f3n de compra. Har\u00eda falta un art\u00edculo dedicado a describir este proceso. Por suerte, ya lo describimos en una gu\u00eda paso a paso que se encuentra en la documentaci\u00f3n de Adapty<\/a>. <\/p>\n\n\n\n

    Ten en cuenta que normalmente tendr\u00e1s que esperar 24 horas o m\u00e1s despu\u00e9s de generar una clave para que empiece a funcionar. Para evitarlo, s\u00f3lo tienes que actualizar la descripci\u00f3n de cualquier producto o suscripci\u00f3n en la app, lo que activar\u00e1 instant\u00e1neamente la clave. <\/p>\n\n\n\n

    Utilizamos la biblioteca oficial google-api-python-client<\/a> para utilizar la Google Play Developer API. Esta biblioteca est\u00e1 disponible para la mayor\u00eda de los lenguajes populares, y te recomiendo que la utilices ya que soporta todos los m\u00e9todos que puedas necesitar.<\/p>\n\n\n\n

    Validaci\u00f3n de transacciones de suscripci\u00f3n<\/h3>\n\n\n\n

    A diferencia de la validaci\u00f3n del lado del servidor de iOS<\/a>, en Android, tanto la validaci\u00f3n de las suscripciones como la de otros productos se implementan utilizando diversos m\u00e9todos. Por tanto, al validar una transacci\u00f3n, necesitas saber si se trata de un producto o de una suscripci\u00f3n. En la pr\u00e1ctica, esto significa que tendr\u00e1s que transferir estos datos desde la aplicaci\u00f3n m\u00f3vil, as\u00ed como mantener la marca en la base de datos en caso de que sea necesaria la revalidaci\u00f3n del token.<\/p>\n\n\n\n

    La segunda diferencia importante es que mientras cada transacci\u00f3n tiene su propio token en Android, todas las transacciones de iOS utilizan un secreto compartido espec\u00edfico de la aplicaci\u00f3n para almacenar todo el historial de transacciones. Esto significa que si quieres poder restaurar las compras del usuario en cualquier momento, tendr\u00e1s que almacenar todos los tokens de compra, en lugar de elegir uno solo arbitrariamente.<\/p>\n\n\n\n

    Para validar la suscripci\u00f3n, tendr\u00e1s que invocar el m\u00e9todo purchases.subscriptions.get.<\/em><\/a>B\u00e1sicamente, se trata de una llamada de solicitud GET:<\/p>\n\n\n\n

    <\/path><\/path><\/svg><\/span>
    https<\/span>:<\/span>\/\/androidpublisher.googleapis.com\/androidpublisher\/v3\/applications\/{packageName}\/purchases\/subscriptions\/{subscriptionId}\/tokens\/{token}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n

    Todos los par\u00e1metros son obligatorios:<\/p>\n\n\n\n