Política MonetizationLimitsCheck

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

ícono de política

Descripción general

La política MonetizationLimitsCheck te permite aplicar límites de monetización.

En particular, la política se activa si el desarrollador de apps que accede a la API monetizada no ha comprado una suscripción al producto de API asociado o si el desarrollador no tiene saldo suficiente. En este caso, la política MonetizationLimitsCheck generará una falla y bloqueará una llamada a la API. Para obtener más información, consulta Aplica suscripciones de desarrollador a productos de API.

Cuando adjuntas la política MonetizationLimitsCheck a un proxy de API, las variables de flujo mint.limitscheck.* y mint.subscription_* se propagan, como se describe en la referencia de la variable de flujo mint.

Esta política es una política extensible, y el uso de esta política puede tener implicaciones de costo o uso, según tu licencia de Apigee. Para obtener información sobre los tipos de políticas y sus implicaciones de uso, consulta Tipos de políticas.

<MonetizationLimitsCheck>

Define la política MonetizationLimitsCheck.

Valor predeterminado N/A
¿Es obligatorio? Obligatorio
Tipo Tipo complejo
Elemento principal N/A
Elementos secundarios <DisplayName>
<FaultResponse>
<IgnoreUnresolvedVariables>

En la siguiente tabla, se proporciona una descripción de alto nivel de los elementos secundarios de <MonetizationLimitsCheck>.

Elemento secundario ¿Es obligatorio? Descripción
<DisplayName> Opcional Un nombre personalizado para la política
<FaultResponse> Opcional Define el mensaje de respuesta que se muestra al cliente solicitante.
<IgnoreUnresolvedVariables> Opcional Ignora cualquier error de variable no resuelto en el flujo.

El elemento <MonetizationLimitsCheck> usa la siguiente sintaxis:

Sintaxis

<?xml version="1.0" encoding="UTF-8" standalone="no"?><MonetizationLimitsCheck continueOnError="[true|false]" enabled="[true|false]" name="policy_name">
   <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
   <FaultResponse>
        <AssignVariable>
          <Name/>
          <Value/>
        </AssignVariable>
        <Add>
            <Headers/>
        </Add>
        <Copy source="request">
            <Headers/>
            <StatusCode/>
       </Copy>
        <Remove>
            <Headers/>
        </Remove>
        <Set>
            <Headers/>
            <Payload/>
            <StatusCode/>
        </Set>
    </FaultResponse>
    <IgnoreUnresolvedVariables>VALUE</IgnoreUnresolvedVariables>
</MonetizationLimitsCheck>

Ejemplo

En el siguiente ejemplo, si un desarrollador no compró una suscripción al producto de API asociado, se bloquea el acceso a la API monetizada y se muestra un estado 403 con un mensaje personalizado.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MonetizationLimitsCheck continueOnError="false" enabled="true" name="MonetizationLimitsCheck-1">
  <DisplayName>Monetization-Limits-Check-1</DisplayName>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <FaultResponse>
    <Set>
      <Payload contentType="text/xml">
        <error>
          <messages>
            <message>Usage has been exceeded ({mint.limitscheck.isRequestBlocked}) or app developer has been suspended</message>
          </messages>
        </error>
      </Payload>
      <StatusCode>403</StatusCode>
    </Set>
  </FaultResponse>
</MonetizationLimitsCheck>

Este elemento tiene los siguientes atributos que son comunes a todas las políticas:

Atributo Predeterminada (obligatorio) Descripción
name N/A Obligatorio

El nombre interno de la política. El valor del atributo name puede contener letras, números, espacios, guiones, guiones bajos y puntos. Este valor no puede superar los 255 caracteres.

De forma opcional, usa el elemento <DisplayName> para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

