Este repositorio proporciona documentación paso a paso para el SDK nativo de Android de SumUp, que le permite integrar nuestros terminales de tarjetas patentados y su plataforma de pago para aceptar pagos con tarjetas de crédito y débito (incluidos VISA, MasterCard, American Express y más). El SDK se comunica de forma transparente con el terminal de la tarjeta a través de Bluetooth (BLE 4.0). Al iniciar un pago, el SDK guía al usuario mediante las pantallas adecuadas a través de cada paso del proceso de pago. Como parte del proceso, SumUp proporciona también la pantalla de configuración del terminal de la tarjeta, junto con la pantalla de verificación de la firma del titular de la tarjeta. El resultado del pago se devuelve con los datos relevantes para sus registros.
Nunca se transfieren ni almacenan datos confidenciales de la tarjeta en el teléfono del comerciante. Todos los datos están cifrados por el terminal de la tarjeta, que ha sido totalmente certificado según los más altos estándares de la industria (PCI, EMV I y II, Visa, MasterCard y Amex).
Para obtener más información sobre los productos para desarrolladores de SumUp, consulte nuestra documentación de la API de SumUp.
minSdkVersion
26 o posteriortargetSDK
31 o posteriorAgregue el repositorio a sus dependencias de gradle:
allprojects {
repositories {
maven { url ' https://maven.sumup.com/releases ' }
}
}
Agregue la dependencia a un módulo:
implementation ' com.sumup:merchant-sdk:5.0.3 '
Inicialice los componentes SumUp en su aplicación:
public class SampleApplication extends Application {
@ Override
public void onCreate () {
super . onCreate ();
SumUpState . init ( this );
}
}
Antes de acceder a cualquier función del SDK de SumUp, debe iniciar sesión en una cuenta comercial de SumUp registrada. Vaya a https://me.sumup.com/developers para recuperar su clave de afiliado ingresando el ID de su aplicación. (por ejemplo, com.sumup.sdksampleapp)
SumUpLogin sumupLogin = SumUpLogin . builder ( mAffiliateKey ). build ();
SumUpAPI . openLoginActivity ( MainActivity . this , sumupLogin , 1 );
Nota: También es posible iniciar sesión en una cuenta con un token, sin que el usuario ingrese sus credenciales de inicio de sesión de SumUp en el SDK. Consulte la sección Autenticación transparente
Una vez que haya iniciado sesión, podrá comenzar a utilizar SumUp SDK para aceptar pagos con tarjeta. Si ninguna cuenta ha iniciado sesión, se devolverá SumUpAPI.Response.ResultCode.ERROR_NOT_LOGGED_IN
.
SumUpPayment payment = SumUpPayment . builder ()
// mandatory parameters
. total ( new BigDecimal ( "1.12" )) // minimum 1.00
. currency ( SumUpPayment . Currency . EUR )
// optional: to be used only if the card reader supports the feature, what can be checked with `SumUpApi.isTipOnCardReaderAvailable()`
. tipOnCardReader ()
// optional: include a tip amount in addition to the total, ignored if `tipOnCardReader()` is present
. tip ( new BigDecimal ( "0.10" ))
// optional: add details
. title ( "Taxi Ride" )
. receiptEmail ( "[email protected]" )
. receiptSMS ( "+3531234567890" )
// optional: Add metadata
. addAdditionalInfo ( "AccountId" , "taxi0334" )
. addAdditionalInfo ( "From" , "Paris" )
. addAdditionalInfo ( "To" , "Berlin" )
// optional: foreign transaction ID, must be unique!
. foreignTransactionId ( UUID . randomUUID (). toString ()) // can not exceed 128 chars
// optional: skip the success screen
. skipSuccessScreen ()
// optional: skip the failed screen
. skipFailedScreen ()
. build ();
SumUpAPI . checkout ( MainActivity . this , payment , 2 );
@ Override
protected void onActivityResult ( int requestCode , int resultCode , Intent data ) {
if ( requestCode == 2 && data != null ) {
// Handle the response here
}
}
Hay varios campos de respuesta disponibles cuando se llama a la actividad de devolución de llamada:
Los indicadores de respuesta se proporcionan dentro del paquete que se devuelve a la actividad de devolución de llamada:
int resultCode = getIntent (). getExtras (). getInt ( SumUpAPI . Response . RESULT_CODE );
Cuando un comerciante inicia sesión, puede abrir esta actividad para acceder a todas las configuraciones y opciones relacionadas con el lector de tarjetas.
SumUpAPI . openCardReaderPage ( MainActivity . this , 4 );
prepareForCheckout()
ofrece la posibilidad de conectar el lector de tarjetas antes de iniciar el pago, lo que acelera el tiempo total de pago.
Para llamar a este método, el usuario debe iniciar sesión con una cuenta SumUp y su lector de tarjetas ya debe estar configurado. A continuación, llame prepareForCheckout()
antes de iniciar un pago.
Nota: Los lectores de tarjetas Air y Solo permanecen conectados a través de BLE después de cada transacción mientras se usa
prepareForCheckout()
cuando el lector de tarjetas se desconecta (por ejemplo, el lector está fuera de alcance, la aplicación host pierde el foco o el lector se apaga).
Al configurar el objeto SumUpPayment
, se pueden incluir los siguientes parámetros opcionales:
Se puede procesar un monto de propina además del total
usando el parámetro tip
. El monto de la propina se mostrará durante el proceso de pago y se incluirá en la respuesta. Tenga en cuenta que el monto de la propina no se puede cambiar durante o después del pago.
Esto permite al cliente agregar una propina directamente en el lector de tarjetas, en lugar de solicitar el monto de la propina en el dispositivo Android.
Se puede solicitar un monto de propina directamente en el lector de tarjetas usando el parámetro tipOnCardReader
, si el lector de tarjetas admite propinas. Vea el ejemplo aquí para el campo tipOnCardReader
.
Nota: No todos los lectores de tarjetas admiten esta función. Para saber si la función es compatible con el último lector de tarjetas guardado, siempre debe verificar
SumUpApi.isTipOnCardReaderAvailable()
. Debe manejar este caso usted mismo para evitar que se le solicite ninguna información. Tenga en cuenta también que si se solicitan tantotip
comotipOnCardReader
, solo se considerará el montotipOnCardReader
durante el proceso de pago, si está disponible.
La función configureRetryPolicy()
le permite establecer parámetros de reintento personalizados para la recuperación de resultados de transacciones, utilizando pollingInterval
, maxWaitingTime
y disableBackButton
.
pollingInterval
como maxWaitingTime
deben proporcionarse en milisegundos, con valores predeterminados de 2000 ms y 60000 ms, respectivamente. Configurar disableBackButton
en verdadero deshabilita el botón Atrás durante los reintentos.maxWaitingTime
transcurre sin resultados, el SDK devuelve SumUpAPI.ResultCode.ERROR_UNKNOWN_TRANSACTION_STATUS
. Al presionar el botón Atrás (si está habilitado) durante los reintentos también se activará este error.pollingInterval
excede maxWaitingTime
, maxWaitingTime
se ajustará automáticamente para que coincida. Los valores negativos para cualquiera de los parámetros tienen por defecto 0.configureRetryPolicy()
, el SDK devuelve de forma predeterminada SumUpAPI.ResultCode.ERROR_TRANSACTION_FAILED
. Al utilizar el pago SumUp como se muestra a continuación:
SumupPayment . builder ()
...
. foreignTransactionId ( UUID . randomUUID (). toString ())
. configureRetryPolicy ( 2000 , 60000 , true )
. build ();
Si hay problemas de conectividad y no se puede recuperar el estado de la transacción, la API devolverá ERROR_UNKNOWN_TRANSACTION_STATUS
. En tales casos, puede consultar el estado de la transacción llamando a la API de estado de transacción de SumUp utilizando el foreignTransactionId
especificado.
El identificador foreignTransactionID
se asociará con la transacción y se puede utilizar para recuperar detalles relacionados con la transacción. Consulte la documentación de la API para obtener más detalles. Asegúrese de que esta identificación sea única dentro del alcance de la cuenta comercial y las subcuentas de SumUp. No debe tener más de 128 caracteres. ForeignTransactionID está disponible cuando se llama a la actividad de devolución de llamada: SumUpAPI.Param.FOREIGN_TRANSACTION_ID
Para omitir la pantalla de éxito que se muestra al final de una transacción exitosa, se puede usar el parámetro skipSuccessScreen
. Al utilizar este parámetro, su aplicación es responsable de mostrar el resultado de la transacción al cliente. En combinación con la API de Recibos, su aplicación también puede enviar sus propios recibos; consulte la documentación de la API para obtener más detalles. Tenga en cuenta que las pantallas de éxito seguirán apareciendo cuando utilice los lectores SumUp Air Lite.
Para omitir la pantalla fallida que se muestra al final de una transacción fallida, se puede utilizar el parámetro skipFailedScreen
. Al utilizar este parámetro, su aplicación es responsable de mostrar el resultado de la transacción al cliente. Tenga en cuenta que las pantallas fallidas seguirán apareciendo cuando utilice los lectores SumUp Air Lite.
Para autenticar una cuenta sin que el usuario escriba sus credenciales de SumUp cada vez, puede generar un token de acceso usando OAuth2.0 y usarlo para iniciar sesión de forma transparente en el SDK de SumUp.
SumUpLogin sumupLogin = SumUpLogin . builder ( mAffiliateKey ). accessToken ( "MY_ACCESS_TOKEN" ). build ();
SumUpAPI . openLoginActivity ( MainActivity . this , sumupLogin , 1 );
Para obtener información sobre cómo obtener un token, consulte la documentación de API.
Si el token no es válido, se devolverá SumUpAPI.Response.ResultCode.ERROR_INVALID_TOKEN
.
Si actualmente hay una cuenta de comerciante iniciada, es posible recuperar los datos de esta cuenta.
if (! SumUpAPI . isLoggedIn ()) {
// no merchant account currently logged in
} else {
Merchant currentMerchant = SumUpAPI . getCurrentMerchant ();
}
SumUpAPI . logout ();
buildTypes {
release {
// All ProGuard rules required by the SumUp SDK are packaged with the library
minifyEnabled true
proguardFiles getDefaultProguardFile( ' proguard-android.txt ' )
}
}
El SDK es compatible con los servicios de ubicación de Google para mejorar la precisión de la ubicación y reducir el consumo de energía.
Para usarlo necesitas agregar la dependencia en el archivo build.gradle
implementation " com.google.android.gms:play-services-location:19.0.1 "
Si la dependencia GLS no se agrega al proyecto o los servicios de Google Play no están instalados en el dispositivo móvil, el SDK de SumUp determinará la ubicación con el servicio de ubicación predeterminado proporcionado por Android.
NOTA: Se recomienda utilizar GLS versión 19.0.1.
Las siguientes funciones son manejadas por las API de SumUp:
Registro de cambios del SDK de Android SumUp
Licencia SDK de SumUp para Android