Gerenciar direitos do cliente para seu produto SaaS

Quando os clientes escolhem um plano de preços para seu software, o Google cria um direito, que indica que o cliente comprou seu produto no Cloud Marketplace. Nesta seção, mostramos como criar e gerenciar direitos para seus clientes usando a API Partner Procurement.

Para mais detalhes sobre o gerenciamento de direitos, acesse a documentação de referência.

Antes de começar

  • Configure o acesso à API Cloud Commerce Partner Procurement, conforme descrito em Integrar seu app.

Se você tiver ativado vários pedidos do mesmo produto, a API Partner Procurement poderá enviar vários eventos com o tipo de evento ENTITLEMENT_ACTIVE para o mesmo valor de ACCOUNT_ID, cada um com um ENTITLEMENT_ID exclusivo que representa uma oferta diferente. Isso significa que você precisa garantir que a lógica de processamento de eventos do app possa responder ao ENTITLEMENT_ID em vez do ACCOUNT_ID ou do PRODUCT_ID.

É necessário garantir que a integração do front-end possa processar o novo objeto orders incluído no payload do JWT. Para mais informações, consulte Integrar o front-end do app.

Para mais informações sobre como ativar vários pedidos do mesmo produto, consulte Ativar vários pedidos do mesmo produto.

Aprovar um direito de acesso

Quando um cliente escolhe um plano de preços, o Cloud Marketplace cria um direito e envia a seguinte mensagem do Pub/Sub ao seu app:

{
  "eventId": "...",
  "eventType": "ENTITLEMENT_CREATION_REQUESTED",
  "providerId": "YOUR_PARTNER_ID",
  "entitlement": {
    "id": "ENTITLEMENT_ID",
    "updateTime": "...",
    "newOfferDuration": "P2Y3M",   // Contract duration for offer-based entitlements
  },
}

em que ENTITLEMENT_ID é um ID criado pelo Cloud Marketplace. Se a oferta tiver uma duração especificada, ela será informada em anos e meses. Se a oferta tiver uma data de término especificada, em vez de uma duração, o campo que indica a duração vai estar vazio.

No seu sistema, atualize a conta do usuário para refletir que ele comprou um plano. Em seguida, para aprovar o direito, faça uma solicitação HTTP POST à API Partner Procurement e envie o ENTITLEMENT_ID que você está aprovando:

POST v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID:approve

Recusar um direito

Para rejeitar um direito, faça uma solicitação HTTP POST à API Partner Procurement e use o método reject na sua solicitação:

POST v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID:reject

Para informar um motivo para rejeitar o direito no corpo da solicitação, use o seguinte formato:

{
  "reason": "..."
}

Mudar um plano de direitos

Dependendo de como você configura seus planos de preços, seus clientes podem alterar o plano deles. Se um cliente selecionar um novo plano de preços, você receberá uma mensagem do Pub/Sub, no seguinte formato:

{
  "eventId": "...",
  "eventType": "ENTITLEMENT_PLAN_CHANGE_REQUESTED",
  "providerId": "YOUR_PARTNER_ID",
  "entitlement": {
    "id": "ENTITLEMENT_ID",
    "newPlan": "ultimate",   // New plan
    "updateTime": "...",
    "newOfferDuration": "P2Y3M",   // Contract duration for the new offer, for offer-based entitlements
    "newProduct": "test-product.cloud.goog"
    "newOffer": "projects/1234567/services/test-product.cloud.goog/standardOffers/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
  },
}

Se a oferta tiver uma duração especificada, ela será informada em anos e meses. Se a oferta tiver uma data de término especificada, em vez de uma duração, o campo que indica a duração vai estar vazio.

Para aprovar a alteração do plano, faça a seguinte solicitação HTTP POST à API Partner Procurement:

POST v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID:approvePlanChange

O corpo da solicitação precisa ter o plano que está sendo aprovado:

{
  "pendingPlanName": PLAN_NAME
}

Depois que a alteração for aprovada, você receberá outra mensagem do Pub/Sub quando a alteração entrar em vigor. Na mensagem, o campo eventType muda para ENTITLEMENT_PLAN_CHANGED. Para verificar o status de um plano, faça a seguinte solicitação HTTP GET à API Partner Procurement.

GET v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID

A resposta é semelhante à seguinte, com o campo state indicando se o novo plano está ativo ou se a alteração do plano ainda está pendente:

