Gestión de APIs

Monetización: Integrar PayPal como motor de facturación con WSO2 APIM

En este tutorial se mostrará como integrar PayPal cómo motor de facturación con WSO2 API Manager 3.0 y se definirá qué es la monetización.

Para ello se seguirá el siguiente índice:

  1. Qué es la Monetización
  2. Prerrequisitos
    1. Configurar PayPal
    2. Configurar APIM Analytics
    3. Configurar API Manager
  3. Pasos para monetizar una API
    1. Crear una política de suscripción
    2. Habilitar la monetización
    3. Suscríbirse a una API monetizada
  4. Guía para deshabilitar la monetización de una API
  5. Conclusiones

1. ¿Qué es la Monetización?

A través de las APIs las compañías pueden ofrecer servicios a clientes o incluso internamente en la compañía, de forma que, cobrando en diferentes modalidades por su uso, pueda obtener ingresos de las mismas.

Cada API está expuesta en diferentes niveles de uso. Estos niveles de uso se denominan niveles. Los niveles tienen diferentes restricciones de acceso. Los niveles pueden ser niveles libres o facturables (comerciales).

Una única API podría tener una combinación de niveles en los que la API se puede consumir sin cargos para la evaluación y luego los consumidores pueden actualizar a un nivel facturable cuando sea necesario. Cuando un editor expone una API en varios niveles, el consumidor puede seleccionar su nivel de preferencia al suscribirse a la API en función de sus requisitos, presupuesto, lo que quiere lograr, etc.

Se factura a un consumidor de API en función de los niveles consumidos por sus aplicaciones.

En la documentación oficial de WSO2, los pasos se basan en el motor de facturación Stripe, pero si se desea trabajar con otro motor de facturación, primero se debe crear una implementación personalizada extendiendo la interfaz de monetización.

2. Prerrequisitos

2.1 Configurar PayPal

Los pasos para configurar PayPal son los siguientes:

  1. Se debe tener una cuenta de negocios en PayPal, en caso de no tenerla tendrías que crearla.Paypal
  2. Una vez creada la cuenta, se deberá acceder a la consola de desarrollo mediante la siguiente url: https://developer.paypal.com/developer/applications
  3. Dar clic en el botón Log in to Dashboard Log in to Dashboard
  4. Ingresar las credenciales de acceso a PayPal.
  5. Una vez dentro de la consola, en la sección My Apps & Credentials se utilizará la opción Sandbox.
  6. Posteriormente dar clic en la App Default Application My Apps and Credentials
  7. En la siguiente ventana podremos obtener el Client ID y Client Secret, estos datos nos servirán para poder consumir la API de PayPal e integrar con WSO2 API Manager.
Sandbox Credentials

2.2 Configurar APIM Analytics

1.Habilitar WSO2 API Manager Analytics.

Descargar el archivo APIM_MONETIZATION_SUMMARY.siddhi y copiarlo en el directorio <API-M-ANALYTICS_HOME>/wso2/worker/deployment/siddhi-files

2. Opcionalmente, conserve la tabla de datos de uso de API requerida en WSO2 API Manager Analytics.

Debe hacer esto para asegurarse de que los datos no se eliminen de WSO2 API-M Analytics antes de que estos detalles se publiquen en el motor de facturación.

Edite el archivo:

<API-M-ANALYTICS_HOME>/wso2/worker/deployment/siddhi-files/APIM_MONETIZATION_SUMMARY.siddhi

Incremente el plazo para la eliminación de datos en función del plazo de granularidad de monetización y la frecuencia con la que publica los datos de uso de API en el motor de facturación.

@purge(enable='true', interval='60 min', @retentionPeriod(sec='7 days', min='1 month', hours='1 month', days='2 month', months='2 years'))

3. Iniciar el servidor WSO2 API Manager Analytics.

