API de recarga de APK de Android

La recarga puede ocurrir en tres entornos diferentes:

  • App para Android del integrador de pagos
  • Sitio web móvil del integrador de pagos
  • Sitio web de escritorio del integrador de pagos

Independientemente del flujo, Google transfiere la interacción del usuario al software del integrador de pago. El integrador de pagos implementa una IU familiar, pero el flujo debe dedicarse específicamente a recargar el saldo del usuario, lo que significa que se debe dirigir al usuario a un proceso de recarga en lugar de una IU de uso general en la que se espera que siga navegando en un flujo de recarga.

Todos los flujos hacen que el integrador produzca una TopUpRedirectResponse. Esta respuesta se firma y se envía a Google.

Los sitios web móviles y de escritorio deben seguir la Especificación de la API de Web Top Up, mientras que el flujo de la app para Android debe seguir la de la API de Android Up Up.

Los integradores deben implementar una solución de APK de Android para autenticar al usuario y, luego, dirigirlo a través de un flujo en el que pueda recargar su saldo. Esta recarga es una modalidad diferente, pero tiene el mismo propósito que la recarga que proporciona la Recarga en la Web.

Un usuario ingresa al flujo en la app de integrador de pagos mediante una actividad de Android. El intent de recarga se puede invocar directamente desde una app de Play en la que el usuario tiene la intención de realizar una compra. Para evitar que Android finalice Play en segundo plano durante la recarga, el integrador debe incluir lo siguiente en el tema de la actividad.

<item name="android:windowIsTranslucent">true</item>

Definición del método

El intent debe tener las siguientes propiedades:

Propiedades de los métodos
Acción com.google.android.payments.standard.TOPUP_V1
Categoría android.intent.category.DEFAULT

Solicitud

Campos
gspTopUpRequest TopUpRedirectRequest

Solicitud de recarga

gspAssociationId string

Contiene un identificador que el integrador usa para buscar las credenciales de la cuenta que el usuario está completando. Este es el ID de asociación que se envía durante la vinculación de la cuenta en AssociateAccountRequest.

Respuesta

Una vez que el usuario completa el flujo de recarga, tu aplicación debe enviar un intent de resultado a Google. Si la recarga se realiza correctamente, crea un intent y agrega los valores gspTopUpResponse y redirectRequestId codificados y encriptados como extras. A continuación, establece el resultado de la actividad en el código de resultado adecuado.

...
result.setExtra("gspTopUpResponse", gspTopUpResponse);
result.setExtra("redirectRequestId", redirectRequestId);
setResult(Activity.RESULT_OK, result);
...
finish();

Resultado

Campos
resultado int

Activity.RESULT_OK
La recarga se realizó correctamente.
Activity.RESULT_CANCELED El usuario canceló el flujo de forma manual y este debería anularse.
Activity.RESULT_FIRST_USER La recarga falló por un motivo irrecuperable y el flujo debe anularse. El servidor IE mostró la respuesta HTTP 500 al acceder.

Adicionales

Campos
gspTopUpResponse TopUpRedirectResponse

OBLIGATORIO: Respuesta de recarga. Este valor codificado no debe superar 1 KB.
redirectRequestId string

OBLIGATORIO: El requestId que se envió en la solicitud de pago por redireccionamiento original o en el que se inició el proceso. Google verificará que coincida con el requestId enviado, y el flujo de redireccionamiento completo fallará si no coincide.

Otros requisitos de actividad

La actividad que admite la acción TOPUP_V1 mencionada anteriormente también debe verificar que los llamadores de la API solo provengan de aplicaciones firmadas por Google. Esto ayudará a evitar que otras apps intenten invocar tu actividad y recuperar datos del usuario. Esto se puede hacer con el StandardPaymentUtils.verifyCallingActivityIsGoogleSigned proporcionado justo después de super.onCreate en tu implementación de Activity.

A continuación, le presentamos una muestra:


@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  StandardPaymentsUtils.verifyCallingActivityIsGoogleSigned(this);

  ....
}

Todas las actividades invocadas dentro del flujo de recarga deben proporcionar un tema de actividad que tenga windowIsTranslucent=true. Esto debe hacerse con el atributo android:theme AndroidManifest y sin usar Context.setTheme(). De manera programática, configurar el tema no funciona correctamente para la transparencia de la ventana. Google exigirá que la primera actividad que se inicie siga este patrón, pero cualquier subactividad que también se inicie deberá seguir este patrón. De lo contrario, es posible que las compras de desarrolladores externos no funcionen.