api-client-go/request.go

308 lines
9.3 KiB
Go
Raw Normal View History

package retailcrm
2018-02-27 11:37:15 +03:00
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
)
// CustomerRequest type.
2018-02-27 11:37:15 +03:00
type CustomerRequest struct {
By string `url:"by,omitempty"`
Site string `url:"site,omitempty"`
}
// CustomersRequest type.
2018-02-27 11:37:15 +03:00
type CustomersRequest struct {
Filter CustomersFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// CorporateCustomersRequest type.
type CorporateCustomersRequest struct {
Filter CorporateCustomersFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// CorporateCustomersNotesRequest type.
type CorporateCustomersNotesRequest struct {
Filter CorporateCustomersNotesFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// CorporateCustomerAddressesRequest type.
type CorporateCustomerAddressesRequest struct {
Filter CorporateCustomerAddressesFilter `url:"filter,omitempty"`
By string `url:"by,omitempty"`
Site string `url:"site,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// IdentifiersPairRequest type.
type IdentifiersPairRequest struct {
Filter IdentifiersPairFilter `url:"filter,omitempty"`
By string `url:"by,omitempty"`
Site string `url:"site,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// CustomersUploadRequest type.
2018-02-27 11:37:15 +03:00
type CustomersUploadRequest struct {
Customers []Customer `url:"customers,omitempty,brackets"`
Site string `url:"site,omitempty"`
}
// CustomersHistoryRequest type.
2018-02-27 11:37:15 +03:00
type CustomersHistoryRequest struct {
Filter CustomersHistoryFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// CorporateCustomersHistoryRequest type.
2019-11-25 10:55:06 +03:00
type CorporateCustomersHistoryRequest struct {
Filter CorporateCustomersHistoryFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// OrderRequest type.
2018-02-27 11:37:15 +03:00
type OrderRequest struct {
By string `url:"by,omitempty"`
Site string `url:"site,omitempty"`
}
// OrdersRequest type.
2018-02-27 11:37:15 +03:00
type OrdersRequest struct {
Filter OrdersFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// OrdersStatusesRequest type.
2020-06-29 16:26:10 +03:00
type OrdersStatusesRequest struct {
IDs []int `url:"ids,omitempty,brackets"`
ExternalIDs []string `url:"externalIds,omitempty,brackets"`
}
// OrdersUploadRequest type.
2018-02-27 11:37:15 +03:00
type OrdersUploadRequest struct {
Orders []Order `url:"orders,omitempty,brackets"`
Site string `url:"site,omitempty"`
}
// OrdersHistoryRequest type.
2018-02-27 11:37:15 +03:00
type OrdersHistoryRequest struct {
Filter OrdersHistoryFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// PacksRequest type.
2018-02-27 11:37:15 +03:00
type PacksRequest struct {
Filter PacksFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// PacksHistoryRequest type.
2018-02-27 11:37:15 +03:00
type PacksHistoryRequest struct {
Filter OrdersHistoryFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// UsersRequest type.
2018-02-27 11:37:15 +03:00
type UsersRequest struct {
Filter UsersFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// UserGroupsRequest type.
2018-02-27 11:37:15 +03:00
type UserGroupsRequest struct {
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// TasksRequest type.
2018-02-27 11:37:15 +03:00
type TasksRequest struct {
Filter TasksFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// NotesRequest type.
2018-02-27 11:37:15 +03:00
type NotesRequest struct {
2018-04-12 16:43:53 +03:00
Filter NotesFilter `url:"filter,omitempty"`
2018-02-27 11:37:15 +03:00
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// SegmentsRequest type.
2018-02-27 11:37:15 +03:00
type SegmentsRequest struct {
Filter SegmentsFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// InventoriesRequest type.
2018-02-27 11:37:15 +03:00
type InventoriesRequest struct {
Filter InventoriesFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// ProductsGroupsRequest type.
2018-02-27 11:37:15 +03:00
type ProductsGroupsRequest struct {
Filter ProductsGroupsFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// ProductsRequest type.
2018-02-27 11:37:15 +03:00
type ProductsRequest struct {
Filter ProductsFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// ProductsPropertiesRequest type.
2018-02-27 11:37:15 +03:00
type ProductsPropertiesRequest struct {
Filter ProductsPropertiesFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// DeliveryTrackingRequest type.
2018-02-27 11:37:15 +03:00
type DeliveryTrackingRequest struct {
2021-01-29 14:29:44 +03:00
DeliveryID string `json:"deliveryId,omitempty"`
TrackNumber string `json:"trackNumber,omitempty"`
History []DeliveryHistoryRecord `json:"history,omitempty"`
ExtraData map[string]string `json:"extraData,omitempty"`
2018-02-27 11:37:15 +03:00
}
// DeliveryShipmentsRequest type.
2018-02-27 11:37:15 +03:00
type DeliveryShipmentsRequest struct {
Filter ShipmentFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// CostsRequest type.
type CostsRequest struct {
Filter CostsFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// FilesRequest type.
2019-09-04 11:38:21 +03:00
type FilesRequest struct {
Filter FilesFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// CustomFieldsRequest type.
type CustomFieldsRequest struct {
Filter CustomFieldsFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// CustomDictionariesRequest type.
type CustomDictionariesRequest struct {
Filter CustomDictionariesFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
// ConnectRequest contains information about the system connection that is requested to be created.
type ConnectRequest struct {
// Token is used to verify the request. Do not use directly; use Verify instead.
Token string `json:"token"`
// APIKey that was generated for the module.
APIKey string `json:"apiKey"`
// URL of the system. Do not use directly; use SystemURL instead.
URL string `json:"systemUrl"`
}
2022-08-09 13:45:11 +03:00
// BonusOperationsRequest type.
type BonusOperationsRequest struct {
Filter BonusOperationsFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Cursor string `url:"cursor,omitempty"`
}
// AccountBonusOperationsRequest type.
type AccountBonusOperationsRequest struct {
Filter AccountBonusOperationsFilter `url:"filter,omitempty"`
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
}
type LoyaltyBonusCreditRequest struct {
Amount float64 `url:"amount"`
ActivationDate string `url:"activationDate,omitempty"`
ExpiredDate string `url:"expiredDate,omitempty"`
Comment string `url:"comment,omitempty"`
}
type LoyaltyBonusStatusDetailsRequest struct {
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
Filter LoyaltyBonusAPIFilterType `url:"filter,omitempty"`
}
2022-12-07 17:40:52 +03:00
type LoyaltyAccountsRequest struct {
Limit int `url:"limit,omitempty"`
Page int `url:"limit,omitempty"`
Filter LoyaltyAccountAPIFilter `url:"filter,omitempty"`
2022-12-07 17:40:52 +03:00
}
type LoyaltyCalculateRequest struct {
Site string
Order Order
Bonuses float32
}
type LoyaltiesRequest struct {
Limit int `url:"limit,omitempty"`
Page int `url:"page,omitempty"`
Filter LoyaltyAPIFilter `url:"filter,omitempty"`
2022-12-07 17:40:52 +03:00
}
2022-12-29 16:17:29 +03:00
type NotificationsSendRequest struct {
UserGroups []UserGroupType `json:"userGroups,omitempty"`
Type NotificationType `json:"type"`
Message string `json:"message"`
UserIDs []string `json:"userIds,omitempty"`
}
// SystemURL returns system URL from the connection request without trailing slash.
func (r ConnectRequest) SystemURL() string {
if r.URL == "" {
return ""
}
if r.URL[len(r.URL)-1:] == "/" {
return r.URL[:len(r.URL)-1]
}
return r.URL
}
// Verify returns true if connection request is legitimate. Application secret should be provided to this method.
func (r ConnectRequest) Verify(secret string) bool {
mac := hmac.New(sha256.New, []byte(secret))
if _, err := mac.Write([]byte(r.APIKey)); err != nil {
panic(err)
}
return hmac.Equal([]byte(r.Token), []byte(hex.EncodeToString(mac.Sum(nil))))
}