Filtrar contas que você pode acessar

É possível usar a API Merchant Accounts para conferir uma lista filtrada das contas a que você tem acesso, incluindo subcontas. É possível filtrar por nomes de exibição e relacionamentos com outras contas. Por exemplo, você pode filtrar contas com nomes de exibição que contenham a string "store" e que também tenham um status de vinculação PENDING para ver todas as lojas que ainda não aceitaram uma solicitação de vinculação de conta.

Para conferir todas as subcontas, chame accounts.v1beta.accounts.listSubAccounts.

Para conferir uma lista filtrada de todas as contas a que você tem acesso, incluindo subcontas e contas que têm você como User, chame accounts.v1beta.accounts.list e especifique seus critérios de filtro no campo filter.

Para detalhes sobre a sintaxe do campo filter, consulte a referência da sintaxe de filtro.

Estes são os tipos de filtros que você pode usar:

Filtros de conta

É possível usar os seguintes campos para filtrar no nível account:

  • accountName: filtra pelo accountName do recurso account.
  • relationship(...): filtra pelo tipo de relacionamento que a conta tem com outra. É possível incluir vários filtros relationship(...) em uma solicitação.

Filtros de relacionamento

Use a função relationship(...) para filtrar com base nos seguintes critérios:

  • providerId: o ID do comerciante do provedor de serviços. Por exemplo, se o filtro precisar retornar apenas contas que tenham um serviço fornecido por account/123, use providerId = 123.
  • accountIdAlias: O alias do ID da conta configurado para a relação.
  • service(...): o serviço fornecido como parte do relacionamento. É possível incluir várias funções service(...) em uma função relationship(...).

Filtros de serviço

É possível usar a função service(...) para filtrar ainda mais as contas com base no status das relações e nos tipos de serviços que essas relações oferecem:

  • externalAccountId: o ID da conta externa do provedor de serviços para a conta a que ele fornece um serviço.
  • handshakeState: o estado de um contrato de serviço entre duas contas. Aceita os seguintes valores:
    • PENDING
    • APPROVED
  • type: O tipo de serviço fornecido pelo provedor. Aceita os seguintes valores:
    • ACCOUNT_MANAGEMENT O provedor gerencia a conta.
    • ACCOUNT_AGGREGATION O provedor é um agregador da conta.

Exemplos

Confira alguns exemplos de filtros que você pode testar.

Filtrar contas com nomes de exibição que contenham "store" e provedores com o ID "123":

accountName = "*store*" AND relationship(providerId = 123)

Filtrar todas as subcontas da conta "123":

relationship(providerId = 123 AND service(type = "ACCOUNT_AGGREGATION"))

Filtrar contas com serviços de gerenciamento de contas aprovados:

relationship(service(handshakeState = "APPROVED" AND type = "ACCOUNT_MANAGEMENT"))

Filtrar contas com uma relação que tenha um alias específico e que tenha um serviço com um ID de conta externa específico.

relationship(accountIdAlias = "alias" AND service(externalAccountId = "extAcctId"))

O exemplo a seguir demonstra como usar o pacote ListAccountsRequest para recuperar uma lista filtrada das contas.

Java

  public static void filterAccounts(Config config) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    AccountsServiceSettings accountsServiceSettings =
        AccountsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Calls the API and catches and prints any network failures/errors.
    try (AccountsServiceClient accountsServiceClient =
        AccountsServiceClient.create(accountsServiceSettings)) {

      // Filter for accounts with display names containing "store" and a provider with the ID "123":
      String filter = "accountName = \"*store*\" AND relationship(providerId = 123)";

      // Filter for all subaccounts of account "123":
      // String filter2 = "relationship(callerHasAccessToProvider() AND providerId = 123 AND
      // service(type = \"ACCOUNT_AGGREGATION\"))";

      // String filter3 = "relationship(service(handshakeState = \"APPROVED\" AND type =
      // \"ACCOUNT_MANAGEMENT\") AND providerId = 123)";

      ListAccountsRequest request = ListAccountsRequest.newBuilder().setFilter(filter).build();

      System.out.println("Sending list accounts request with filter:");
      ListAccountsPagedResponse response = accountsServiceClient.listAccounts(request);

      int count = 0;

      // Iterates over all rows in all pages and prints the sub-account
      // in each row.
      // `response.iterateAll()` automatically uses the `nextPageToken` and recalls the
      // request to fetch all pages of data.
      for (Account account : response.iterateAll()) {
        System.out.println(account);
        count++;
      }
      System.out.print("The following count of elements were returned: ");
      System.out.println(count);
    } catch (Exception e) {
      System.out.println(e);
    }
  }

A seguir