{
  "name": "providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID",
  "provider": "YOUR_PARTNER_ID",
  "account": "USER_ACCOUNT_ID",
  "product": "example-server",
  "plan": "pro",
  "state": "ENTITLEMENT_PENDING_PLAN_CHANGE",
  "newPendingPlan": "ultimate",
  ...
}

Cancelar um direito

Se um usuário decidir cancelar um direito dele, você receberá uma notificação do Pub/Sub. De maneira similar à alteração de um plano, o cancelamento real pode entrar em vigor no final do ciclo de faturamento real.

A notificação está no seguinte formato:

{
  "eventId": "...",
  // If the entitlement is canceled at the end of the month,
  // eventType is ENTITLEMENT_PENDING_CANCELLATION
  "eventType": "ENTITLEMENT_CANCELLED",
  "providerId": "YOUR_PARTNER_ID",
  "entitlement": {
    "id": "ENTITLEMENT_ID",
    "updateTime": "..."
  },
}

Excluir um direito

Se um usuário fizer uma solicitação direta ao suporte do Google ou sair da plataforma do Google, os direitos dele serão cancelados imediatamente, e os direitos e as contas serão excluídos após um período de carência de 60 dias. Para proteger a privacidade do usuário, exclua os dados dele dos seus servidores quando receber a notificação.

Quando os direitos são cancelados e a conta é excluída, você recebe notificações semelhantes às seguintes:

{
  "eventId": "...",
  "eventType": "ENTITLEMENT_DELETED",
  "providerId": "YOUR_PARTNER_ID",
  "entitlement": {
    "id": "ENTITLEMENT_ID",
    "updateTime": "...",
  },
}
{
  "eventId": "...",
  "eventType": "ACCOUNT_DELETED",
  "providerId": "YOUR_PARTNER_ID",
  "account": {
    "id": "USER_ACCOUNT_ID",
    "updateTime": "...",
  },
}

Lista de tipos de eventos para tarefas da conta

A seguir, é apresentada uma lista dos eventTypes que seu aplicativo pode receber em mensagens do Pub/Sub:

eventTypeDescrição
ACCOUNT_CREATION_REQUESTEDObsoleto
ACCOUNT_ACTIVEIndica que a conta do cliente foi criada.
ACCOUNT_DELETEDIndica que a conta do cliente foi excluída dos sistemas do Google Cloud.
ENTITLEMENT_CREATION_REQUESTEDIndica que um cliente selecionou um dos seus planos de preços.
ENTITLEMENT_OFFER_ACCEPTEDIndica que uma oferta foi aceita por um cliente. Inclui o horário de início programado da oferta, se houver. Esse evento é enviado para ofertas privadas e padrão (compras públicas).
ENTITLEMENT_ACTIVEIndica que o plano escolhido de um cliente está ativo agora.
ENTITLEMENT_PLAN_CHANGE_REQUESTEDIndica que um cliente escolheu um novo plano.
ENTITLEMENT_PLAN_CHANGEDIndica que a alteração do plano de um cliente foi aprovada e as alterações entraram em vigor.
ENTITLEMENT_PLAN_CHANGE_CANCELLEDIndica o cancelamento da alteração do plano de um cliente devido à falta de aprovação ou ao retorno do cliente ao plano antigo.
ENTITLEMENT_PENDING_CANCELLATIONIndica o cancelamento do plano pelo cliente, pendente até o final do ciclo de faturamento.
ENTITLEMENT_CANCELLATION_REVERTEDIndica que o cancelamento pendente de um cliente foi revertido. Observe que os cancelamentos não podem ser revertidos após a finalização.
ENTITLEMENT_CANCELLEDIndica o cancelamento do plano de um cliente.
ENTITLEMENT_CANCELLINGIndica que o plano de um cliente está em processo de cancelamento.
ENTITLEMENT_RENEWEDIndica que o direito de um cliente foi renovado por outro período. Você não precisa fazer nada para concluir a renovação.
ENTITLEMENT_OFFER_ENDEDIndica que a oferta privada de um cliente terminou. Se o direito do cliente tiver sido cancelado, um evento ENTITLEMENT_CANCELLED separado será acionado. Se o direito do cliente ainda estiver ativo, o plano será revertido para o preço sem desconto.
ENTITLEMENT_DELETEDIndica que as informações sobre o plano de um cliente foram excluídas do Cloud Marketplace.