continueOnError falso Opcional Configúralo como false para mostrar un error cuando una política falla. Este es el comportamiento previsto para la mayoría de las políticas. Configúralo como true para continuar con la ejecución del flujo incluso después de que una política falle. También consulta:
enabled true Opcional Configúralo como true para aplicar la política. Configúralo como false para desactivar la política. La política no se aplicará, incluso si permanece conectada a un flujo.
async   falso Obsoleta Este atributo dejó de estar disponible.

Referencia del elemento secundario

En esta sección, se describen los elementos secundarios de <MonetizationLimitsCheck>.

<DisplayName>

Se usan además del atributo name para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

El elemento <DisplayName> es común a todas las políticas.

Valor predeterminado N/A
¿Es obligatorio? Opcional. Si omites <DisplayName>, se usa el valor del atributo name de la política.
Tipo String
Elemento principal <PolicyElement>
Elementos secundarios Ninguno

El elemento <DisplayName> usa la siguiente sintaxis:

Sintaxis

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

Ejemplo

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

El elemento <DisplayName> no tiene atributos ni elementos secundarios.

<FaultResponse>

Define el mensaje de respuesta que se muestra al cliente solicitante. FaultResponse usa la misma configuración que el elemento <FaultResponse> en la política RaiseFault.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Tipo complejo
Elemento principal <MonetizationLimitsCheck>
Elementos secundarios <AssignVariable>
<Add>
<Copy>
<Remove>
<Set>

<AssignVariable>

Asigna un valor a una variable de flujo de destino. Si la variable de flujo no existe, AssignVariable la crea.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Tipo complejo
Elemento principal <FaultResponse>
Elementos secundarios <Name>
<Value>

Por ejemplo, usa el siguiente código para establecer la variable llamada myFaultVar en la política MonetizationLimitsCheck:

<FaultResponse>
<AssignVariable>
  <Name>myFaultVar</Name>
  <Value>42</Value>
</AssignVariable>
</FaultResponse>

De este modo, una política en una regla de falla puede acceder a la variable. Por ejemplo, la siguiente política AssignMessage usa la variable para configurar un encabezado en la respuesta de falla:

<AssignMessage enabled="true" name="Assign-Message-1">
<Add>
  <Headers>
    <Header name="newvar">{myFaultVar}</Header>
  </Headers>
</Add>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

<AssignVariable> en la política MonetizationLimitsCheck usa la misma sintaxis que el elemento <AssignVariable> en la política AssignMessage.

<Name>

Nombre de la variable Para obtener más información, consulta el elemento Nombre en la política AssignMessage.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo String
Elemento principal <AssignVariable>
Elementos secundarios Ninguno
<Value>

Valor de la variable. Para obtener más información, consulta el elemento Valor en la política AssignMessage.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo String
Elemento principal <AssignVariable>
Elementos secundarios Ninguno

<Add>

Agrega encabezados HTTP al mensaje de error.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Tipo complejo
Elemento principal <FaultResponse>
Elementos secundarios <Headers>
<Headers>

Especifica el encabezado HTTP que se agrega, configura, copia o quita.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Tipo complejo
Elemento principal <Add>
<Copy>
<Remove>
<Set>
Elementos secundarios Ninguno

Ejemplos:

Agregar encabezado

En el siguiente ejemplo, se copia el valor de la variable de flujo request.user.agent en el encabezado:

<Add>
    <Headers>
        <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
</Add>
Establecer encabezado

En el siguiente ejemplo, se establece el encabezado user-agent en la variable de mensaje especificada con el elemento <AssignTo>.

<Set>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
</Set>
Copiar encabezado - 1

En el siguiente ejemplo, se copia el headerA de la solicitud:

<Copy source='request'>
    <Headers>
        <Header name="headerA"/>
    </Headers>
</Copy>
Copiar encabezado - 2

En el siguiente ejemplo, se copian varios encabezados:

<Copy source='request'>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
</Copy>

En este ejemplo, se copia “h1”, “h2” y el segundo valor de “h3”. Si “h3” tiene un solo valor, no se copia “h3”.

Quitar encabezado - 1

