-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGetBrandsByCode.go
85 lines (74 loc) · 4.25 KB
/
GetBrandsByCode.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package avtoto
import (
"encoding/json"
)
// Метод [GetBrandsByCode] предназначен для поиска списка брендов по артикулу запчасти
// Примечание: Сервис поиска предложений будет работать в случае выполнения условия: сумма заказов / количество запросов > 20 после некоторого порога проценок. [*] — эти данные можно узнать зайдя на страницу Настройки после авторизации на сайте
//
// # Структура запроса метода GetBrandsByCode
//
// [GetBrandsByCode]: https://www.avtoto.ru/services/search/docs/technical_soap.html#GetBrandsByCode
type GetBrandsByCodeRequest struct {
UserId int `json:"user_id"` // [*] Уникальный идентификатор пользователя (номер клиента) (тип: целое)
UserLogin string `json:"user_login"` // [*] Логин пользователя (тип: строка)
UserPassword string `json:"user_password"` // Пароль пользователя (тип: строка)
SearchCode string `json:"search_code"` // Поисковый запрос, минимум 3 символа (тип: строка)
}
// Метод [GetBrandsByCode] предназначен для поиска списка брендов по артикулу запчасти
//
// # Структура ответа метода GetBrandsByCode
//
// [GetBrandsByCode]: https://www.avtoto.ru/services/search/docs/technical_soap.html#GetBrandsByCode
type GetBrandsByCodeResponse struct {
Brands []struct { // Список брендов, найденных по запросу - индексированный массив с упорядоченными целочисленными ключами, начиная с 0.
Manuf string `json:"Manuf"` // Производитель
Name string `json:"Name"` // Название
} `json:"Brands"`
Info struct {
Errors []string `json:"Errors"`
} `json:"Info"`
}
// Получить количество Parts метода GetBrandsByCode
func (GetBrandsByCodeRes GetBrandsByCodeResponse) LenParts() int {
return len(GetBrandsByCodeRes.Brands)
}
// Получить данные по методу GetBrandsByCode
//
// myBrand := avtoto.GetBrandsByCodeRequest{SearchCode: mySearchCode} // Создаём структуру запроса бренда по заданному артиклу
// dataGetBrandsByCode, errorSearch := user.GetBrandsByCode(myBrand) // Получаем с сервера список брендов
// if errorSearch != nil {
// log.Fatal(errorSearch)
// }
// fmt.Println("> Для артикла", mySearchCode, "найдено", len(dataGetBrandsByCode.Brands), "бренда(ов).",
// "\nПервый найденный бренд имеет производителя", dataGetBrandsByCode.Brands[0].Manuf, "и имя", dataGetBrandsByCode.Brands[0].Name)
func (user User) GetBrandsByCode(GetBrandsByCodeReq GetBrandsByCodeRequest) (GetBrandsByCodeResponse, error) {
GetBrandsByCodeReq.UserId = user.UserId
GetBrandsByCodeReq.UserLogin = user.UserLogin
GetBrandsByCodeReq.UserPassword = user.UserPassword
// Ответ от сервера
var GetBrandsByCodeRes GetBrandsByCodeResponse
// Подготовить данные для загрузки
bytesRepresentation, responseError := json.Marshal(GetBrandsByCodeReq)
if responseError != nil {
return GetBrandsByCodeResponse{}, responseError
}
// Выполнить запрос
body, responseError := httpPost(bytesRepresentation, "GetBrandsByCode")
if responseError != nil {
return GetBrandsByCodeResponse{}, responseError
}
// Распарсить данные
responseErrorUnmarshal := json.Unmarshal(body, &GetBrandsByCodeRes)
if responseErrorUnmarshal != nil {
return GetBrandsByCodeResponse{}, responseErrorUnmarshal
}
return GetBrandsByCodeRes, responseError
}
// Получить ошибку из ответа метода GetBrandsByCode
func (GetBrandsByCodeRes GetBrandsByCodeResponse) Error() string {
if len(GetBrandsByCodeRes.Info.Errors) == 0 {
return ""
} else {
return GetBrandsByCodeRes.Info.Errors[0]
}
}