Filtrer les comptes auxquels vous pouvez accéder

Vous pouvez utiliser l'API Merchant Accounts pour afficher une liste filtrée des comptes auxquels vous pouvez accéder, y compris les sous-comptes. Vous pouvez les filtrer par nom à afficher et par relations avec d'autres comptes.

Par exemple, pour afficher tous vos magasins qui n'ont pas accepté une demande d'association de compte, vous pouvez filtrer les comptes dont les noms à afficher contiennent la chaîne "store" et dont l'état d'association est PENDING.

Filtrage de base

Pour afficher tous vos sous-comptes, appelez accounts.v1beta.accounts.listSubAccounts.

Pour afficher une liste filtrée de tous les comptes auxquels vous avez accès, y compris les sous-comptes et les comptes pour lesquels vous êtes User, appelez accounts.v1beta.accounts.list et spécifiez vos critères de filtrage dans le champ filter.

Pour en savoir plus sur la syntaxe du champ filter, consultez la documentation de référence sur la syntaxe des filtres.

Filtres de compte

Vous pouvez utiliser les champs suivants pour filtrer au niveau account:

  • accountName: filtre par accountName de la ressource account.
  • capabilities: filtres par capabilities de la ressource account (notez que ce champ n'est pas disponible sur la ressource elle-même). Seule la fonctionnalité CAN_UPLOAD_PRODUCTS est prise en charge. Ce champ accepte la négation et utilise la syntaxe de collection. Exemple :
    • capabilities:CAN_UPLOAD_PRODUCTS renvoie les comptes pouvant importer des produits.
    • -capabilities:CAN_UPLOAD_PRODUCTS renvoie les comptes qui ne peuvent pas importer de produits.
    • NOT capabilities:CAN_UPLOAD_PRODUCTS renvoie les comptes qui ne peuvent pas importer de produits.
  • relationship(...): filtre par type de relation du compte avec un autre compte. Vous pouvez inclure plusieurs filtres relationship(...) dans une même requête.

Filtres de relations

AccountRelationship est un enfant de la ressource Account. Son seul champ modifiable est accountIdAlias. Ce champ permet à un fournisseur de spécifier un alias pour un compte, un autre moyen de le référencer. Établir un service entre un compte Merchant Center et un tiers crée une instance de cette ressource.

Vous pouvez utiliser la fonction relationship(...) pour filtrer en fonction des critères suivants:

  • providerId: ID du marchand du fournisseur de services. Par exemple, si le filtre ne doit renvoyer que les comptes dont un service est fourni par account/123, utilisez providerId = 123.
  • accountIdAlias: Alias de l'ID de compte configuré pour la relation. Ce filtre nécessite également de définir un providerId.
  • service(...): service fourni dans le cadre de la relation. Vous pouvez inclure plusieurs fonctions service(...) dans une fonction relationship(...).

Filtres de service

Vous pouvez utiliser la fonction service(...) pour filtrer davantage les comptes en fonction de l'état de leurs relations et des types de services qu'elles fournissent:

  • externalAccountId: ID de compte externe du fournisseur de services pour le compte auquel il fournit un service.
  • handshakeState: état d'un contrat de service entre deux comptes. Accepte les valeurs suivantes :
    • PENDING
    • APPROVED
  • type: Type de service fourni par le fournisseur. Accepte les valeurs suivantes :
    • ACCOUNT_MANAGEMENT : le fournisseur gère le compte.
    • ACCOUNT_AGGREGATION Le fournisseur est un agrégateur du compte.

Exemples

Voici quelques exemples de filtres que vous pouvez essayer.

Filtrez les comptes dont les noms à afficher contiennent "store" et les fournisseurs dont l'ID est "123":

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

Filtrez les comptes dont le nom à afficher contient "magasin" et qui ne peuvent pas importer de produits:

accountName = "*store*" AND -capabilities:CAN_UPLOAD_PRODUCTS

Filtrez pour tous les sous-comptes du compte "123":

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

Filtrez les comptes avec des services de gestion de compte approuvés:

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

Filtrez les comptes dont une relation possède un alias spécifique et un service avec un ID de compte externe spécifique.

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

L'exemple suivant montre comment utiliser le package ListAccountsRequest pour récupérer une liste filtrée des comptes.

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1beta.Account;
import com.google.shopping.merchant.accounts.v1beta.AccountsServiceClient;
import com.google.shopping.merchant.accounts.v1beta.AccountsServiceClient.ListAccountsPagedResponse;
import com.google.shopping.merchant.accounts.v1beta.AccountsServiceSettings;
import com.google.shopping.merchant.accounts.v1beta.ListAccountsRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to filter the accounts the user making the request has access to. */
public class FilterAccountsSample {

  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(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);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();

    filterAccounts(config);
  }
}

Étape suivante