En el siguiente ejemplo, se quita un encabezado:

<Remove>
    <Headers>
        <Header name="user-agent"/>
    </Headers>
</Remove>
Quitar encabezado - 2

En el siguiente ejemplo, se quitan varios encabezados:

<Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
</Remove>

En este ejemplo, se quita “h1”, “h2” y el segundo valor de “h3”. Si “h3” tiene solo un valor, no se quita “h3”.

<Copy>

Copia de la información desde el mensaje especificado por el atributo source en el mensaje de error.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Tipo complejo
Elemento principal <FaultResponse>
Elementos secundarios <Headers>
<StatusCode>

En la siguiente tabla, se describen los atributos de <Copy>:

Atributo ¿Es obligatorio? Tipo Descripción
fuente Opcional String

Especifica el objeto de origen de la copia.

  • Si source no se especifica, se lo trata como un mensaje simple. Por ejemplo, si la política está en el flujo de solicitud, la fuente predeterminada tiene como configuración el objeto request. Si la política está en el flujo de respuesta, su valor predeterminado es el objeto response. Si omites source, puedes usar una referencia absoluta a una variable de flujo como la fuente de la copia. Por ejemplo, especifica el valor como {request.header.user-agent}.
  • Si la variable de origen no se puede resolver o se resuelve en un tipo que no es de mensaje, <Copy> no responde.
<StatusCode>

Especifica el código de estado HTTP en el mensaje de error. Puedes copiar o configurar el valor del objeto especificado por el atributo source.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Tipo complejo
Elemento principal <Copy>
<Set>
Elementos secundarios Ninguno

Ejemplo:

Copiar código de estado
<Copy source='response'>
    <StatusCode>404</StatusCode>
</Copy>
Establecer código de estado
<Set source='request'>
    <StatusCode>404</StatusCode>
</Set>

<Remove>

Quita los encabezados HTTP especificados del mensaje de error. Para quitar todos los encabezados, especifica <Remove><Headers/></Remove>.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Tipo complejo
Elemento principal <FaultResponse>
Elementos secundarios <Headers>

<Set>

Establece la información en el mensaje de error.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Tipo complejo
Elemento principal <FaultResponse>
Elementos secundarios <Headers>
<Payload>
<StatusCode>
<Payload>

Configura la carga útil del mensaje de error.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo String
Elemento principal <Set>
Elementos secundarios Ninguno

Ejemplos:

Establecer carga útil de texto
<Set>
    <Payload contentType="text/plain">test1234</Payload>
</Set>
Establecer carga útil de JSON - 1
<Set>
    <Payload contentType="application/json">
        {"name":"foo", "type":"bar"}
    </Payload>
</Set>
Establecer la carga útil de JSON - 2
<Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
        {"name":"foo", "type":"@variable_name#"}
    </Payload>
</Set>

En este ejemplo, se insertan variables mediante los atributos variablePrefix y variableSuffix con caracteres delimitadores.

Establecer carga útil de JSON - 3
<Set>
    <Payload contentType="application/json">
        {"name":"foo", "type":"{variable_name}"}
    </Payload>
</Set>

En este ejemplo, se insertan variables mediante llaves. Puedes usar llaves a partir de la versión 16.08.17.

Establece la carga útil XML
<Set>
    <Payload contentType="text/xml">
        <root>
          <e1>sunday</e1>
          <e2>funday</e2>
          <e3>{var1}</e3>
    </Payload>
</Set>

En este ejemplo, se insertan variables mediante llaves. Puedes usar llaves a partir de la versión 16.08.17.

<IgnoreUnresolvedVariables>

Determina si el procesamiento se detiene cuando se encuentra una variable sin resolver.

Configúralo como true para ignorar las variables sin resolver y continuar con el procesamiento, de lo contrario, false. El valor predeterminado es true.

Configurar <IgnoreUnresolvedVariables> como true es diferente a configurar continueOnError como <MonetizationLimitsCheck> en true. Si configuras continueOnError como true, Apigee ignora todos los errores, no solo los errores de las variables.