Navegue hasta el directorio <API-M_ANALYTICS_HOME>/bin en su consola o terminal y ejecute uno de los siguientes comandos dependiendo del sistema operativo.

  • En Windows:
worker.bat --run
  • En Linux / Mac OS:
sh worker.sh

4. Opcionalmente, cambiar la granularidad de los datos de uso de la API si es necesario.

Esto define la profundidad de la información de los detalles de uso de la API que desea publicar en el motor de facturación. El valor por defecto es

days

Editar el archivo:

<API-M_HOME>/repository/conf/deployment.toml

Agregar la siguiente configuración en el archivo TOML.

[apim.monetization]
granularity = "seconds"
  • <time-period>– Este es el marco de tiempo que se utiliza para la granularidad de los datos de uso de la API. Se puede utilizar cualquiera de los siguientes valores para este parámetro en base a sus necesidades – seconds, minutes, days, months,years

5. Cuando se invoca la API de publicación, publica todos los datos que se encuentran entre el intervalo de tiempo actual y la última vez que el uso se publica con éxito.

Pero cuando se invoque la API por primera vez, no habrá datos sobre la última vez publicada. Por lo tanto, se puede configurar el intervalo de tiempo para reducirlo desde el tiempo actual para derivar el último tiempo de publicación. Esta configuración se proporciona en días y el valor predeterminado es un día.

[apim.monetization]
publish_duration = "1"

2.3 Configurar API Manager

1. Conectar WSO2 API Manager al motor de facturación.

1.1 Se debe crear la implementación de la interfaz de monetización respectiva y agregar el JAR en el directorio

<API-M_HOME>/repository/components/lib

1.2 Definir la implementación de monetización en WSO2 API Manager.

Agregar el nombre del paquete en el archivo

<API-M_HOME>/repository/conf/deployment.toml

 de la siguiente manera:

[apim.monetization]
monetization_impl = "org.wso2.apim.monetization.impl.PayPalMonetizationImpl"

2. Configurar la base de datos.

2.1 Descargar y copiar el driver de la BD en el directorio

<APIM_HOME/repository/components/lib

En este ejemplo se utiliza una base de datos MySQL, descargar y copiar el driver de MySQL en el directorio<APIM_HOME/repository/components/lib

2.2 Configurar el datasource de WSO2 API Manager.

Agregar la siguiente configuración en el archivo <API-M_HOME>/repository/conf/deployment.toml en la seccióndatabase.apim_db

[database.apim_db]
type = "mysql"
url = "jdbc:mysql://<DBHost>:<Port>/<DBName>?autoReconnect=true"
username = "xxx"
password = "yyy"
defaultAutoCommit = "false"
driverClassName = "com.mysql.jdbc.Driver"
maxActive = "50"
maxWait = "60000"
testOnBorrow = "true"
validationQuery = "SELECT 1"
validationInterval = "30000"

2.3 Dirigirse al directorio <API-M_HOME>/dbscripts/apimgt/ para seleccionar el script de la base de datos que se vaya a utilizar, en este ejemplo se utiliza una base de datos MySQL, por lo tanto se debe ejecutar el script mysql.sql para crear la base de datos WSO2AM_DB

2.4 Posteriormente ejecutar el siguiente script en la BD WSO2AM_DB para crear las tablas correspondientes a la monetización

CREATE TABLE IF NOT EXISTS AM_MONETIZATION (
    API_ID INTEGER NOT NULL,
    TIER_NAME VARCHAR(512),
    STRIPE_PRODUCT_ID VARCHAR(512),
    STRIPE_PLAN_ID VARCHAR(512),
    FOREIGN KEY (API_ID) REFERENCES AM_API (API_ID) ON DELETE CASCADE
) ENGINE=InnoDB;


CREATE TABLE IF NOT EXISTS AM_POLICY_PLAN_MAPPING (
        POLICY_UUID VARCHAR(256),
        PRODUCT_ID VARCHAR(512),
        PLAN_ID VARCHAR(512),
        FOREIGN KEY (POLICY_UUID) REFERENCES AM_POLICY_SUBSCRIPTION(UUID)
) ENGINE=InnoDB;


