Неофициальный клиент официального Seller API GGSel. Один модуль github.com/Zoomish/go-ggsel-api, пакет ggsel, оба контура, база https://seller.ggsel.com. Это не клиент компании GGSel и не автовыдача.
- Установка
- Быстрый старт
- Контур v1
- Деньги и частичное обновление
- Ошибки
- Повторы
- Что входит в модуль
- Контракт
- Безопасность
- Лицензия
go get github.com/Zoomish/go-ggsel-apiNew только собирает клиент и не открывает соединение. Дедлайн задаётся через context.
client, err := ggsel.New(ggsel.Options{
APIKey: os.Getenv("GGSEL_API_KEY"),
})
if err != nil {
return err
}
page, err := client.ListOffers(ctx, ggsel.ListOffersParams{})Ключ v2 уходит в заголовок Authorization как есть, без Bearer.
Без ключа пример не открывает сеть и завершается с кодом 0:
go run ./examples/list_offersДля заказа, уникального кода и чатов нужен SellerID. Token вызывающий не передаёт и не видит: клиент сам делает apilogin и подставляет query-параметр.
client, err := ggsel.New(ggsel.Options{
APIKey: os.Getenv("GGSEL_API_KEY"),
SellerID: sellerID,
})
order, err := client.GetOrder(ctx, invoiceID)Цены и суммы — ggsel.Decimal поверх shopspring/decimal, не float64. В JSON уходит число. Значение из строки собирает ParseDecimal.
В OfferWrite nil-поле не сериализуется. Ptr(false), ноль и пустая строка уходят.
_, err = client.UpdateOffer(ctx, offerID, ggsel.OfferWrite{
IsAutoselling: ggsel.Ptr(false),
})var apiErr *ggsel.APIError
if errors.As(err, &apiErr) {
// apiErr.StatusCode, apiErr.RetVal, apiErr.Errors
}
if ggsel.IsUnauthorized(err) {
// HTTP 401
}Error() не содержит ключ, sign и token.
Повторяются только безопасные GET. 401 и отказ apilogin не повторяются. POST и PATCH, включая создание оффера и отправку сообщения, тоже не повторяются.
Один клиент на оба контура. Полный список методов — на pkg.go.dev.
v2: офферы, категории, опции и варианты, склад и ключи вариантов, пакетные activate/pause/delete, статус async job, обход страниц по HasNextPage.
v1: вход по подписи, заказ, уникальный код, чаты, категории и товары, карточка товара, товары продавца, баланс, чеки, массовые цены и статус этой задачи, отзывы, последние продажи.
В модуле нет XML shop_search.asp. Клиент не опрашивает job в цикле и не добавляет query page там, где его нет в снимке.
Пути и поля взяты из публичной документации Seller API. Клиент на seller.ggsel.com за спецификацией не ходит. Оба снимка лежат в testdata/seller-api-v1.openapi.json и testdata/seller-api-v2.openapi.json. Раз в месяц go run ./cmd/docscheck сравнивает их с сайтом.
Не кладите API-ключ, sign и token в issue и pull request. Как сообщать об уязвимости: SECURITY.md.
MIT.