סינון חשבונות שיש לכם גישה אליהם

אפשר להשתמש ב-Merchant Accounts API כדי להציג רשימה מסוננת של החשבונות שיש לכם גישה אליהם, כולל חשבונות משנה. אפשר לסנן אותם לפי השם המוצג ולפי היחסים שלהם לחשבונות אחרים.

לדוגמה, כדי לראות את כל החנויות שלא אישרו בקשה לקישור חשבון, אפשר לסנן את החשבונות עם שמות מוצגים שמכילים את המחרוזת "store" ועם סטטוס קישור של PENDING.

סינון בסיסי

כדי להציג את כל חשבונות המשנה, קוראים ל-accounts.v1beta.accounts.listSubAccounts.

כדי להציג רשימה מסוננת של כל החשבונות שיש לכם גישה אליהם, כולל חשבונות משניים וחשבונות שבהם אתם מוגדרים בתור User, צריך להפעיל את הפונקציה accounts.v1beta.accounts.list ולציין את קריטריונים הסינון בשדה filter.

פרטים על התחביר של השדה filter זמינים במאמר העזרה בנושא התחביר של המסננים.

מסנני חשבונות

אפשר להשתמש בשדות הבאים כדי לסנן ברמת account:

  • accountName: סינון לפי accountName של המשאב account.
  • capabilities: סינון לפי capabilities של המשאב account (שימו לב שהשדה הזה לא זמין במשאב עצמו). יש תמיכה רק ביכולת CAN_UPLOAD_PRODUCTS. השדה הזה תומך בשלילה ומשתמש בתחביר של אוסף. לדוגמה:
    • הפונקציה capabilities:CAN_UPLOAD_PRODUCTS מחזירה חשבונות שאפשר להעלות אליהם מוצרים
    • הפונקציה -capabilities:CAN_UPLOAD_PRODUCTS מחזירה חשבונות שלא יכולים להעלות מוצרים
    • הפונקציה NOT capabilities:CAN_UPLOAD_PRODUCTS מחזירה חשבונות שלא יכולים להעלות מוצרים
  • relationship(...): סינון לפי סוג הקשר של החשבון לחשבון אחר. אפשר לכלול כמה מסנני relationship(...) בבקשה אחת.

מסנני יחסים

AccountRelationship הוא צאצא של המשאב Account. השדה היחיד שאפשר לשנות בו הוא accountIdAlias. השדה הזה מאפשר לספק לציין כינוי לחשבון, דרך חלופית להפנות אליו. כשיוצרים שירות בין חשבון Merchant Center לבין צד שלישי, נוצרת מכונה של המשאב הזה.

אפשר להשתמש בפונקציה relationship(...) כדי לסנן לפי הקריטריונים הבאים:

  • providerId: מספר חשבון Merchant של ספק השירות. לדוגמה, אם המסנן אמור להציג רק חשבונות שיש להם שירות שמסופק על ידי account/123, צריך להשתמש ב-providerId = 123.
  • accountIdAlias: הכינוי של מספר החשבון שמוגדר ליחס. כדי להשתמש במסנן הזה, צריך גם להגדיר providerId.
  • service(...): השירות שסופק במסגרת הקשר. אפשר לכלול כמה פונקציות service(...) בפונקציית relationship(...) אחת.

מסנני שירות

אפשר להשתמש בפונקציה service(...) כדי לסנן חשבונות נוספים על סמך סטטוס היחסים שלהם וסוג השירותים שהיחסים האלה מספקים:

  • externalAccountId: מזהה החשבון החיצוני של ספק השירות בחשבון שאליו הוא מספק שירות.
  • handshakeState: המצב של הסכם השירות בין שני חשבונות. הערכים הקבילים הם:
    • PENDING
    • APPROVED
  • type: סוג השירות שספק השירות מספק. הערכים הקבילים הם:
    • ACCOUNT_MANAGEMENT הספק מנהל את החשבון.
    • ACCOUNT_AGGREGATION הספק הוא אתר אגרגטור של החשבון.

דוגמאות

הנה כמה דוגמאות למסננים שאפשר לנסות.

סינון לפי חשבונות עם שמות מוצגים שמכילים את המילה 'store' וספקים עם המזהה '123':

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

מסננים את החשבונות עם השמות המוצגים שמכילים את המילה 'חנות' ושאי אפשר להעלות בהם מוצרים:

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

סינון של כל חשבונות המשנה של החשבון '123':

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

סינון לפי חשבונות עם שירותים מאושרים לניהול חשבונות:

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

סינון של חשבונות עם קשר שיש לו כינוי ספציפי, ולקשר יש שירות עם מזהה חשבון חיצוני ספציפי.

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

הדוגמה הבאה ממחישה איך אפשר להשתמש בחבילה ListAccountsRequest כדי לאחזר רשימה מסוננת של החשבונות.

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

המאמרים הבאים