CREATE TABLE IF NOT EXISTS AM_MONETIZATION_PLATFORM_CUSTOMERS (
    ID INTEGER NOT NULL AUTO_INCREMENT,
    SUBSCRIBER_ID INTEGER NOT NULL,
    TENANT_ID INTEGER NOT NULL,
    CUSTOMER_ID VARCHAR(256) NOT NULL,    
    PRIMARY KEY (ID),
    FOREIGN KEY (SUBSCRIBER_ID) REFERENCES AM_SUBSCRIBER(SUBSCRIBER_ID) ON DELETE CASCADE
) ENGINE=InnoDB;


CREATE TABLE IF NOT EXISTS AM_MONETIZATION_SHARED_CUSTOMERS (
    ID INTEGER NOT NULL AUTO_INCREMENT,
    APPLICATION_ID INTEGER NOT NULL,
    API_PROVIDER VARCHAR(256) NOT NULL,
    TENANT_ID INTEGER NOT NULL,
    SHARED_CUSTOMER_ID VARCHAR(256) NOT NULL,
    PARENT_CUSTOMER_ID INTEGER NOT NULL,    
    PRIMARY KEY (ID),
    FOREIGN KEY (APPLICATION_ID) REFERENCES AM_APPLICATION(APPLICATION_ID) ON DELETE CASCADE,
    FOREIGN KEY (PARENT_CUSTOMER_ID) REFERENCES AM_MONETIZATION_PLATFORM_CUSTOMERS(ID) ON DELETE CASCADE
)ENGINE=INNODB;


CREATE TABLE IF NOT EXISTS AM_MONETIZATION_SUBSCRIPTIONS (
    ID INTEGER NOT NULL AUTO_INCREMENT,
    SUBSCRIBED_APPLICATION_ID INTEGER NOT NULL,
    SUBSCRIBED_API_ID INTEGER NOT NULL,
    TENANT_ID INTEGER NOT NULL,
    SUBSCRIPTION_ID VARCHAR(256) NOT NULL,
    SHARED_CUSTOMER_ID INTEGER NOT NULL,    
    PRIMARY KEY (ID),
    FOREIGN KEY (SUBSCRIBED_APPLICATION_ID) REFERENCES AM_APPLICATION(APPLICATION_ID) ON DELETE CASCADE,
    FOREIGN KEY (SUBSCRIBED_API_ID) REFERENCES AM_API(API_ID) ON DELETE CASCADE,
    FOREIGN KEY (SHARED_CUSTOMER_ID) REFERENCES AM_MONETIZATION_SHARED_CUSTOMERS(ID) ON DELETE CASCADE
)ENGINE INNODB;

3. Configure las propiedades de monetización adicionales que son específicas del motor de facturación en WSO2 API Manager.

Agregue la siguiente configuración en el archivo <API-M_HOME>/repository/conf/deployment.toml

[[apim.monetization.additional_attributes]]
name = "ConnectedClientID"
display_name = "ConnectedClientID"
required = "true"
description = "connected client id of the publisher"

4. Configurar el Tenant Admin en WSO2 API Manager

4.1 Iniciar el servidor WSO2 API Manager.

4.2 Iniciar sesión en la consola de administración WSO2 API-M.

https://<hostname>:9443/carbon

4.3 Dar clic en Main , Resources y hacer clic en Browse .

4.4 Ingresar la siguiente ruta en Location y hacer clic en Go .

/_system/config/apimgt/applicationdata/tenant-conf.json

tenant-config

4.5 Posteriormente dar clic en el botón Edit as text y agregar la siguiente configuración en el archivotenant-conf.json

"MonetizationInfo": {
    "BillingEnginePlatformAccountKey": "<Encoded-Base64-CLIENT_ID:CLIENT_SECRET>"
}