El elemento <IgnoreUnresolvedVariables> usa la siguiente sintaxis:

Sintaxis

<IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

Ejemplo

En el siguiente ejemplo, se configura <IgnoreUnresolvedVariables> como false:

<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>

Códigos de error

This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause
mint.service.subscription_not_found_for_developer 500 This error occurs when a developer does not have a subscription to the API Product.
mint.service.wallet_not_found_for_developer 500 This error occurs when a prepaid developer attempts to consume a monetized API without maintaining a wallet for the currency specified in rate plan.
mint.service.developer_usage_exceeds_balance 500 This error occurs when a prepaid developer's usage exceeds the wallet balance.
mint.service.wallet_blocked_due_to_inactivity 500 This error occurs when a prepaid developer's wallet is not topped up in over 1.5 years and the developer attempts to consume an API.

Fault variables

Whenever there are execution errors in a policy, Apigee generates error messages. You can view these error messages in the error response. Many a time, system generated error messages might not be relevant in the context of your product. You might want to customize the error messages based on the type of error to make the messages more meaningful.

To customize the error messages, you can use either fault rules or the RaiseFault policy. For information about differences between fault rules and the RaiseFault policy, see FaultRules vs. the RaiseFault policy. You must check for conditions using the Condition element in both the fault rules and the RaiseFault policy. Apigee provides fault variables unique to each policy and the values of the fault variables are set when a policy triggers runtime errors. By using these variables, you can check for specific error conditions and take appropriate actions. For more information about checking error conditions, see Building conditions.

Variables Where Example
fault.name The fault.name can match to any of the faults listed in the Runtime errors table. The fault name is the last part of the fault code. fault.name Matches "UnresolvedVariable"
MonetizationLimitsCheck.POLICY_NAME.failed POLICY_NAME is the user-specified name of the policy that threw the fault. MonetizationLimitsCheck.monetization-limits-check-1.failed = true
For more information about policy errors, see What you need to know about policy errors

Variables de flujo

Las siguientes variables de flujo predefinidas se propagan automáticamente cuando se ejecuta la política MonetizationLimitsCheck. Para obtener más información, consulta las variables de flujo mint.

Variable de flujo Descripción
mint.limitscheck.is_request_blocked true para las solicitudes bloqueadas.
mint.limitscheck.is_subscription_found true si se encuentra una suscripción a la API
mint.limitscheck.purchased_product_name Nombre del producto de la API comprado. Por ejemplo: MyProduct.
mint.limitscheck.status_message Mensaje de estado. Se pueden devolver los siguientes valores:
  • limits_check_success: Se verificaron los límites correctamente.
  • apiproduct_name_and_developer_email_not_available: No se pudo determinar el desarrollador de la API ni el nombre del producto de API para realizar la verificación de límites.
  • apiproduct_name_not_available: No se puede determinar el nombre del producto de API para realizar la verificación de límites.
  • developer_email_not_available: No se pudo determinar la dirección de correo electrónico del desarrollador de la API para realizar la verificación de límites.
  • developer_usage_exceeds_balance: El saldo del desarrollador prepago es demasiado bajo.
  • rateplan_not_available: Producto de API sin plan de tarifas y sin errores.
  • subscription_not_available: El desarrollador de la API que posee la app no tiene una suscripción.
  • wallet_disabled_due_to_inactivity: El desarrollador no usó su billetera durante más de un año. Una recarga de al menos una unidad (USD 0.01) reactivará la tarjeta.
  • wallet_not_found: El desarrollador no tiene una billetera. Esto puede ocurrir cuando no se realizó ninguna recarga para ese desarrollador.
mint.subscription_end_time_ms Hora de finalización de la suscripción al producto de API.
mint.subscription_start_time_ms Hora de inicio de la suscripción al producto de API. Por ejemplo: 1618433956209.