Skip to content

About

Неофициальный Go-клиент Seller API GGSel. Один модуль на контуры v1 и v2: ключ и вход по подписи, деньги в decimal, типизированные ошибки.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-ggsel-api

Go Reference Go 1.26 CI

Неофициальный клиент официального Seller API GGSel. Один модуль github.com/Zoomish/go-ggsel-api, пакет ggsel, оба контура, база https://seller.ggsel.com. Это не клиент компании GGSel и не автовыдача.

English · документация пакета

Содержание

Установка

go get github.com/Zoomish/go-ggsel-api

Быстрый старт

New только собирает клиент и не открывает соединение. Дедлайн задаётся через 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

Контур v1

Для заказа, уникального кода и чатов нужен 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.

About

Неофициальный Go-клиент Seller API GGSel. Один модуль на контуры v1 и v2: ключ и вход по подписи, деньги в decimal, типизированные ошибки.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages