Filtra gli account a cui puoi accedere

Puoi utilizzare l'API Merchant Accounts per visualizzare un elenco filtrato degli account a cui puoi accedere, inclusi i subaccount. Puoi filtrarli per nome visualizzato e per le loro relazioni con altri account.

Ad esempio, per visualizzare tutti i tuoi negozi che non hanno accettato una richiesta di collegamento dell'account, puoi filtrare per gli account con nomi visualizzati contenenti la stringa "store" e con stato del collegamento PENDING.

Filtri di base

Per visualizzare tutti i tuoi subaccount, chiama accounts.v1beta.accounts.listSubAccounts.

Per visualizzare un elenco filtrato di tutti gli account a cui hai accesso, inclusi i subaccount e gli account in cui sei un User, chiama accounts.v1beta.accounts.list e specifica i criteri di filtro nel campo filter.

Per informazioni dettagliate sulla sintassi del campo filter, consulta la documentazione di riferimento sulla sintassi dei filtri.

Filtri account

Puoi utilizzare i seguenti campi per filtrare a livello di account:

  • accountName: filtra in base al accountName della risorsa account.
  • capabilities: filtra in base al valore capabilities della risorsa account (tieni presente che questo campo non è disponibile nella risorsa stessa). È supportata solo la funzionalità CAN_UPLOAD_PRODUCTS. Questo campo supporta la negazione e utilizza la sintassi di raccolta. Ad esempio:
    • capabilities:CAN_UPLOAD_PRODUCTS restituisce gli account che possono caricare i prodotti
    • -capabilities:CAN_UPLOAD_PRODUCTS restituisce gli account che non possono caricare prodotti
    • NOT capabilities:CAN_UPLOAD_PRODUCTS restituisce gli account che non possono caricare i prodotti
  • relationship(...): filtra in base al tipo di relazione dell'account con un altro account. Puoi includere più filtri relationship(...) in un'unica richiesta.

Filtri delle relazioni

AccountRelationship è un elemento secondario della risorsa Account. L'unico campo mutabile è accountIdAlias. Questo campo consente a un fornitore di specificare un alias per un account, un modo alternativo per farvi riferimento. L'impostazione di un servizio tra un account Merchant Center e una terza parte crea un'istanza di questa risorsa.

Puoi utilizzare la funzione relationship(...) per filtrare in base ai seguenti criteri:

  • providerId: l'ID commerciante del fornitore di servizi. Ad esempio, se il filtro deve restituire solo gli account con un servizio fornito da account/123, utilizza providerId = 123.
  • accountIdAlias: L'alias dell'ID account configurato per la relazione. Questo filtro richiede anche l'impostazione di un providerId.
  • service(...): il servizio fornito nell'ambito della relazione. Puoi includere più funzioni service(...) in una funzione relationship(...).

Filtri dei servizi

Puoi utilizzare la funzione service(...) per filtrare ulteriormente gli account in base allo stato dei loro rapporti e ai tipi di servizi forniti da questi rapporti:

  • externalAccountId: l'ID account esterno del fornitore di servizi per l'account a cui fornisce un servizio.
  • handshakeState: lo stato di un contratto di servizio tra due account. Accetta i seguenti valori:
    • PENDING
    • APPROVED
  • type: Il tipo di servizio fornito dal fornitore. Accetta i seguenti valori:
    • ACCOUNT_MANAGEMENT Il fornitore gestisce l'account.
    • ACCOUNT_AGGREGATION Il fornitore è un aggregatore dell'account.

Esempi

Ecco alcuni esempi di filtri che puoi provare.

Filtra per gli account con nomi visualizzati contenenti "negozio" e fornitori con ID "123":

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

Filtra per gli account con nomi visualizzati contenenti "negozio" che non possono caricare prodotti:

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

Filtra per tutti i subaccount dell'account "123":

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

Filtra per gli account con servizi di gestione dell'account approvati:

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

Filtra per gli account con una relazione che ha un alias specifico e la relazione ha un servizio con un ID account esterno specifico.

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

L'esempio seguente mostra come utilizzare il pacchetto ListAccountsRequest per recuperare un elenco filtrato degli account.

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

Passaggi successivi