Donde <Encoded-Base64-CLIENT_ID:CLIENT_SECRET>– Es el valor generado de la codificación en Base64 del Client_ID y Client_Secret

5. Configurar los flujos de trabajo.

Se debe realizar esto para asegurarse de que se activen los flujos de trabajo correctos cuando se agrega o elimina una suscripción.

5.1 Iniciar sesión en la consola de administración WSO2 API-M.

https://<hostname>:9443/carbon

5.2 Dar clic en Main , Resources y hacer clic en Browse .

5.3 Ingresar la siguiente ruta en Location y hacer clic en Go .

/_system/governance/apimgt/applicationdata/workflow-extensions.xml

5.4 Posteriormente dar clic en el botón Edit as text y editar los ejecutores del flujo de trabajo en el archivoworkflow-extensions.xml

<SubscriptionCreation executor="org.wso2.apim.monetization.impl.workflow.PayPalSubscriptionCreationWorkflowExecutor"/>
<SubscriptionDeletion executor="org.wso2.apim.monetization.impl.workflow.PayPalSubscriptionDeletionWorkflowExecutor"/>

3. Pasos para monetizar una API

Paso 1 – Crear una política de suscripción

  • Dirigirse al panel de administración de WSO2 API Manager.
https://<API-M_host>:<port>/admin
  • Crear una política de suscripción.

Especifique los datos relacionados con la política de suscripción en función de sus objetivos de monetización. Para obtener más información, consulte Adding a new subscription-level throttling policy .

subscription-commercial-tier

Paso 2 – Habilitar la monetización

  • Para habilitar la monetización se debe iniciar sesión en el API Publisher.
https://<hostname>:9443/publisher
  • Seleccionar la API que se desea monetizar.
  • Dar clic en la opción Monetization para visualizar a las configuraciones de Monetización.
  • Habilitar la opción Enable Monetization
  • Ingresar el Client ID de la cuenta de PayPal en el campo ConnectedClientID y posteriormente dar clic en el botón Save .

Paso 3 – Suscríbirse a una API monetizada

  • Para habilitar la monetización se debe iniciar sesión en el API Publisher.
https://<hostname>:9443/devportal
  • Seleccionar la API a la que se desea suscribir.
  • Seleccionar el plan comercial y dar clic en el botón SUSCRIBE

Al suscribirse a una API, simultáneamente se redirigirá al sitio de PayPal para realizar la suscripción al plan seleccionado.

En su cuenta de Paypal, en la opción Suscripciones se podrá visualizar la suscripción recientemente creada.

4. Guía para deshabilitar la monetización de una API

Para deshabilitar la monetización de una API se debe realizar el siguiente procedimiento:

  1.  Iniciar sesión en API Publisher.
    https://<hostname>:9443/publisher
  2. Dar clic en la API monetizada.
  3. Dar clic en Monetization para ir a las configuraciones de monetización.
  4. Dar clic en Enable Monetization para deshabilitar la monetización.
  5. Ingresar el Client_ID como la clave de cuenta conectada.

  6. Dar clic en el botón Save .

El plan se desactiva en el motor de facturación PayPal según el plan de negocios adjunto a la API.

5. Conclusiones

WSO2 API Manager proporciona una interfaz ampliable que permite a los desarrolladores crear implementaciones personalizadas con cualquier motor de facturación de terceros con el fin de monetizar APIs basadas en planes comerciales.

En la documentación oficial, se muestra un ejemplo de la integración de WSO2 API Manager con Stripe como su motor de facturación para manejar los pagos para la monetización de API, sin embargo, como se puede observar en este post, usted puede usar cualquier implementación personalizada utilizando el motor de facturación de su preferencia.

Crece sin límites con Open APIs

Las Open Apis son la mejor opción para mejorar y posicionar mejor a tu empresa en un mercado cada vez más competitivo.

Written By

Juan Carlos Montes

WSO2 Specialist