میتوانید از 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
: شناسه تجاری ارائه دهنده خدمات. برای مثال، اگر فیلتر باید فقط حسابهایی را برگرداند که دارای سرویس ارائهشده توسط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)
فیلتر برای حسابهایی با نامهای نمایشی حاوی «store» که نمیتوانند محصولات را آپلود کنند:
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
برای بازیابی یک لیست فیلتر شده از حساب ها استفاده کنید.
جاوا
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);
}
}
بعدش چی
- برای اطلاعات بیشتر درباره فیلتر کردن حسابها، به نحو فیلتر مراجعه کنید.