3180 lines
145 KiB
Go
3180 lines
145 KiB
Go
/*
|
||
API Яндекс Маркета для продавцов
|
||
|
||
API Яндекс Маркета помогает продавцам автоматизировать и упростить работу с маркетплейсом. В числе возможностей интеграции: * управление каталогом товаров и витриной, * обработка заказов, * изменение настроек магазина, * получение отчетов.
|
||
|
||
API version: LATEST
|
||
*/
|
||
|
||
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
|
||
|
||
package ymclient
|
||
|
||
import (
|
||
"bytes"
|
||
"context"
|
||
"io"
|
||
"net/http"
|
||
"net/url"
|
||
"strings"
|
||
"time"
|
||
)
|
||
|
||
// OrdersAPIService OrdersAPI service
|
||
type OrdersAPIService service
|
||
|
||
type OrdersAPIAcceptOrderCancellationRequest struct {
|
||
ctx context.Context
|
||
ApiService *OrdersAPIService
|
||
campaignId int64
|
||
orderId int64
|
||
acceptOrderCancellationRequest *AcceptOrderCancellationRequest
|
||
}
|
||
|
||
func (r OrdersAPIAcceptOrderCancellationRequest) AcceptOrderCancellationRequest(acceptOrderCancellationRequest AcceptOrderCancellationRequest) OrdersAPIAcceptOrderCancellationRequest {
|
||
r.acceptOrderCancellationRequest = &acceptOrderCancellationRequest
|
||
return r
|
||
}
|
||
|
||
func (r OrdersAPIAcceptOrderCancellationRequest) Execute() (*EmptyApiResponse, *http.Response, error) {
|
||
return r.ApiService.AcceptOrderCancellationExecute(r)
|
||
}
|
||
|
||
/*
|
||
AcceptOrderCancellation Отмена заказа покупателем
|
||
|
||
{% include notitle [:no-translate[access]](../../_auto/method_scopes/acceptOrderCancellation.md) %}
|
||
|
||
Подтверждает или отклоняет заявку покупателя на отмену заказа, который передан службе доставки.
|
||
|
||
Покупатель может отменить заказ в течение его обработки или доставки. Если заказ еще обрабатывается (статус `PROCESSING`), вам не нужно подтверждать отмену заказа — он будет отменен автоматически.
|
||
|
||
Если заказ уже передан службе доставки (статус `DELIVERY` или `PICKUP`) и пользователь отменил его, вы можете предупредить службу об отмене в течение 48 часов.
|
||
|
||
- Служба доставки узнала об отмене до передачи заказа покупателю — подтвердите отмену с помощью запроса [PUT campaigns/{campaignId}/orders/{orderId}/cancellation/accept](../../reference/orders/acceptOrderCancellation.md).
|
||
- Заказ уже доставлен — отклоните отмену с помощью этого же запроса. Тогда у покупателя останется заказ, и деньги за него возвращаться не будут.
|
||
|
||
**Как узнать об отмененных заказах:**
|
||
|
||
- Отправьте запрос [GET campaigns/{campaignId}/orders](../../reference/orders/getOrders.md). В его :no-translate[URL] добавьте входной параметр `onlyWaitingForCancellationApprove=true`.
|
||
- В кабинете или через почту — на нее придет уведомление об отмене.
|
||
- Подключите API-уведомления. Маркет отправит вам запрос [POST notification](../../push-notifications/reference/sendNotification.md), когда появится новая заявка на отмену заказа. [{#T}](../../push-notifications/index.md)
|
||
|
||
Если в течение 48 часов вы не подтвердите или отклоните отмену, заказ будет отменен автоматически.
|
||
|
||
|**:no-translate[⚙️] Лимит:** 500 запросов в час|
|
||
|-|
|
||
|
||
@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||
@param campaignId Идентификатор кампании. Его можно узнать с помощью запроса [:no-translate[GET campaigns]](:no-translate[../../reference/campaigns/getCampaigns.md]) или найти в кабинете продавца на Маркете — нажмите на название своего бизнеса и перейдите на страницу: * **Модули и :no-translate[API]** → блок **Передача данных Маркету**. * **Лог запросов** → выпадающий список в блоке **Показывать логи**. ⚠️ Не передавайте вместо него идентификатор магазина, который указан в кабинете продавца на Маркете рядом с названием магазина и в некоторых отчетах.
|
||
@param orderId Идентификатор заказа.
|
||
@return OrdersAPIAcceptOrderCancellationRequest
|
||
*/
|
||
func (a *OrdersAPIService) AcceptOrderCancellation(ctx context.Context, campaignId int64, orderId int64) OrdersAPIAcceptOrderCancellationRequest {
|
||
return OrdersAPIAcceptOrderCancellationRequest{
|
||
ApiService: a,
|
||
ctx: ctx,
|
||
campaignId: campaignId,
|
||
orderId: orderId,
|
||
}
|
||
}
|
||
|
||
// Execute executes the request
|
||
//
|
||
// @return EmptyApiResponse
|
||
func (a *OrdersAPIService) AcceptOrderCancellationExecute(r OrdersAPIAcceptOrderCancellationRequest) (*EmptyApiResponse, *http.Response, error) {
|
||
var (
|
||
localVarHTTPMethod = http.MethodPut
|
||
localVarPostBody interface{}
|
||
formFiles []formFile
|
||
localVarReturnValue *EmptyApiResponse
|
||
)
|
||
|
||
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "OrdersAPIService.AcceptOrderCancellation")
|
||
if err != nil {
|
||
return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
|
||
}
|
||
|
||
localVarPath := localBasePath + "/campaigns/{campaignId}/orders/{orderId}/cancellation/accept"
|
||
localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
|
||
localVarPath = strings.Replace(localVarPath, "{"+"orderId"+"}", url.PathEscape(parameterValueToString(r.orderId, "orderId")), -1)
|
||
|
||
localVarHeaderParams := make(map[string]string)
|
||
localVarQueryParams := url.Values{}
|
||
localVarFormParams := url.Values{}
|
||
if r.campaignId < 1 {
|
||
return localVarReturnValue, nil, reportError("campaignId must be greater than 1")
|
||
}
|
||
if r.acceptOrderCancellationRequest == nil {
|
||
return localVarReturnValue, nil, reportError("acceptOrderCancellationRequest is required and must be specified")
|
||
}
|
||
|
||
// to determine the Content-Type header
|
||
localVarHTTPContentTypes := []string{"application/json"}
|
||
|
||
// set Content-Type header
|
||
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
|
||
if localVarHTTPContentType != "" {
|
||
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
|
||
}
|
||
|
||
// to determine the Accept header
|
||
localVarHTTPHeaderAccepts := []string{"application/json"}
|
||
|
||
// set Accept header
|
||
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
|
||
if localVarHTTPHeaderAccept != "" {
|
||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||
}
|
||
// body params
|
||
localVarPostBody = r.acceptOrderCancellationRequest
|
||
if r.ctx != nil {
|
||
// API Key Authentication
|
||
if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
|
||
if apiKey, ok := auth["ApiKey"]; ok {
|
||
var key string
|
||
if apiKey.Prefix != "" {
|
||
key = apiKey.Prefix + " " + apiKey.Key
|
||
} else {
|
||
key = apiKey.Key
|
||
}
|
||
localVarHeaderParams["Api-Key"] = key
|
||
}
|
||
}
|
||
}
|
||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||
if err != nil {
|
||
return localVarReturnValue, nil, err
|
||
}
|
||
|
||
localVarHTTPResponse, err := a.client.callAPI(req)
|
||
if err != nil || localVarHTTPResponse == nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
|
||
localVarHTTPResponse.Body.Close()
|
||
localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
|
||
if err != nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
if localVarHTTPResponse.StatusCode >= 300 {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: localVarHTTPResponse.Status,
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 400 {
|
||
var v ApiClientDataErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 401 {
|
||
var v ApiUnauthorizedErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 403 {
|
||
var v ApiForbiddenErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 404 {
|
||
var v ApiNotFoundErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 420 {
|
||
var v ApiLimitErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 500 {
|
||
var v ApiServerErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: err.Error(),
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
return localVarReturnValue, localVarHTTPResponse, nil
|
||
}
|
||
|
||
type OrdersAPIGetOrderRequest struct {
|
||
ctx context.Context
|
||
ApiService *OrdersAPIService
|
||
campaignId int64
|
||
orderId int64
|
||
}
|
||
|
||
func (r OrdersAPIGetOrderRequest) Execute() (*GetOrderResponse, *http.Response, error) {
|
||
return r.ApiService.GetOrderExecute(r)
|
||
}
|
||
|
||
/*
|
||
GetOrder Информация об одном заказе
|
||
|
||
{% include notitle [:no-translate[access]](../../_auto/method_scopes/getOrder.md) %}
|
||
|
||
Возвращает информацию о заказе.
|
||
|
||
{% note tip "Вы также можете настроить API-уведомления" %}
|
||
|
||
Маркет отправит вам [запрос](../../push-notifications/reference/sendNotification.md), когда появится новый заказ или изменится его статус. А полную информацию можно получить с помощью этого метода или [GET campaigns/{campaignId}/orders](../../reference/orders/getOrders.md).
|
||
|
||
[{#T}](../../push-notifications/index.md)
|
||
|
||
{% endnote %}
|
||
|
||
Получить более подробную информацию о покупателе и его номере телефона можно с помощью запроса [GET campaigns/{campaignId}/orders/{orderId}/buyer](../../reference/orders/getOrderBuyerInfo.md).
|
||
|
||
|**:no-translate[⚙️] Лимит:** 100 000 запросов в час|
|
||
|-|
|
||
|
||
@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||
@param campaignId Идентификатор кампании. Его можно узнать с помощью запроса [:no-translate[GET campaigns]](:no-translate[../../reference/campaigns/getCampaigns.md]) или найти в кабинете продавца на Маркете — нажмите на название своего бизнеса и перейдите на страницу: * **Модули и :no-translate[API]** → блок **Передача данных Маркету**. * **Лог запросов** → выпадающий список в блоке **Показывать логи**. ⚠️ Не передавайте вместо него идентификатор магазина, который указан в кабинете продавца на Маркете рядом с названием магазина и в некоторых отчетах.
|
||
@param orderId Идентификатор заказа.
|
||
@return OrdersAPIGetOrderRequest
|
||
*/
|
||
func (a *OrdersAPIService) GetOrder(ctx context.Context, campaignId int64, orderId int64) OrdersAPIGetOrderRequest {
|
||
return OrdersAPIGetOrderRequest{
|
||
ApiService: a,
|
||
ctx: ctx,
|
||
campaignId: campaignId,
|
||
orderId: orderId,
|
||
}
|
||
}
|
||
|
||
// Execute executes the request
|
||
//
|
||
// @return GetOrderResponse
|
||
func (a *OrdersAPIService) GetOrderExecute(r OrdersAPIGetOrderRequest) (*GetOrderResponse, *http.Response, error) {
|
||
var (
|
||
localVarHTTPMethod = http.MethodGet
|
||
localVarPostBody interface{}
|
||
formFiles []formFile
|
||
localVarReturnValue *GetOrderResponse
|
||
)
|
||
|
||
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "OrdersAPIService.GetOrder")
|
||
if err != nil {
|
||
return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
|
||
}
|
||
|
||
localVarPath := localBasePath + "/campaigns/{campaignId}/orders/{orderId}"
|
||
localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
|
||
localVarPath = strings.Replace(localVarPath, "{"+"orderId"+"}", url.PathEscape(parameterValueToString(r.orderId, "orderId")), -1)
|
||
|
||
localVarHeaderParams := make(map[string]string)
|
||
localVarQueryParams := url.Values{}
|
||
localVarFormParams := url.Values{}
|
||
if r.campaignId < 1 {
|
||
return localVarReturnValue, nil, reportError("campaignId must be greater than 1")
|
||
}
|
||
|
||
// to determine the Content-Type header
|
||
localVarHTTPContentTypes := []string{}
|
||
|
||
// set Content-Type header
|
||
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
|
||
if localVarHTTPContentType != "" {
|
||
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
|
||
}
|
||
|
||
// to determine the Accept header
|
||
localVarHTTPHeaderAccepts := []string{"application/json"}
|
||
|
||
// set Accept header
|
||
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
|
||
if localVarHTTPHeaderAccept != "" {
|
||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||
}
|
||
if r.ctx != nil {
|
||
// API Key Authentication
|
||
if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
|
||
if apiKey, ok := auth["ApiKey"]; ok {
|
||
var key string
|
||
if apiKey.Prefix != "" {
|
||
key = apiKey.Prefix + " " + apiKey.Key
|
||
} else {
|
||
key = apiKey.Key
|
||
}
|
||
localVarHeaderParams["Api-Key"] = key
|
||
}
|
||
}
|
||
}
|
||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||
if err != nil {
|
||
return localVarReturnValue, nil, err
|
||
}
|
||
|
||
localVarHTTPResponse, err := a.client.callAPI(req)
|
||
if err != nil || localVarHTTPResponse == nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
|
||
localVarHTTPResponse.Body.Close()
|
||
localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
|
||
if err != nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
if localVarHTTPResponse.StatusCode >= 300 {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: localVarHTTPResponse.Status,
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 400 {
|
||
var v ApiClientDataErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 401 {
|
||
var v ApiUnauthorizedErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 403 {
|
||
var v ApiForbiddenErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 404 {
|
||
var v ApiNotFoundErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 420 {
|
||
var v ApiLimitErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 500 {
|
||
var v ApiServerErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: err.Error(),
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
return localVarReturnValue, localVarHTTPResponse, nil
|
||
}
|
||
|
||
type OrdersAPIGetOrderIdentifiersStatusRequest struct {
|
||
ctx context.Context
|
||
ApiService *OrdersAPIService
|
||
campaignId int64
|
||
orderId int64
|
||
}
|
||
|
||
func (r OrdersAPIGetOrderIdentifiersStatusRequest) Execute() (*GetOrderIdentifiersStatusResponse, *http.Response, error) {
|
||
return r.ApiService.GetOrderIdentifiersStatusExecute(r)
|
||
}
|
||
|
||
/*
|
||
GetOrderIdentifiersStatus Статусы проверки УИНов
|
||
|
||
{% include notitle [:no-translate[access]](../../_auto/method_scopes/getOrderIdentifiersStatus.md) %}
|
||
|
||
Возвращает статусы проверки [УИНов](:no-translate[*uin]) в заказе.
|
||
|
||
Заказ, в котором есть ювелирные изделия, перейдет в статус `READY_TO_SHIP`, только когда:
|
||
|
||
1. Вы передадите Маркету УИНы по каждому ювелирному изделию в заказе — метод [PUT campaigns/{campaignId}/orders/{orderId}/boxes](../../reference/orders/setOrderBoxLayout.md).
|
||
2. Все УИНы успешно пройдут проверку.
|
||
|
||
|**:no-translate[⚙️] Лимит:** 100 000 запросов в час|
|
||
|-|
|
||
|
||
@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||
@param campaignId Идентификатор кампании. Его можно узнать с помощью запроса [:no-translate[GET campaigns]](:no-translate[../../reference/campaigns/getCampaigns.md]) или найти в кабинете продавца на Маркете — нажмите на название своего бизнеса и перейдите на страницу: * **Модули и :no-translate[API]** → блок **Передача данных Маркету**. * **Лог запросов** → выпадающий список в блоке **Показывать логи**. ⚠️ Не передавайте вместо него идентификатор магазина, который указан в кабинете продавца на Маркете рядом с названием магазина и в некоторых отчетах.
|
||
@param orderId Идентификатор заказа.
|
||
@return OrdersAPIGetOrderIdentifiersStatusRequest
|
||
*/
|
||
func (a *OrdersAPIService) GetOrderIdentifiersStatus(ctx context.Context, campaignId int64, orderId int64) OrdersAPIGetOrderIdentifiersStatusRequest {
|
||
return OrdersAPIGetOrderIdentifiersStatusRequest{
|
||
ApiService: a,
|
||
ctx: ctx,
|
||
campaignId: campaignId,
|
||
orderId: orderId,
|
||
}
|
||
}
|
||
|
||
// Execute executes the request
|
||
//
|
||
// @return GetOrderIdentifiersStatusResponse
|
||
func (a *OrdersAPIService) GetOrderIdentifiersStatusExecute(r OrdersAPIGetOrderIdentifiersStatusRequest) (*GetOrderIdentifiersStatusResponse, *http.Response, error) {
|
||
var (
|
||
localVarHTTPMethod = http.MethodPost
|
||
localVarPostBody interface{}
|
||
formFiles []formFile
|
||
localVarReturnValue *GetOrderIdentifiersStatusResponse
|
||
)
|
||
|
||
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "OrdersAPIService.GetOrderIdentifiersStatus")
|
||
if err != nil {
|
||
return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
|
||
}
|
||
|
||
localVarPath := localBasePath + "/campaigns/{campaignId}/orders/{orderId}/identifiers/status"
|
||
localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
|
||
localVarPath = strings.Replace(localVarPath, "{"+"orderId"+"}", url.PathEscape(parameterValueToString(r.orderId, "orderId")), -1)
|
||
|
||
localVarHeaderParams := make(map[string]string)
|
||
localVarQueryParams := url.Values{}
|
||
localVarFormParams := url.Values{}
|
||
if r.campaignId < 1 {
|
||
return localVarReturnValue, nil, reportError("campaignId must be greater than 1")
|
||
}
|
||
|
||
// to determine the Content-Type header
|
||
localVarHTTPContentTypes := []string{}
|
||
|
||
// set Content-Type header
|
||
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
|
||
if localVarHTTPContentType != "" {
|
||
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
|
||
}
|
||
|
||
// to determine the Accept header
|
||
localVarHTTPHeaderAccepts := []string{"application/json"}
|
||
|
||
// set Accept header
|
||
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
|
||
if localVarHTTPHeaderAccept != "" {
|
||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||
}
|
||
if r.ctx != nil {
|
||
// API Key Authentication
|
||
if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
|
||
if apiKey, ok := auth["ApiKey"]; ok {
|
||
var key string
|
||
if apiKey.Prefix != "" {
|
||
key = apiKey.Prefix + " " + apiKey.Key
|
||
} else {
|
||
key = apiKey.Key
|
||
}
|
||
localVarHeaderParams["Api-Key"] = key
|
||
}
|
||
}
|
||
}
|
||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||
if err != nil {
|
||
return localVarReturnValue, nil, err
|
||
}
|
||
|
||
localVarHTTPResponse, err := a.client.callAPI(req)
|
||
if err != nil || localVarHTTPResponse == nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
|
||
localVarHTTPResponse.Body.Close()
|
||
localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
|
||
if err != nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
if localVarHTTPResponse.StatusCode >= 300 {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: localVarHTTPResponse.Status,
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 400 {
|
||
var v ApiClientDataErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 401 {
|
||
var v ApiUnauthorizedErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 403 {
|
||
var v ApiForbiddenErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 404 {
|
||
var v ApiNotFoundErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 420 {
|
||
var v ApiLimitErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 500 {
|
||
var v ApiServerErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: err.Error(),
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
return localVarReturnValue, localVarHTTPResponse, nil
|
||
}
|
||
|
||
type OrdersAPIGetOrdersRequest struct {
|
||
ctx context.Context
|
||
ApiService *OrdersAPIService
|
||
campaignId int64
|
||
orderIds *[]int64
|
||
status *[]OrderStatusType
|
||
substatus *[]OrderSubstatusType
|
||
fromDate *string
|
||
toDate *string
|
||
supplierShipmentDateFrom *string
|
||
supplierShipmentDateTo *string
|
||
updatedAtFrom *time.Time
|
||
updatedAtTo *time.Time
|
||
dispatchType *OrderDeliveryDispatchType
|
||
fake *bool
|
||
hasCis *bool
|
||
onlyWaitingForCancellationApprove *bool
|
||
onlyEstimatedDelivery *bool
|
||
buyerType *OrderBuyerType
|
||
page *int32
|
||
pageSize *int32
|
||
pageToken *string
|
||
limit *int32
|
||
}
|
||
|
||
// Фильтрация заказов по идентификаторам. <br><br> ⚠️ Не используйте это поле одновременно с другими фильтрами. Если вы хотите воспользоваться ими, оставьте поле пустым.
|
||
func (r OrdersAPIGetOrdersRequest) OrderIds(orderIds []int64) OrdersAPIGetOrdersRequest {
|
||
r.orderIds = &orderIds
|
||
return r
|
||
}
|
||
|
||
// Статус заказа: * `CANCELLED` — заказ отменен. * `DELIVERED` — заказ получен покупателем. * `DELIVERY` — заказ передан в службу доставки. * `PICKUP` — заказ доставлен в пункт самовывоза. * `PROCESSING` — заказ находится в обработке. * `UNPAID` — заказ оформлен, но еще не оплачен (если выбрана оплата при оформлении).
|
||
func (r OrdersAPIGetOrdersRequest) Status(status []OrderStatusType) OrdersAPIGetOrdersRequest {
|
||
r.status = &status
|
||
return r
|
||
}
|
||
|
||
// Этап обработки заказа (если он имеет статус `PROCESSING`) или причина отмены заказа (если он имеет статус `CANCELLED`). Возможные значения для заказа в статусе `PROCESSING`: * `STARTED` — заказ подтвержден, его можно начать обрабатывать. * `READY_TO_SHIP` — заказ собран и готов к отправке. * `SHIPPED` — заказ передан службе доставки. Возможные значения для заказа в статусе `CANCELLED`: * `RESERVATION_EXPIRED` — покупатель не завершил оформление зарезервированного заказа в течение 10 минут. * `USER_NOT_PAID` — покупатель не оплатил заказ (для типа оплаты `PREPAID`) в течение 30 минут. * `USER_UNREACHABLE` — не удалось связаться с покупателем. Для отмены с этой причиной необходимо выполнить условия: * не менее 3 звонков с 8 до 21 в часовом поясе покупателя; * перерыв между первым и третьим звонком не менее 90 минут; * соединение не короче 5 секунд. Если хотя бы одно из этих условий не выполнено (кроме случая, когда номер недоступен), отменить заказ не получится. Вернется ответ с кодом ошибки 400 * `USER_CHANGED_MIND` — покупатель отменил заказ по личным причинам. * `USER_REFUSED_DELIVERY` — покупателя не устроили условия доставки. * `USER_REFUSED_PRODUCT` — покупателю не подошел товар. * `SHOP_FAILED` — магазин не может выполнить заказ. * `USER_REFUSED_QUALITY` — покупателя не устроило качество товара. * `REPLACING_ORDER` — покупатель решил заменить товар другим по собственной инициативе. * `PROCESSING_EXPIRED` — значение более не используется. * `PICKUP_EXPIRED` — закончился срок хранения заказа в ПВЗ. * `DELIVERY_SERVICE_UNDELIVERED` — служба доставки не смогла доставить заказ. * `CANCELLED_COURIER_NOT_FOUND` — не удалось найти курьера. * `USER_WANTS_TO_CHANGE_DELIVERY_DATE` — покупатель хочет получить заказ в другой день. * `RESERVATION_FAILED` — Маркет не может продолжить дальнейшую обработку заказа.
|
||
func (r OrdersAPIGetOrdersRequest) Substatus(substatus []OrderSubstatusType) OrdersAPIGetOrdersRequest {
|
||
r.substatus = &substatus
|
||
return r
|
||
}
|
||
|
||
// Начальная дата для фильтрации заказов по дате оформления. Формат даты: `ДД-ММ-ГГГГ`. Между начальной и конечной датой (параметр `toDate`) должно быть не больше 30 дней. Значение по умолчанию: 30 дней назад от текущей даты.
|
||
func (r OrdersAPIGetOrdersRequest) FromDate(fromDate string) OrdersAPIGetOrdersRequest {
|
||
r.fromDate = &fromDate
|
||
return r
|
||
}
|
||
|
||
// Конечная дата для фильтрации заказов по дате оформления. Показываются заказы, созданные до 00:00 указанного дня. Формат даты: `ДД-ММ-ГГГГ`. Между начальной (параметр `fromDate`) и конечной датой должно быть не больше 30 дней. Значение по умолчанию: текущая дата. Если промежуток времени между `toDate` и `fromDate` меньше суток, то `toDate` равен `fromDate` + сутки.
|
||
func (r OrdersAPIGetOrdersRequest) ToDate(toDate string) OrdersAPIGetOrdersRequest {
|
||
r.toDate = &toDate
|
||
return r
|
||
}
|
||
|
||
// Начальная дата для фильтрации заказов по дате отгрузки в службу доставки (параметр `shipmentDate`). Формат даты: `ДД-ММ-ГГГГ`. Между начальной и конечной датой (параметр `supplierShipmentDateTo`) должно быть не больше 30 дней. Начальная дата включается в интервал для фильтрации.
|
||
func (r OrdersAPIGetOrdersRequest) SupplierShipmentDateFrom(supplierShipmentDateFrom string) OrdersAPIGetOrdersRequest {
|
||
r.supplierShipmentDateFrom = &supplierShipmentDateFrom
|
||
return r
|
||
}
|
||
|
||
// Конечная дата для фильтрации заказов по дате отгрузки в службу доставки (параметр `shipmentDate`). Формат даты: `ДД-ММ-ГГГГ`. Между начальной (параметр `supplierShipmentDateFrom`) и конечной датой должно быть не больше 30 дней. Конечная дата не включается в интервал для фильтрации. Если промежуток времени между `supplierShipmentDateTo` и `supplierShipmentDateFrom` меньше суток, то `supplierShipmentDateTo` равен `supplierShipmentDateFrom` + сутки.
|
||
func (r OrdersAPIGetOrdersRequest) SupplierShipmentDateTo(supplierShipmentDateTo string) OrdersAPIGetOrdersRequest {
|
||
r.supplierShipmentDateTo = &supplierShipmentDateTo
|
||
return r
|
||
}
|
||
|
||
// Начальная дата для фильтрации заказов по дате и времени обновления (параметр `updatedAt`). Формат даты: :no-translate[ISO 8601] со смещением относительно :no-translate[UTC]. Например, `2017-11-21T00:42:42+03:00`. Между начальной и конечной датой (параметр `updatedAtTo`) должно быть не больше 30 дней. Начальная дата включается в интервал для фильтрации.
|
||
func (r OrdersAPIGetOrdersRequest) UpdatedAtFrom(updatedAtFrom time.Time) OrdersAPIGetOrdersRequest {
|
||
r.updatedAtFrom = &updatedAtFrom
|
||
return r
|
||
}
|
||
|
||
// Конечная дата для фильтрации заказов по дате и времени обновления (параметр `updatedAt`). Формат даты: :no-translate[ISO 8601] со смещением относительно :no-translate[UTC]. Например, `2017-11-21T00:42:42+03:00`. Между начальной (параметр `updatedAtFrom`) и конечной датой должно быть не больше 30 дней. Конечная дата не включается в интервал для фильтрации.
|
||
func (r OrdersAPIGetOrdersRequest) UpdatedAtTo(updatedAtTo time.Time) OrdersAPIGetOrdersRequest {
|
||
r.updatedAtTo = &updatedAtTo
|
||
return r
|
||
}
|
||
|
||
// Способ отгрузки
|
||
func (r OrdersAPIGetOrdersRequest) DispatchType(dispatchType OrderDeliveryDispatchType) OrdersAPIGetOrdersRequest {
|
||
r.dispatchType = &dispatchType
|
||
return r
|
||
}
|
||
|
||
// Фильтрация заказов по типам: * `false` — настоящий заказ покупателя. * `true` — [тестовый](../../concepts/sandbox.md) заказ Маркета.
|
||
func (r OrdersAPIGetOrdersRequest) Fake(fake bool) OrdersAPIGetOrdersRequest {
|
||
r.fake = &fake
|
||
return r
|
||
}
|
||
|
||
// Нужно ли вернуть только те заказы, в составе которых есть хотя бы один товар с кодом идентификации в системе [:no-translate[«Честный ЗНАК»]](https://честныйзнак.рф/) или [:no-translate[«ASL BELGISI»]](https://aslbelgisi.uz) (для продавцов :no-translate[Market Yandex Go]): * `true` — да. * `false` — нет. Такие коды присваиваются товарам, которые подлежат маркировке и относятся к определенным категориям.
|
||
func (r OrdersAPIGetOrdersRequest) HasCis(hasCis bool) OrdersAPIGetOrdersRequest {
|
||
r.hasCis = &hasCis
|
||
return r
|
||
}
|
||
|
||
// **Только для модели DBS** Фильтрация заказов по наличию запросов покупателей на отмену. При значении `true` возвращаются только заказы, которые находятся в статусе `DELIVERY` или `PICKUP` и которые пользователи решили отменить. Чтобы подтвердить или отклонить отмену, отправьте запрос [PUT campaigns/{campaignId}/orders/{orderId}/cancellation/accept](../../reference/orders/acceptOrderCancellation).
|
||
func (r OrdersAPIGetOrdersRequest) OnlyWaitingForCancellationApprove(onlyWaitingForCancellationApprove bool) OrdersAPIGetOrdersRequest {
|
||
r.onlyWaitingForCancellationApprove = &onlyWaitingForCancellationApprove
|
||
return r
|
||
}
|
||
|
||
// Фильтрация заказов с долгой доставкой (31-60 дней) по подтвержденной дате доставки: * `true` — возвращаются только заказы с неподтвержденной датой доставки. * `false` — фильтрация не применяется.
|
||
func (r OrdersAPIGetOrdersRequest) OnlyEstimatedDelivery(onlyEstimatedDelivery bool) OrdersAPIGetOrdersRequest {
|
||
r.onlyEstimatedDelivery = &onlyEstimatedDelivery
|
||
return r
|
||
}
|
||
|
||
// Фильтрация заказов по типу покупателя.
|
||
func (r OrdersAPIGetOrdersRequest) BuyerType(buyerType OrderBuyerType) OrdersAPIGetOrdersRequest {
|
||
r.buyerType = &buyerType
|
||
return r
|
||
}
|
||
|
||
// {% note warning \"Если в методе есть :no-translate[`page_token`]\" %} Используйте его вместо параметра :no-translate[`page`]. [Подробнее о типах пагинации и их использовании](:no-translate[../../concepts/pagination.md]) {% endnote %} Номер страницы результатов. Используется вместе с параметром :no-translate[`pageSize`]. :no-translate[`page`] игнорируется, если задан :no-translate[`page_token`] или :no-translate[`limit`].
|
||
func (r OrdersAPIGetOrdersRequest) Page(page int32) OrdersAPIGetOrdersRequest {
|
||
r.page = &page
|
||
return r
|
||
}
|
||
|
||
// Размер страницы. Используется вместе с параметром :no-translate[`page`]. :no-translate[`pageSize`] игнорируется, если задан :no-translate[`page_token`] или :no-translate[`limit`].
|
||
func (r OrdersAPIGetOrdersRequest) PageSize(pageSize int32) OrdersAPIGetOrdersRequest {
|
||
r.pageSize = &pageSize
|
||
return r
|
||
}
|
||
|
||
// Идентификатор страницы c результатами. Если параметр не указан, возвращается первая страница. Рекомендуем передавать значение выходного параметра :no-translate[`nextPageToken`], полученное при последнем запросе. Если задан :no-translate[`page_token`] и в запросе есть параметры :no-translate[`page`] и :no-translate[`pageSize`], они игнорируются.
|
||
func (r OrdersAPIGetOrdersRequest) PageToken(pageToken string) OrdersAPIGetOrdersRequest {
|
||
r.pageToken = &pageToken
|
||
return r
|
||
}
|
||
|
||
// Количество значений на одной странице.
|
||
func (r OrdersAPIGetOrdersRequest) Limit(limit int32) OrdersAPIGetOrdersRequest {
|
||
r.limit = &limit
|
||
return r
|
||
}
|
||
|
||
func (r OrdersAPIGetOrdersRequest) Execute() (*GetOrdersResponse, *http.Response, error) {
|
||
return r.ApiService.GetOrdersExecute(r)
|
||
}
|
||
|
||
/*
|
||
GetOrders Информация о нескольких заказах
|
||
|
||
{% include notitle [:no-translate[access]](../../_auto/method_scopes/getOrders.md) %}
|
||
|
||
Возвращает информацию о заказах. Запрос можно использовать, чтобы узнать, нет ли новых заказов.
|
||
|
||
По умолчанию данные о тестовых заказах не приходят. Чтобы их получить, передайте значение `true` в параметре `fake`.
|
||
|
||
{% note tip "Вы также можете настроить API-уведомления" %}
|
||
|
||
Маркет отправит вам [запрос](../../push-notifications/reference/sendNotification.md), когда появится новый заказ или изменится его статус. А полную информацию можно получить с помощью этого метода или [GET campaigns/{campaignId}/orders/{orderId}](../../reference/orders/getOrder.md).
|
||
|
||
[{#T}](../../push-notifications/index.md)
|
||
|
||
{% endnote %}
|
||
|
||
Доступна фильтрация по нескольким характеристикам заказов:
|
||
|
||
* дате оформления;
|
||
|
||
* статусу;
|
||
|
||
* идентификаторам заказов;
|
||
|
||
* этапу обработки или причине отмены;
|
||
|
||
* типу (настоящий или тестовый);
|
||
|
||
* дате отгрузки в службу доставки;
|
||
|
||
* дате и времени обновления заказа.
|
||
|
||
Информация о заказах, доставленных или отмененных больше 30 дней назад, не возвращается. Ее можно получить с помощью запроса информации об отдельном заказе [GET campaigns/{campaignId}/orders/{orderId}](../../reference/orders/getOrder.md) (если у вас есть идентификатор заказа) или запроса отчета по заказам [POST campaigns/{campaignId}/stats/orders](../../reference/stats/getOrdersStats.md).
|
||
|
||
Максимальный диапазон дат за один запрос к ресурсу — 30 дней.
|
||
|
||
Результаты возвращаются постранично. Для навигации по страницам используйте параметры `page_token` и `limit`.
|
||
|
||
Получить более подробную информацию о покупателе и его номере телефона можно с помощью запроса [GET campaigns/{campaignId}/orders/{orderId}/buyer](../../reference/orders/getOrderBuyerInfo.md).
|
||
|
||
{% note warning "Ограничение для параметра `limit`" %}
|
||
|
||
Не передавайте значение больше 50.
|
||
|
||
{% endnote %}
|
||
|
||
|**:no-translate[⚙️] Лимит:** 100 000 запросов в час|
|
||
|-|
|
||
|
||
@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||
@param campaignId Идентификатор кампании. Его можно узнать с помощью запроса [:no-translate[GET campaigns]](:no-translate[../../reference/campaigns/getCampaigns.md]) или найти в кабинете продавца на Маркете — нажмите на название своего бизнеса и перейдите на страницу: * **Модули и :no-translate[API]** → блок **Передача данных Маркету**. * **Лог запросов** → выпадающий список в блоке **Показывать логи**. ⚠️ Не передавайте вместо него идентификатор магазина, который указан в кабинете продавца на Маркете рядом с названием магазина и в некоторых отчетах.
|
||
@return OrdersAPIGetOrdersRequest
|
||
*/
|
||
func (a *OrdersAPIService) GetOrders(ctx context.Context, campaignId int64) OrdersAPIGetOrdersRequest {
|
||
return OrdersAPIGetOrdersRequest{
|
||
ApiService: a,
|
||
ctx: ctx,
|
||
campaignId: campaignId,
|
||
}
|
||
}
|
||
|
||
// Execute executes the request
|
||
//
|
||
// @return GetOrdersResponse
|
||
func (a *OrdersAPIService) GetOrdersExecute(r OrdersAPIGetOrdersRequest) (*GetOrdersResponse, *http.Response, error) {
|
||
var (
|
||
localVarHTTPMethod = http.MethodGet
|
||
localVarPostBody interface{}
|
||
formFiles []formFile
|
||
localVarReturnValue *GetOrdersResponse
|
||
)
|
||
|
||
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "OrdersAPIService.GetOrders")
|
||
if err != nil {
|
||
return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
|
||
}
|
||
|
||
localVarPath := localBasePath + "/campaigns/{campaignId}/orders"
|
||
localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
|
||
|
||
localVarHeaderParams := make(map[string]string)
|
||
localVarQueryParams := url.Values{}
|
||
localVarFormParams := url.Values{}
|
||
if r.campaignId < 1 {
|
||
return localVarReturnValue, nil, reportError("campaignId must be greater than 1")
|
||
}
|
||
|
||
if r.orderIds != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "orderIds", r.orderIds, "", "csv")
|
||
}
|
||
if r.status != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "status", r.status, "", "csv")
|
||
}
|
||
if r.substatus != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "substatus", r.substatus, "", "csv")
|
||
}
|
||
if r.fromDate != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "fromDate", r.fromDate, "", "")
|
||
}
|
||
if r.toDate != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "toDate", r.toDate, "", "")
|
||
}
|
||
if r.supplierShipmentDateFrom != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "supplierShipmentDateFrom", r.supplierShipmentDateFrom, "", "")
|
||
}
|
||
if r.supplierShipmentDateTo != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "supplierShipmentDateTo", r.supplierShipmentDateTo, "", "")
|
||
}
|
||
if r.updatedAtFrom != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "updatedAtFrom", r.updatedAtFrom, "", "")
|
||
}
|
||
if r.updatedAtTo != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "updatedAtTo", r.updatedAtTo, "", "")
|
||
}
|
||
if r.dispatchType != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "dispatchType", r.dispatchType, "", "")
|
||
}
|
||
if r.fake != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "fake", r.fake, "", "")
|
||
} else {
|
||
var defaultValue bool = false
|
||
r.fake = &defaultValue
|
||
}
|
||
if r.hasCis != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "hasCis", r.hasCis, "", "")
|
||
} else {
|
||
var defaultValue bool = false
|
||
r.hasCis = &defaultValue
|
||
}
|
||
if r.onlyWaitingForCancellationApprove != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "onlyWaitingForCancellationApprove", r.onlyWaitingForCancellationApprove, "", "")
|
||
} else {
|
||
var defaultValue bool = false
|
||
r.onlyWaitingForCancellationApprove = &defaultValue
|
||
}
|
||
if r.onlyEstimatedDelivery != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "onlyEstimatedDelivery", r.onlyEstimatedDelivery, "", "")
|
||
} else {
|
||
var defaultValue bool = false
|
||
r.onlyEstimatedDelivery = &defaultValue
|
||
}
|
||
if r.buyerType != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "buyerType", r.buyerType, "", "")
|
||
}
|
||
if r.page != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "", "")
|
||
} else {
|
||
var defaultValue int32 = 1
|
||
r.page = &defaultValue
|
||
}
|
||
if r.pageSize != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "pageSize", r.pageSize, "", "")
|
||
}
|
||
if r.pageToken != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "page_token", r.pageToken, "", "")
|
||
}
|
||
if r.limit != nil {
|
||
parameterAddToHeaderOrQuery(localVarQueryParams, "limit", r.limit, "", "")
|
||
}
|
||
// to determine the Content-Type header
|
||
localVarHTTPContentTypes := []string{}
|
||
|
||
// set Content-Type header
|
||
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
|
||
if localVarHTTPContentType != "" {
|
||
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
|
||
}
|
||
|
||
// to determine the Accept header
|
||
localVarHTTPHeaderAccepts := []string{"application/json"}
|
||
|
||
// set Accept header
|
||
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
|
||
if localVarHTTPHeaderAccept != "" {
|
||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||
}
|
||
if r.ctx != nil {
|
||
// API Key Authentication
|
||
if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
|
||
if apiKey, ok := auth["ApiKey"]; ok {
|
||
var key string
|
||
if apiKey.Prefix != "" {
|
||
key = apiKey.Prefix + " " + apiKey.Key
|
||
} else {
|
||
key = apiKey.Key
|
||
}
|
||
localVarHeaderParams["Api-Key"] = key
|
||
}
|
||
}
|
||
}
|
||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||
if err != nil {
|
||
return localVarReturnValue, nil, err
|
||
}
|
||
|
||
localVarHTTPResponse, err := a.client.callAPI(req)
|
||
if err != nil || localVarHTTPResponse == nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
|
||
localVarHTTPResponse.Body.Close()
|
||
localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
|
||
if err != nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
if localVarHTTPResponse.StatusCode >= 300 {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: localVarHTTPResponse.Status,
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 400 {
|
||
var v ApiClientDataErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 401 {
|
||
var v ApiUnauthorizedErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 403 {
|
||
var v ApiForbiddenErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 404 {
|
||
var v ApiNotFoundErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 420 {
|
||
var v ApiLimitErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 500 {
|
||
var v ApiServerErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: err.Error(),
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
return localVarReturnValue, localVarHTTPResponse, nil
|
||
}
|
||
|
||
type OrdersAPIProvideOrderDigitalCodesRequest struct {
|
||
ctx context.Context
|
||
ApiService *OrdersAPIService
|
||
campaignId int64
|
||
orderId int64
|
||
provideOrderDigitalCodesRequest *ProvideOrderDigitalCodesRequest
|
||
}
|
||
|
||
func (r OrdersAPIProvideOrderDigitalCodesRequest) ProvideOrderDigitalCodesRequest(provideOrderDigitalCodesRequest ProvideOrderDigitalCodesRequest) OrdersAPIProvideOrderDigitalCodesRequest {
|
||
r.provideOrderDigitalCodesRequest = &provideOrderDigitalCodesRequest
|
||
return r
|
||
}
|
||
|
||
func (r OrdersAPIProvideOrderDigitalCodesRequest) Execute() (*EmptyApiResponse, *http.Response, error) {
|
||
return r.ApiService.ProvideOrderDigitalCodesExecute(r)
|
||
}
|
||
|
||
/*
|
||
ProvideOrderDigitalCodes Передача ключей цифровых товаров
|
||
|
||
{% include notitle [:no-translate[access]](../../_auto/method_scopes/provideOrderDigitalCodes.md) %}
|
||
|
||
Передает ключи цифровых товаров, которые покупатель заказал и оплатил. После выполнения запроса Маркет отправит ему письмо с ключами и инструкциями по активации. Если письмо будет доставлено, Маркет переведет заказ в финальный статус `DELIVERED`.
|
||
|
||
{% note tip "После передачи кода покупателю статус заказа изменится не сразу" %}
|
||
|
||
Подключите API-уведомления — Маркет отправит вам запрос [POST notification](../../push-notifications/reference/sendNotification.md), когда заказ перейдет в статус `DELIVERED`.
|
||
|
||
[{#T}](../../push-notifications/index.md)
|
||
|
||
{% endnote %}
|
||
|
||
Ключ нужно передать в течение 30 минут после перехода заказа в статус `PROCESSING`.
|
||
|
||
Если в один заказ входят несколько ключей, передавайте их все в одном запросе.
|
||
|
||
Каждый товар с уникальным `id` передавайте в виде отдельного элемента в массиве `items`, а ключи товара — в массиве `codes`.
|
||
|
||
{% cut "Пример" %}
|
||
|
||
```json translate=no
|
||
|
||
{
|
||
"items": [
|
||
{
|
||
"id": 1,
|
||
"codes": [
|
||
"code1", "code2", "code3"
|
||
],
|
||
"slip": "slip",
|
||
"activate_till": "2025-02-18"
|
||
},
|
||
{
|
||
"id": 2,
|
||
"codes": [
|
||
"code4", "code5", "code6"
|
||
],
|
||
"slip": "slip",
|
||
"activate_till": "2025-02-18"
|
||
}
|
||
]
|
||
}
|
||
|
||
```
|
||
{% endcut %}
|
||
|
||
Товары с одинаковыми `id` также можно передавать разными элементами в массиве `items`.
|
||
|
||
{% cut "Пример" %}
|
||
|
||
```json translate=no
|
||
|
||
{
|
||
"items": [
|
||
{
|
||
"id": 1,
|
||
"codes": [
|
||
"code1", "code2"
|
||
],
|
||
"slip": "slip",
|
||
"activate_till": "2025-02-18"
|
||
},
|
||
{
|
||
"id": 1,
|
||
"codes": [
|
||
"code3"
|
||
],
|
||
"slip": "slip",
|
||
"activate_till": "2025-02-18"
|
||
}
|
||
]
|
||
}
|
||
|
||
```
|
||
{% endcut %}
|
||
|
||
|**:no-translate[⚙️] Лимит:** 100 000 запросов в час|
|
||
|-|
|
||
|
||
@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||
@param campaignId Идентификатор кампании. Его можно узнать с помощью запроса [:no-translate[GET campaigns]](:no-translate[../../reference/campaigns/getCampaigns.md]) или найти в кабинете продавца на Маркете — нажмите на название своего бизнеса и перейдите на страницу: * **Модули и :no-translate[API]** → блок **Передача данных Маркету**. * **Лог запросов** → выпадающий список в блоке **Показывать логи**. ⚠️ Не передавайте вместо него идентификатор магазина, который указан в кабинете продавца на Маркете рядом с названием магазина и в некоторых отчетах.
|
||
@param orderId Идентификатор заказа.
|
||
@return OrdersAPIProvideOrderDigitalCodesRequest
|
||
*/
|
||
func (a *OrdersAPIService) ProvideOrderDigitalCodes(ctx context.Context, campaignId int64, orderId int64) OrdersAPIProvideOrderDigitalCodesRequest {
|
||
return OrdersAPIProvideOrderDigitalCodesRequest{
|
||
ApiService: a,
|
||
ctx: ctx,
|
||
campaignId: campaignId,
|
||
orderId: orderId,
|
||
}
|
||
}
|
||
|
||
// Execute executes the request
|
||
//
|
||
// @return EmptyApiResponse
|
||
func (a *OrdersAPIService) ProvideOrderDigitalCodesExecute(r OrdersAPIProvideOrderDigitalCodesRequest) (*EmptyApiResponse, *http.Response, error) {
|
||
var (
|
||
localVarHTTPMethod = http.MethodPost
|
||
localVarPostBody interface{}
|
||
formFiles []formFile
|
||
localVarReturnValue *EmptyApiResponse
|
||
)
|
||
|
||
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "OrdersAPIService.ProvideOrderDigitalCodes")
|
||
if err != nil {
|
||
return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
|
||
}
|
||
|
||
localVarPath := localBasePath + "/campaigns/{campaignId}/orders/{orderId}/deliverDigitalGoods"
|
||
localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
|
||
localVarPath = strings.Replace(localVarPath, "{"+"orderId"+"}", url.PathEscape(parameterValueToString(r.orderId, "orderId")), -1)
|
||
|
||
localVarHeaderParams := make(map[string]string)
|
||
localVarQueryParams := url.Values{}
|
||
localVarFormParams := url.Values{}
|
||
if r.campaignId < 1 {
|
||
return localVarReturnValue, nil, reportError("campaignId must be greater than 1")
|
||
}
|
||
if r.provideOrderDigitalCodesRequest == nil {
|
||
return localVarReturnValue, nil, reportError("provideOrderDigitalCodesRequest is required and must be specified")
|
||
}
|
||
|
||
// to determine the Content-Type header
|
||
localVarHTTPContentTypes := []string{"application/json"}
|
||
|
||
// set Content-Type header
|
||
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
|
||
if localVarHTTPContentType != "" {
|
||
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
|
||
}
|
||
|
||
// to determine the Accept header
|
||
localVarHTTPHeaderAccepts := []string{"application/json"}
|
||
|
||
// set Accept header
|
||
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
|
||
if localVarHTTPHeaderAccept != "" {
|
||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||
}
|
||
// body params
|
||
localVarPostBody = r.provideOrderDigitalCodesRequest
|
||
if r.ctx != nil {
|
||
// API Key Authentication
|
||
if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
|
||
if apiKey, ok := auth["ApiKey"]; ok {
|
||
var key string
|
||
if apiKey.Prefix != "" {
|
||
key = apiKey.Prefix + " " + apiKey.Key
|
||
} else {
|
||
key = apiKey.Key
|
||
}
|
||
localVarHeaderParams["Api-Key"] = key
|
||
}
|
||
}
|
||
}
|
||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||
if err != nil {
|
||
return localVarReturnValue, nil, err
|
||
}
|
||
|
||
localVarHTTPResponse, err := a.client.callAPI(req)
|
||
if err != nil || localVarHTTPResponse == nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
|
||
localVarHTTPResponse.Body.Close()
|
||
localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
|
||
if err != nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
if localVarHTTPResponse.StatusCode >= 300 {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: localVarHTTPResponse.Status,
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 400 {
|
||
var v ApiClientDataErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 401 {
|
||
var v ApiUnauthorizedErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 403 {
|
||
var v ApiForbiddenErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 404 {
|
||
var v ApiNotFoundErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 420 {
|
||
var v ApiLimitErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 500 {
|
||
var v ApiServerErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: err.Error(),
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
return localVarReturnValue, localVarHTTPResponse, nil
|
||
}
|
||
|
||
type OrdersAPIProvideOrderItemIdentifiersRequest struct {
|
||
ctx context.Context
|
||
ApiService *OrdersAPIService
|
||
campaignId int64
|
||
orderId int64
|
||
provideOrderItemIdentifiersRequest *ProvideOrderItemIdentifiersRequest
|
||
}
|
||
|
||
func (r OrdersAPIProvideOrderItemIdentifiersRequest) ProvideOrderItemIdentifiersRequest(provideOrderItemIdentifiersRequest ProvideOrderItemIdentifiersRequest) OrdersAPIProvideOrderItemIdentifiersRequest {
|
||
r.provideOrderItemIdentifiersRequest = &provideOrderItemIdentifiersRequest
|
||
return r
|
||
}
|
||
|
||
func (r OrdersAPIProvideOrderItemIdentifiersRequest) Execute() (*ProvideOrderItemIdentifiersResponse, *http.Response, error) {
|
||
return r.ApiService.ProvideOrderItemIdentifiersExecute(r)
|
||
}
|
||
|
||
/*
|
||
ProvideOrderItemIdentifiers Передача кодов маркировки единиц товара
|
||
|
||
{% include notitle [:no-translate[access]](../../_auto/method_scopes/provideOrderItemIdentifiers.md) %}
|
||
|
||
{% note warning "Если вы работаете по модели :no-translate[FBS]" %}
|
||
|
||
Используйте метод [PUT campaigns/{campaignId}/orders/{orderId}/boxes](../../reference/orders/setOrderBoxLayout.md).
|
||
|
||
{% endnote %}
|
||
|
||
Передает Маркету коды маркировки для единиц товара в указанном заказе.
|
||
|
||
Маркировка товаров в системе [:no-translate[«Честный ЗНАК»]](https://честныйзнак.рф/) **необязательна** для заказов от физических лиц, но **обязательна** для заказов от бизнеса.
|
||
|
||
Принимаются коды следующих типов:
|
||
|
||
* Коды в системе [:no-translate[«Честный ЗНАК»]](https://честныйзнак.рф/) или [:no-translate[«ASL BELGISI»]](https://aslbelgisi.uz) (для продавцов :no-translate[Market Yandex Go]).
|
||
* УИН для ювелирных изделий.
|
||
* РНПТ и ГТД для импортных прослеживаемых товаров.
|
||
|
||
{% note warning "Прежде чем работать с этим методом" %}
|
||
|
||
Обязательно прочтите [статью о работе с маркируемыми товарами](https://yandex.ru/support/marketplace/orders/cz.html).
|
||
|
||
{% endnote %}
|
||
|
||
Для каждой позиции в заказе, требующей маркировки, нужно передать список кодов — по одному для каждой единицы товара. Например, если в заказе две пары тапочек и одна пара туфель, получится список из двух кодов для первой позиции и список из одного кода для второй.
|
||
|
||
|**:no-translate[⚙️] Лимит:** 100 000 запросов в час|
|
||
|-|
|
||
|
||
@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||
@param campaignId Идентификатор кампании. Его можно узнать с помощью запроса [:no-translate[GET campaigns]](:no-translate[../../reference/campaigns/getCampaigns.md]) или найти в кабинете продавца на Маркете — нажмите на название своего бизнеса и перейдите на страницу: * **Модули и :no-translate[API]** → блок **Передача данных Маркету**. * **Лог запросов** → выпадающий список в блоке **Показывать логи**. ⚠️ Не передавайте вместо него идентификатор магазина, который указан в кабинете продавца на Маркете рядом с названием магазина и в некоторых отчетах.
|
||
@param orderId Идентификатор заказа.
|
||
@return OrdersAPIProvideOrderItemIdentifiersRequest
|
||
*/
|
||
func (a *OrdersAPIService) ProvideOrderItemIdentifiers(ctx context.Context, campaignId int64, orderId int64) OrdersAPIProvideOrderItemIdentifiersRequest {
|
||
return OrdersAPIProvideOrderItemIdentifiersRequest{
|
||
ApiService: a,
|
||
ctx: ctx,
|
||
campaignId: campaignId,
|
||
orderId: orderId,
|
||
}
|
||
}
|
||
|
||
// Execute executes the request
|
||
//
|
||
// @return ProvideOrderItemIdentifiersResponse
|
||
func (a *OrdersAPIService) ProvideOrderItemIdentifiersExecute(r OrdersAPIProvideOrderItemIdentifiersRequest) (*ProvideOrderItemIdentifiersResponse, *http.Response, error) {
|
||
var (
|
||
localVarHTTPMethod = http.MethodPut
|
||
localVarPostBody interface{}
|
||
formFiles []formFile
|
||
localVarReturnValue *ProvideOrderItemIdentifiersResponse
|
||
)
|
||
|
||
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "OrdersAPIService.ProvideOrderItemIdentifiers")
|
||
if err != nil {
|
||
return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
|
||
}
|
||
|
||
localVarPath := localBasePath + "/campaigns/{campaignId}/orders/{orderId}/identifiers"
|
||
localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
|
||
localVarPath = strings.Replace(localVarPath, "{"+"orderId"+"}", url.PathEscape(parameterValueToString(r.orderId, "orderId")), -1)
|
||
|
||
localVarHeaderParams := make(map[string]string)
|
||
localVarQueryParams := url.Values{}
|
||
localVarFormParams := url.Values{}
|
||
if r.campaignId < 1 {
|
||
return localVarReturnValue, nil, reportError("campaignId must be greater than 1")
|
||
}
|
||
if r.provideOrderItemIdentifiersRequest == nil {
|
||
return localVarReturnValue, nil, reportError("provideOrderItemIdentifiersRequest is required and must be specified")
|
||
}
|
||
|
||
// to determine the Content-Type header
|
||
localVarHTTPContentTypes := []string{"application/json"}
|
||
|
||
// set Content-Type header
|
||
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
|
||
if localVarHTTPContentType != "" {
|
||
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
|
||
}
|
||
|
||
// to determine the Accept header
|
||
localVarHTTPHeaderAccepts := []string{"application/json"}
|
||
|
||
// set Accept header
|
||
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
|
||
if localVarHTTPHeaderAccept != "" {
|
||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||
}
|
||
// body params
|
||
localVarPostBody = r.provideOrderItemIdentifiersRequest
|
||
if r.ctx != nil {
|
||
// API Key Authentication
|
||
if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
|
||
if apiKey, ok := auth["ApiKey"]; ok {
|
||
var key string
|
||
if apiKey.Prefix != "" {
|
||
key = apiKey.Prefix + " " + apiKey.Key
|
||
} else {
|
||
key = apiKey.Key
|
||
}
|
||
localVarHeaderParams["Api-Key"] = key
|
||
}
|
||
}
|
||
}
|
||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||
if err != nil {
|
||
return localVarReturnValue, nil, err
|
||
}
|
||
|
||
localVarHTTPResponse, err := a.client.callAPI(req)
|
||
if err != nil || localVarHTTPResponse == nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
|
||
localVarHTTPResponse.Body.Close()
|
||
localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
|
||
if err != nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
if localVarHTTPResponse.StatusCode >= 300 {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: localVarHTTPResponse.Status,
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 400 {
|
||
var v ApiClientDataErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 401 {
|
||
var v ApiUnauthorizedErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 403 {
|
||
var v ApiForbiddenErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 404 {
|
||
var v ApiNotFoundErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 420 {
|
||
var v ApiLimitErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 500 {
|
||
var v ApiServerErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: err.Error(),
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
return localVarReturnValue, localVarHTTPResponse, nil
|
||
}
|
||
|
||
type OrdersAPISetOrderBoxLayoutRequest struct {
|
||
ctx context.Context
|
||
ApiService *OrdersAPIService
|
||
campaignId int64
|
||
orderId int64
|
||
setOrderBoxLayoutRequest *SetOrderBoxLayoutRequest
|
||
}
|
||
|
||
func (r OrdersAPISetOrderBoxLayoutRequest) SetOrderBoxLayoutRequest(setOrderBoxLayoutRequest SetOrderBoxLayoutRequest) OrdersAPISetOrderBoxLayoutRequest {
|
||
r.setOrderBoxLayoutRequest = &setOrderBoxLayoutRequest
|
||
return r
|
||
}
|
||
|
||
func (r OrdersAPISetOrderBoxLayoutRequest) Execute() (*SetOrderBoxLayoutResponse, *http.Response, error) {
|
||
return r.ApiService.SetOrderBoxLayoutExecute(r)
|
||
}
|
||
|
||
/*
|
||
SetOrderBoxLayout Подготовка заказа
|
||
|
||
{% include notitle [:no-translate[access]](../../_auto/method_scopes/setOrderBoxLayout.md) %}
|
||
|
||
{% note tip "Подходит и для :no-translate[DBS]" %}
|
||
|
||
Запрос предназначен для работы с FBS-заказами, но вы можете использовать его для обработки DBS-заказов, если это удобно.
|
||
|
||
{% endnote %}
|
||
|
||
Позволяет выполнить три операции:
|
||
|
||
* передать Маркету информацию о распределении товаров по коробкам;
|
||
* передать Маркету коды маркировки для товаров;
|
||
* удалить товар из заказа, если его не оказалось на складе.
|
||
|
||
Если нужно что-то поправить в переданных данных, просто повторите запрос — это можно делать сколько угодно раз до перевода заказа в статус **Готов к отгрузке**. ⚠️ Если вы меняете раскладку уже после печати и расклейки ярлыков, не забудьте перепечатать их и наклеить заново.
|
||
|
||
## Как передать информацию о распределении товаров
|
||
|
||
В этом запросе вам нужно передать Маркету список коробок и указать, какие именно товары лежат в каждой из них. Коробки могут быть двух типов:
|
||
|
||
* **Содержащие товары целиком.** Такая коробка может содержать сколько угодно единиц любых товаров.
|
||
|
||
* **Содержащие часть товара.** Такие коробки содержат по одной части одного товара. Например, одна содержит внешний блок кондиционера, а другая — внутренний блок.
|
||
|
||
⚠️ Одна коробка не может содержать и товары целиком, и части товаров.
|
||
|
||
## Как передавать коды маркировки
|
||
|
||
{% note info "Маркировка товаров в системе [:no-translate[«Честный ЗНАК»]](https://честныйзнак.рф/) необязательна для заказов от физических лиц" %}
|
||
|
||
Для заказов от бизнеса все еще нужно передавать коды маркировки.
|
||
|
||
{% endnote %}
|
||
|
||
Если в заказе есть товары, подлежащие маркировке, в запросе нужно передать соответствующие уникальные коды. [Что такое маркировка?](https://yandex.ru/support/marketplace/orders/cz.html)
|
||
|
||
Принимаются коды следующих типов:
|
||
|
||
* Коды в системе [:no-translate[«Честный ЗНАК»]](https://честныйзнак.рф/) или [:no-translate[«ASL BELGISI»]](https://aslbelgisi.uz) (для продавцов :no-translate[Market Yandex Go]).
|
||
* УИН для ювелирных изделий.
|
||
* РНПТ и ГТД для импортных прослеживаемых товаров.
|
||
|
||
Для каждой позиции в заказе, требующей маркировки, нужно передать список кодов — по одному для каждой единицы товара. Например, если в заказе две пары тапочек и одна пара туфель, получится список из двух кодов для первой позиции и список из одного кода для второй.
|
||
|
||
Если товар едет в нескольких коробках, код маркировки нужно передать для каждой из них.
|
||
|
||
{% note warning "Для заказов, в которых есть ювелирные изделия" %}
|
||
|
||
Заказ перейдет в статус `READY_TO_SHIP`, только когда:
|
||
|
||
1. Вы передадите Маркету УИНы по каждому ювелирному изделию в заказе.
|
||
2. Все УИНы успешно пройдут проверку. [Как получить статусы проверки УИНов](../../reference/orders/getOrderIdentifiersStatus.md)
|
||
|
||
{% endnote %}
|
||
|
||
## Как удалить товар из заказа
|
||
|
||
Чтобы удалить товар из заказа:
|
||
|
||
1. Добавьте в запрос `allowRemove: true`.
|
||
2. Передайте распределение по коробкам без товара, который нужно удалить.
|
||
|
||
{% note warning "Удаление нельзя отменить" %}
|
||
|
||
Эта операция необратима: покупатель сразу получит уведомление, а состав заказа изменится.
|
||
|
||
{% endnote %}
|
||
|
||
Чтобы удалить позицию целиком, не передавайте соответствующий `OrderBoxLayoutItemDTO`. Чтобы уменьшить количество товара, передайте уменьшенное значение в поле `fullCount`.
|
||
|
||
Нельзя удалить или уменьшить количество товара, если он:
|
||
|
||
* добавлен по акции;
|
||
* составляет 99% стоимости заказа;
|
||
* единственный товар в заказе.
|
||
|
||
Если вы не можете отгрузить такой товар, отмените заказ. Для этого отправьте запрос методом [PUT campaigns/{campaignId}/orders/{orderId}/status](../../reference/orders/updateOrderStatus.md) и передайте статус заказа `CANCELLED` с причиной отмены `SHOP_FAILED`.
|
||
|
||
{% note info "Увеличить заказ нельзя" %}
|
||
|
||
С помощью запроса нельзя увеличить количество одинаковых товаров, добавить новые товары в заказ или заменить один товар другим.
|
||
|
||
{% endnote %}
|
||
|
||
## Примеры
|
||
|
||
{% cut "Товар умещается в коробку" %}
|
||
|
||
Вот как будет выглядеть запрос, если в одной коробке едут:
|
||
|
||
- три единицы одного товара, требующего маркировки;
|
||
|
||
- одна единица другого товара, не требущего маркировки.
|
||
|
||
```json translate=no
|
||
{
|
||
"boxes": [
|
||
{
|
||
"items": [
|
||
{
|
||
"id": 123456,
|
||
"fullCount": 3,
|
||
"instances": [
|
||
{
|
||
"cis": "01030410947874432155Qbag!\u001d93Zjqw"
|
||
},
|
||
{
|
||
"cis": "010304109478gftJ14545762!\u001dhGt264"
|
||
},
|
||
{
|
||
"cis": "010304109478fRs28323ks23!\u001dhet201"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": 654321,
|
||
"fullCount": 1
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
{% endcut %}
|
||
|
||
{% cut "Товар едет в разных коробках" %}
|
||
|
||
Вот как будет выглядеть запрос, если товар едет в двух коробках:
|
||
|
||
```json translate=no
|
||
{
|
||
"boxes": [
|
||
{
|
||
"items": [
|
||
{
|
||
"id": 123456,
|
||
"partialCount": {
|
||
"current": 1,
|
||
"total": 2
|
||
},
|
||
"instances": [
|
||
{
|
||
"cis": "01030410947874432155Qbag!\u001d93Zjqw"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"items": [
|
||
{
|
||
"id": 123456,
|
||
"partialCount": {
|
||
"current": 2,
|
||
"total": 2
|
||
},
|
||
"instances": [
|
||
{
|
||
"cis": "01030410947874432155Qbag!\u001d93Zjqw"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
{% endcut %}
|
||
|
||
{% cut "Одинаковые товары, где каждый едет в нескольких коробках" %}
|
||
|
||
Вот как будет выглядеть запрос, если каждый из двух одинаковых товаров едет в двух коробках:
|
||
|
||
```json translate=no
|
||
{
|
||
"boxes": [
|
||
{
|
||
"items": [
|
||
{
|
||
"id": 123456,
|
||
"partialCount": {
|
||
"current": 1,
|
||
"total": 2
|
||
},
|
||
"instances": [
|
||
{
|
||
"cis": "01030410947874432155Qbag!\u001d93Zjqw"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"items": [
|
||
{
|
||
"id": 123456,
|
||
"partialCount": {
|
||
"current": 2,
|
||
"total": 2
|
||
},
|
||
"instances": [
|
||
{
|
||
"cis": "01030410947874432155Qbag!\u001d93Zjqw"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"items": [
|
||
{
|
||
"id": 123456,
|
||
"partialCount": {
|
||
"current": 1,
|
||
"total": 2
|
||
},
|
||
"instances": [
|
||
{
|
||
"cis": "01030410947874432155Qbag!\u001d93Zjqw"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"items": [
|
||
{
|
||
"id": 123456,
|
||
"partialCount": {
|
||
"current": 2,
|
||
"total": 2
|
||
},
|
||
"instances": [
|
||
{
|
||
"cis": "01030410947874432155Qbag!\u001d93Zjqw"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
{% endcut %}
|
||
|
||
|**:no-translate[⚙️] Лимит:** 100 000 запросов в час|
|
||
|-|
|
||
|
||
@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||
@param campaignId Идентификатор кампании. Его можно узнать с помощью запроса [:no-translate[GET campaigns]](:no-translate[../../reference/campaigns/getCampaigns.md]) или найти в кабинете продавца на Маркете — нажмите на название своего бизнеса и перейдите на страницу: * **Модули и :no-translate[API]** → блок **Передача данных Маркету**. * **Лог запросов** → выпадающий список в блоке **Показывать логи**. ⚠️ Не передавайте вместо него идентификатор магазина, который указан в кабинете продавца на Маркете рядом с названием магазина и в некоторых отчетах.
|
||
@param orderId Идентификатор заказа.
|
||
@return OrdersAPISetOrderBoxLayoutRequest
|
||
*/
|
||
func (a *OrdersAPIService) SetOrderBoxLayout(ctx context.Context, campaignId int64, orderId int64) OrdersAPISetOrderBoxLayoutRequest {
|
||
return OrdersAPISetOrderBoxLayoutRequest{
|
||
ApiService: a,
|
||
ctx: ctx,
|
||
campaignId: campaignId,
|
||
orderId: orderId,
|
||
}
|
||
}
|
||
|
||
// Execute executes the request
|
||
//
|
||
// @return SetOrderBoxLayoutResponse
|
||
func (a *OrdersAPIService) SetOrderBoxLayoutExecute(r OrdersAPISetOrderBoxLayoutRequest) (*SetOrderBoxLayoutResponse, *http.Response, error) {
|
||
var (
|
||
localVarHTTPMethod = http.MethodPut
|
||
localVarPostBody interface{}
|
||
formFiles []formFile
|
||
localVarReturnValue *SetOrderBoxLayoutResponse
|
||
)
|
||
|
||
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "OrdersAPIService.SetOrderBoxLayout")
|
||
if err != nil {
|
||
return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
|
||
}
|
||
|
||
localVarPath := localBasePath + "/campaigns/{campaignId}/orders/{orderId}/boxes"
|
||
localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
|
||
localVarPath = strings.Replace(localVarPath, "{"+"orderId"+"}", url.PathEscape(parameterValueToString(r.orderId, "orderId")), -1)
|
||
|
||
localVarHeaderParams := make(map[string]string)
|
||
localVarQueryParams := url.Values{}
|
||
localVarFormParams := url.Values{}
|
||
if r.campaignId < 1 {
|
||
return localVarReturnValue, nil, reportError("campaignId must be greater than 1")
|
||
}
|
||
if r.setOrderBoxLayoutRequest == nil {
|
||
return localVarReturnValue, nil, reportError("setOrderBoxLayoutRequest is required and must be specified")
|
||
}
|
||
|
||
// to determine the Content-Type header
|
||
localVarHTTPContentTypes := []string{"application/json"}
|
||
|
||
// set Content-Type header
|
||
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
|
||
if localVarHTTPContentType != "" {
|
||
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
|
||
}
|
||
|
||
// to determine the Accept header
|
||
localVarHTTPHeaderAccepts := []string{"application/json"}
|
||
|
||
// set Accept header
|
||
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
|
||
if localVarHTTPHeaderAccept != "" {
|
||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||
}
|
||
// body params
|
||
localVarPostBody = r.setOrderBoxLayoutRequest
|
||
if r.ctx != nil {
|
||
// API Key Authentication
|
||
if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
|
||
if apiKey, ok := auth["ApiKey"]; ok {
|
||
var key string
|
||
if apiKey.Prefix != "" {
|
||
key = apiKey.Prefix + " " + apiKey.Key
|
||
} else {
|
||
key = apiKey.Key
|
||
}
|
||
localVarHeaderParams["Api-Key"] = key
|
||
}
|
||
}
|
||
}
|
||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||
if err != nil {
|
||
return localVarReturnValue, nil, err
|
||
}
|
||
|
||
localVarHTTPResponse, err := a.client.callAPI(req)
|
||
if err != nil || localVarHTTPResponse == nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
|
||
localVarHTTPResponse.Body.Close()
|
||
localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
|
||
if err != nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
if localVarHTTPResponse.StatusCode >= 300 {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: localVarHTTPResponse.Status,
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 400 {
|
||
var v ApiClientDataErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 401 {
|
||
var v ApiUnauthorizedErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 403 {
|
||
var v ApiForbiddenErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 404 {
|
||
var v ApiNotFoundErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 420 {
|
||
var v ApiLimitErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 500 {
|
||
var v ApiServerErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: err.Error(),
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
return localVarReturnValue, localVarHTTPResponse, nil
|
||
}
|
||
|
||
type OrdersAPISetOrderShipmentBoxesRequest struct {
|
||
ctx context.Context
|
||
ApiService *OrdersAPIService
|
||
campaignId int64
|
||
orderId int64
|
||
shipmentId int64
|
||
setOrderShipmentBoxesRequest *SetOrderShipmentBoxesRequest
|
||
}
|
||
|
||
func (r OrdersAPISetOrderShipmentBoxesRequest) SetOrderShipmentBoxesRequest(setOrderShipmentBoxesRequest SetOrderShipmentBoxesRequest) OrdersAPISetOrderShipmentBoxesRequest {
|
||
r.setOrderShipmentBoxesRequest = &setOrderShipmentBoxesRequest
|
||
return r
|
||
}
|
||
|
||
func (r OrdersAPISetOrderShipmentBoxesRequest) Execute() (*SetOrderShipmentBoxesResponse, *http.Response, error) {
|
||
return r.ApiService.SetOrderShipmentBoxesExecute(r)
|
||
}
|
||
|
||
/*
|
||
SetOrderShipmentBoxes Передача количества грузовых мест в заказе
|
||
|
||
{% include notitle [:no-translate[access]](../../_auto/method_scopes/setOrderShipmentBoxes.md) %}
|
||
|
||
{% note warning "Какой метод использовать вместо устаревшего" %}
|
||
|
||
[PUT campaigns/{campaignId}/orders/{orderId}/boxes](../../reference/orders/setOrderBoxLayout.md)
|
||
|
||
{% endnote %}
|
||
|
||
Отгружаемый Маркету заказ может не влезть в одну коробку или упаковку — в этом случае получается, что он занимает несколько грузовых мест.
|
||
|
||
Количество грузовых мест нужно обязательно передавать Маркету, если оно не равно 1. Это делается перед переводом его в статус **Готов к отгрузке**. Подробно о том, что в какой момент нужно передавать, рассказано в [пошаговой инструкции](../../step-by-step/fbs.md).
|
||
|
||
Метод устроен немного нестандартно: количество задается длиной массива пустых объектов.
|
||
|
||
Раньше метод требовал передачи большего количества данных. Запросы, оформленные по старому образцу, работают, но лучше делать по-новому.
|
||
|
||
{% cut "Как было раньше" %}
|
||
|
||
Структура тела PUT-запроса:
|
||
|
||
```text translate=no
|
||
|
||
{
|
||
"boxes":
|
||
[
|
||
{
|
||
"fulfilmentId": "{string}",
|
||
"weight": {int64},
|
||
"width": {int64},
|
||
"height": {int64},
|
||
"depth": {int64},
|
||
"items":
|
||
[
|
||
{
|
||
"id": {int64},
|
||
"count": {int32}
|
||
},
|
||
...
|
||
]
|
||
},
|
||
...
|
||
]
|
||
}
|
||
|
||
```
|
||
| **Параметр** | **Тип** | **Значение** |
|
||
| ----------- | ----------- | ----------- |
|
||
| `boxes` | | Список грузовых мест. |
|
||
|
||
**Параметры, вложенные в `boxes`**
|
||
| **Параметр** | **Тип** | **Значение** |
|
||
| ----------- | ----------- | ----------- |
|
||
| `fulfilmentId` | :no-translate[String] | Идентификатор грузового места в информационной системе магазина. Сформируйте идентификатор по шаблону: `номер заказа на Маркете-номер грузового места`. Например, `7206821‑1, 7206821‑2` и т. д. |
|
||
| `weight` | :no-translate[Int64] | Масса брутто грузового места (суммарная масса упаковки и содержимого) в граммах. |
|
||
| `width` | :no-translate[Int64] | Ширина грузового места в сантиметрах. |
|
||
| `height` | :no-translate[Int64] | Высота грузового места в сантиметрах. |
|
||
| `depth` | :no-translate[Int64] | Глубина грузового места в сантиметрах. |
|
||
| `items` | :no-translate[Int64] | Список товаров в грузовом месте. |
|
||
|
||
**Параметры, вложенные в `items`**
|
||
| **Параметр** | **Тип** | **Значение** |
|
||
| ----------- | ----------- | ----------- |
|
||
| `id` | :no-translate[Int64] | Идентификатор товара в рамках заказа. |
|
||
| `count` | :no-translate[Int32] | Количество единиц товара в грузовом месте. |
|
||
|
||
{% endcut %}
|
||
|
||
|**:no-translate[⚙️] Лимит:** 100 000 запросов в час|
|
||
|-|
|
||
|
||
@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||
@param campaignId Идентификатор кампании. Его можно узнать с помощью запроса [:no-translate[GET campaigns]](:no-translate[../../reference/campaigns/getCampaigns.md]) или найти в кабинете продавца на Маркете — нажмите на название своего бизнеса и перейдите на страницу: * **Модули и :no-translate[API]** → блок **Передача данных Маркету**. * **Лог запросов** → выпадающий список в блоке **Показывать логи**. ⚠️ Не передавайте вместо него идентификатор магазина, который указан в кабинете продавца на Маркете рядом с названием магазина и в некоторых отчетах.
|
||
@param orderId Идентификатор заказа.
|
||
@param shipmentId Параметр больше не используется. Вставьте любое число — просто чтобы получился корректный :no-translate[URL].
|
||
@return OrdersAPISetOrderShipmentBoxesRequest
|
||
|
||
Deprecated
|
||
*/
|
||
func (a *OrdersAPIService) SetOrderShipmentBoxes(ctx context.Context, campaignId int64, orderId int64, shipmentId int64) OrdersAPISetOrderShipmentBoxesRequest {
|
||
return OrdersAPISetOrderShipmentBoxesRequest{
|
||
ApiService: a,
|
||
ctx: ctx,
|
||
campaignId: campaignId,
|
||
orderId: orderId,
|
||
shipmentId: shipmentId,
|
||
}
|
||
}
|
||
|
||
// Execute executes the request
|
||
//
|
||
// @return SetOrderShipmentBoxesResponse
|
||
//
|
||
// Deprecated
|
||
func (a *OrdersAPIService) SetOrderShipmentBoxesExecute(r OrdersAPISetOrderShipmentBoxesRequest) (*SetOrderShipmentBoxesResponse, *http.Response, error) {
|
||
var (
|
||
localVarHTTPMethod = http.MethodPut
|
||
localVarPostBody interface{}
|
||
formFiles []formFile
|
||
localVarReturnValue *SetOrderShipmentBoxesResponse
|
||
)
|
||
|
||
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "OrdersAPIService.SetOrderShipmentBoxes")
|
||
if err != nil {
|
||
return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
|
||
}
|
||
|
||
localVarPath := localBasePath + "/campaigns/{campaignId}/orders/{orderId}/delivery/shipments/{shipmentId}/boxes"
|
||
localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
|
||
localVarPath = strings.Replace(localVarPath, "{"+"orderId"+"}", url.PathEscape(parameterValueToString(r.orderId, "orderId")), -1)
|
||
localVarPath = strings.Replace(localVarPath, "{"+"shipmentId"+"}", url.PathEscape(parameterValueToString(r.shipmentId, "shipmentId")), -1)
|
||
|
||
localVarHeaderParams := make(map[string]string)
|
||
localVarQueryParams := url.Values{}
|
||
localVarFormParams := url.Values{}
|
||
if r.campaignId < 1 {
|
||
return localVarReturnValue, nil, reportError("campaignId must be greater than 1")
|
||
}
|
||
if r.setOrderShipmentBoxesRequest == nil {
|
||
return localVarReturnValue, nil, reportError("setOrderShipmentBoxesRequest is required and must be specified")
|
||
}
|
||
|
||
// to determine the Content-Type header
|
||
localVarHTTPContentTypes := []string{"application/json"}
|
||
|
||
// set Content-Type header
|
||
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
|
||
if localVarHTTPContentType != "" {
|
||
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
|
||
}
|
||
|
||
// to determine the Accept header
|
||
localVarHTTPHeaderAccepts := []string{"application/json"}
|
||
|
||
// set Accept header
|
||
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
|
||
if localVarHTTPHeaderAccept != "" {
|
||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||
}
|
||
// body params
|
||
localVarPostBody = r.setOrderShipmentBoxesRequest
|
||
if r.ctx != nil {
|
||
// API Key Authentication
|
||
if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
|
||
if apiKey, ok := auth["ApiKey"]; ok {
|
||
var key string
|
||
if apiKey.Prefix != "" {
|
||
key = apiKey.Prefix + " " + apiKey.Key
|
||
} else {
|
||
key = apiKey.Key
|
||
}
|
||
localVarHeaderParams["Api-Key"] = key
|
||
}
|
||
}
|
||
}
|
||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||
if err != nil {
|
||
return localVarReturnValue, nil, err
|
||
}
|
||
|
||
localVarHTTPResponse, err := a.client.callAPI(req)
|
||
if err != nil || localVarHTTPResponse == nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
|
||
localVarHTTPResponse.Body.Close()
|
||
localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
|
||
if err != nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
if localVarHTTPResponse.StatusCode >= 300 {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: localVarHTTPResponse.Status,
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 400 {
|
||
var v ApiClientDataErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 401 {
|
||
var v ApiUnauthorizedErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 403 {
|
||
var v ApiForbiddenErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 404 {
|
||
var v ApiNotFoundErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 420 {
|
||
var v ApiLimitErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 500 {
|
||
var v ApiServerErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: err.Error(),
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
return localVarReturnValue, localVarHTTPResponse, nil
|
||
}
|
||
|
||
type OrdersAPIUpdateExternalOrderIdRequest struct {
|
||
ctx context.Context
|
||
ApiService *OrdersAPIService
|
||
campaignId int64
|
||
orderId int64
|
||
updateExternalOrderIdRequest *UpdateExternalOrderIdRequest
|
||
}
|
||
|
||
func (r OrdersAPIUpdateExternalOrderIdRequest) UpdateExternalOrderIdRequest(updateExternalOrderIdRequest UpdateExternalOrderIdRequest) OrdersAPIUpdateExternalOrderIdRequest {
|
||
r.updateExternalOrderIdRequest = &updateExternalOrderIdRequest
|
||
return r
|
||
}
|
||
|
||
func (r OrdersAPIUpdateExternalOrderIdRequest) Execute() (*EmptyApiResponse, *http.Response, error) {
|
||
return r.ApiService.UpdateExternalOrderIdExecute(r)
|
||
}
|
||
|
||
/*
|
||
UpdateExternalOrderId Передача или изменение внешнего идентификатора заказа
|
||
|
||
{% include notitle [:no-translate[access]](../../_auto/method_scopes/updateExternalOrderId.md) %}
|
||
|
||
При первом использовании запроса передает Маркету идентификатор заказа в системе магазина. При повторном — изменяет его в системе Маркета.
|
||
|
||
Этот идентификатор отражается в документах отгрузки: акте приема-передачи, листе сборки и ярлыках.
|
||
|
||
Передать данные можно до перехода заказа в статус `PROCESSING` с подстатусом `READY_TO_SHIP`.
|
||
|
||
|**:no-translate[⚙️] Лимит:** 10 000 запросов в час|
|
||
|-|
|
||
|
||
@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||
@param campaignId Идентификатор кампании. Его можно узнать с помощью запроса [:no-translate[GET campaigns]](:no-translate[../../reference/campaigns/getCampaigns.md]) или найти в кабинете продавца на Маркете — нажмите на название своего бизнеса и перейдите на страницу: * **Модули и :no-translate[API]** → блок **Передача данных Маркету**. * **Лог запросов** → выпадающий список в блоке **Показывать логи**. ⚠️ Не передавайте вместо него идентификатор магазина, который указан в кабинете продавца на Маркете рядом с названием магазина и в некоторых отчетах.
|
||
@param orderId Идентификатор заказа.
|
||
@return OrdersAPIUpdateExternalOrderIdRequest
|
||
*/
|
||
func (a *OrdersAPIService) UpdateExternalOrderId(ctx context.Context, campaignId int64, orderId int64) OrdersAPIUpdateExternalOrderIdRequest {
|
||
return OrdersAPIUpdateExternalOrderIdRequest{
|
||
ApiService: a,
|
||
ctx: ctx,
|
||
campaignId: campaignId,
|
||
orderId: orderId,
|
||
}
|
||
}
|
||
|
||
// Execute executes the request
|
||
//
|
||
// @return EmptyApiResponse
|
||
func (a *OrdersAPIService) UpdateExternalOrderIdExecute(r OrdersAPIUpdateExternalOrderIdRequest) (*EmptyApiResponse, *http.Response, error) {
|
||
var (
|
||
localVarHTTPMethod = http.MethodPost
|
||
localVarPostBody interface{}
|
||
formFiles []formFile
|
||
localVarReturnValue *EmptyApiResponse
|
||
)
|
||
|
||
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "OrdersAPIService.UpdateExternalOrderId")
|
||
if err != nil {
|
||
return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
|
||
}
|
||
|
||
localVarPath := localBasePath + "/campaigns/{campaignId}/orders/{orderId}/external-id"
|
||
localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
|
||
localVarPath = strings.Replace(localVarPath, "{"+"orderId"+"}", url.PathEscape(parameterValueToString(r.orderId, "orderId")), -1)
|
||
|
||
localVarHeaderParams := make(map[string]string)
|
||
localVarQueryParams := url.Values{}
|
||
localVarFormParams := url.Values{}
|
||
if r.campaignId < 1 {
|
||
return localVarReturnValue, nil, reportError("campaignId must be greater than 1")
|
||
}
|
||
if r.updateExternalOrderIdRequest == nil {
|
||
return localVarReturnValue, nil, reportError("updateExternalOrderIdRequest is required and must be specified")
|
||
}
|
||
|
||
// to determine the Content-Type header
|
||
localVarHTTPContentTypes := []string{"application/json"}
|
||
|
||
// set Content-Type header
|
||
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
|
||
if localVarHTTPContentType != "" {
|
||
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
|
||
}
|
||
|
||
// to determine the Accept header
|
||
localVarHTTPHeaderAccepts := []string{"application/json"}
|
||
|
||
// set Accept header
|
||
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
|
||
if localVarHTTPHeaderAccept != "" {
|
||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||
}
|
||
// body params
|
||
localVarPostBody = r.updateExternalOrderIdRequest
|
||
if r.ctx != nil {
|
||
// API Key Authentication
|
||
if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
|
||
if apiKey, ok := auth["ApiKey"]; ok {
|
||
var key string
|
||
if apiKey.Prefix != "" {
|
||
key = apiKey.Prefix + " " + apiKey.Key
|
||
} else {
|
||
key = apiKey.Key
|
||
}
|
||
localVarHeaderParams["Api-Key"] = key
|
||
}
|
||
}
|
||
}
|
||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||
if err != nil {
|
||
return localVarReturnValue, nil, err
|
||
}
|
||
|
||
localVarHTTPResponse, err := a.client.callAPI(req)
|
||
if err != nil || localVarHTTPResponse == nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
|
||
localVarHTTPResponse.Body.Close()
|
||
localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
|
||
if err != nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
if localVarHTTPResponse.StatusCode >= 300 {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: localVarHTTPResponse.Status,
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 400 {
|
||
var v ApiClientDataErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 401 {
|
||
var v ApiUnauthorizedErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 403 {
|
||
var v ApiForbiddenErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 404 {
|
||
var v ApiNotFoundErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 420 {
|
||
var v ApiLimitErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 500 {
|
||
var v ApiServerErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: err.Error(),
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
return localVarReturnValue, localVarHTTPResponse, nil
|
||
}
|
||
|
||
type OrdersAPIUpdateOrderItemsRequest struct {
|
||
ctx context.Context
|
||
ApiService *OrdersAPIService
|
||
campaignId int64
|
||
orderId int64
|
||
updateOrderItemRequest *UpdateOrderItemRequest
|
||
}
|
||
|
||
func (r OrdersAPIUpdateOrderItemsRequest) UpdateOrderItemRequest(updateOrderItemRequest UpdateOrderItemRequest) OrdersAPIUpdateOrderItemsRequest {
|
||
r.updateOrderItemRequest = &updateOrderItemRequest
|
||
return r
|
||
}
|
||
|
||
func (r OrdersAPIUpdateOrderItemsRequest) Execute() (*http.Response, error) {
|
||
return r.ApiService.UpdateOrderItemsExecute(r)
|
||
}
|
||
|
||
/*
|
||
UpdateOrderItems Удаление товаров из заказа или уменьшение их числа
|
||
|
||
{% include notitle [:no-translate[access]](../../_auto/method_scopes/updateOrderItems.md) %}
|
||
|
||
{% note warning "Если вы работаете по модели FBS" %}
|
||
|
||
Используйте метод [PUT campaigns/{campaignId}/orders/{orderId}/boxes](../../reference/orders/setOrderBoxLayout.md).
|
||
|
||
{% endnote %}
|
||
|
||
Удаляет один или несколько товаров из заказа, если магазин не может поставить их все.
|
||
|
||
Заказ должен находится в статусе `"status": "PROCESSING"` этапа обработки `"substatus": "STARTED"`. Изменить состав нельзя после передачи статуса `"substatus": "READY_TO_SHIP"`.
|
||
|
||
{% cut "Уменьшить количество одинаковых товаров" %}
|
||
|
||
Передайте обновленное значение в параметре `count`.
|
||
|
||
{% endcut %}
|
||
|
||
{% cut "Удалить товар из заказа" %}
|
||
|
||
Передайте значение `0` в параметре `count` или не передавайте `item`.
|
||
|
||
{% endcut %}
|
||
|
||
Нельзя удалить или уменьшить количество товара, если он:
|
||
|
||
* добавлен по акции;
|
||
* составляет 99% стоимости заказа;
|
||
* единственный товар в заказе.
|
||
|
||
В таком случае отмените заказ — в методе [PUT campaigns/{campaignId}/orders/{orderId}/status](../../reference/orders/updateOrderStatus.md) передайте статус заказа `CANCELLED` с причиной отмены `SHOP_FAILED`.
|
||
|
||
### Как вернутся деньги {#money}
|
||
|
||
Если покупатель оплатил товар при оформлении, Маркет вернет ему деньги за удаленные из заказа товары в течение двух дней:
|
||
|
||
* при оплате банковской картой — с момента, когда магазин переведет заказ в статус `SHIPPED`;
|
||
|
||
* при оплате через :no-translate[Apple Pay] или :no-translate[Google Pay] — с момента, когда магазин удалит товар из заказа.
|
||
|
||
{% endcut %}
|
||
|
||
|**:no-translate[⚙️] Лимит:** 100 000 запросов в час|
|
||
|-|
|
||
|
||
@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||
@param campaignId Идентификатор кампании. Его можно узнать с помощью запроса [:no-translate[GET campaigns]](:no-translate[../../reference/campaigns/getCampaigns.md]) или найти в кабинете продавца на Маркете — нажмите на название своего бизнеса и перейдите на страницу: * **Модули и :no-translate[API]** → блок **Передача данных Маркету**. * **Лог запросов** → выпадающий список в блоке **Показывать логи**. ⚠️ Не передавайте вместо него идентификатор магазина, который указан в кабинете продавца на Маркете рядом с названием магазина и в некоторых отчетах.
|
||
@param orderId Идентификатор заказа.
|
||
@return OrdersAPIUpdateOrderItemsRequest
|
||
*/
|
||
func (a *OrdersAPIService) UpdateOrderItems(ctx context.Context, campaignId int64, orderId int64) OrdersAPIUpdateOrderItemsRequest {
|
||
return OrdersAPIUpdateOrderItemsRequest{
|
||
ApiService: a,
|
||
ctx: ctx,
|
||
campaignId: campaignId,
|
||
orderId: orderId,
|
||
}
|
||
}
|
||
|
||
// Execute executes the request
|
||
func (a *OrdersAPIService) UpdateOrderItemsExecute(r OrdersAPIUpdateOrderItemsRequest) (*http.Response, error) {
|
||
var (
|
||
localVarHTTPMethod = http.MethodPut
|
||
localVarPostBody interface{}
|
||
formFiles []formFile
|
||
)
|
||
|
||
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "OrdersAPIService.UpdateOrderItems")
|
||
if err != nil {
|
||
return nil, &GenericOpenAPIError{error: err.Error()}
|
||
}
|
||
|
||
localVarPath := localBasePath + "/campaigns/{campaignId}/orders/{orderId}/items"
|
||
localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
|
||
localVarPath = strings.Replace(localVarPath, "{"+"orderId"+"}", url.PathEscape(parameterValueToString(r.orderId, "orderId")), -1)
|
||
|
||
localVarHeaderParams := make(map[string]string)
|
||
localVarQueryParams := url.Values{}
|
||
localVarFormParams := url.Values{}
|
||
if r.campaignId < 1 {
|
||
return nil, reportError("campaignId must be greater than 1")
|
||
}
|
||
if r.updateOrderItemRequest == nil {
|
||
return nil, reportError("updateOrderItemRequest is required and must be specified")
|
||
}
|
||
|
||
// to determine the Content-Type header
|
||
localVarHTTPContentTypes := []string{"application/json"}
|
||
|
||
// set Content-Type header
|
||
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
|
||
if localVarHTTPContentType != "" {
|
||
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
|
||
}
|
||
|
||
// to determine the Accept header
|
||
localVarHTTPHeaderAccepts := []string{"application/json"}
|
||
|
||
// set Accept header
|
||
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
|
||
if localVarHTTPHeaderAccept != "" {
|
||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||
}
|
||
// body params
|
||
localVarPostBody = r.updateOrderItemRequest
|
||
if r.ctx != nil {
|
||
// API Key Authentication
|
||
if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
|
||
if apiKey, ok := auth["ApiKey"]; ok {
|
||
var key string
|
||
if apiKey.Prefix != "" {
|
||
key = apiKey.Prefix + " " + apiKey.Key
|
||
} else {
|
||
key = apiKey.Key
|
||
}
|
||
localVarHeaderParams["Api-Key"] = key
|
||
}
|
||
}
|
||
}
|
||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
localVarHTTPResponse, err := a.client.callAPI(req)
|
||
if err != nil || localVarHTTPResponse == nil {
|
||
return localVarHTTPResponse, err
|
||
}
|
||
|
||
localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
|
||
localVarHTTPResponse.Body.Close()
|
||
localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
|
||
if err != nil {
|
||
return localVarHTTPResponse, err
|
||
}
|
||
|
||
if localVarHTTPResponse.StatusCode >= 300 {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: localVarHTTPResponse.Status,
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 400 {
|
||
var v ApiClientDataErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 401 {
|
||
var v ApiUnauthorizedErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 403 {
|
||
var v ApiForbiddenErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 404 {
|
||
var v ApiNotFoundErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 420 {
|
||
var v ApiLimitErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 500 {
|
||
var v ApiServerErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
}
|
||
return localVarHTTPResponse, newErr
|
||
}
|
||
|
||
return localVarHTTPResponse, nil
|
||
}
|
||
|
||
type OrdersAPIUpdateOrderStatusRequest struct {
|
||
ctx context.Context
|
||
ApiService *OrdersAPIService
|
||
campaignId int64
|
||
orderId int64
|
||
updateOrderStatusRequest *UpdateOrderStatusRequest
|
||
}
|
||
|
||
func (r OrdersAPIUpdateOrderStatusRequest) UpdateOrderStatusRequest(updateOrderStatusRequest UpdateOrderStatusRequest) OrdersAPIUpdateOrderStatusRequest {
|
||
r.updateOrderStatusRequest = &updateOrderStatusRequest
|
||
return r
|
||
}
|
||
|
||
func (r OrdersAPIUpdateOrderStatusRequest) Execute() (*UpdateOrderStatusResponse, *http.Response, error) {
|
||
return r.ApiService.UpdateOrderStatusExecute(r)
|
||
}
|
||
|
||
/*
|
||
UpdateOrderStatus Изменение статуса одного заказа
|
||
|
||
{% include notitle [:no-translate[access]](../../_auto/method_scopes/updateOrderStatus.md) %}
|
||
|
||
Изменяет статус заказа. Возможные изменения статусов:
|
||
|
||
* Если магазин подтвердил и подготовил заказ к отправке, то заказ из статуса `"status": "PROCESSING"` и этапа обработки `"substatus": "STARTED"` нужно перевести в статус `"status": "PROCESSING"` и этап обработки `"substatus": "READY_TO_SHIP"`.
|
||
* Если магазин подтвердил заказ, но не может его выполнить (например, товар числится в базе, но отсутствует на складе или нет нужного цвета), то заказ из статуса `"status": "PROCESSING"` и этапа обработки `"substatus": "STARTED"` нужно перевести в статус `"status": "CANCELLED"` с причиной отмены заказа `"substatus": "SHOP_FAILED"`.
|
||
* Если магазин подготовил заказ к отгрузке, но не может его выполнить (например, последний товар был поврежден или оказался с браком), то заказ из статуса `"status": "PROCESSING"` и этапа обработки `"substatus": "READY_TO_SHIP"` нужно перевести в статус `"status": "CANCELLED"` с причиной отмены заказа `"substatus": "SHOP_FAILED"`.
|
||
|
||
|**:no-translate[⚙️] Лимит:** 100 000 запросов в час|
|
||
|-|
|
||
|
||
@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||
@param campaignId Идентификатор кампании. Его можно узнать с помощью запроса [:no-translate[GET campaigns]](:no-translate[../../reference/campaigns/getCampaigns.md]) или найти в кабинете продавца на Маркете — нажмите на название своего бизнеса и перейдите на страницу: * **Модули и :no-translate[API]** → блок **Передача данных Маркету**. * **Лог запросов** → выпадающий список в блоке **Показывать логи**. ⚠️ Не передавайте вместо него идентификатор магазина, который указан в кабинете продавца на Маркете рядом с названием магазина и в некоторых отчетах.
|
||
@param orderId Идентификатор заказа.
|
||
@return OrdersAPIUpdateOrderStatusRequest
|
||
*/
|
||
func (a *OrdersAPIService) UpdateOrderStatus(ctx context.Context, campaignId int64, orderId int64) OrdersAPIUpdateOrderStatusRequest {
|
||
return OrdersAPIUpdateOrderStatusRequest{
|
||
ApiService: a,
|
||
ctx: ctx,
|
||
campaignId: campaignId,
|
||
orderId: orderId,
|
||
}
|
||
}
|
||
|
||
// Execute executes the request
|
||
//
|
||
// @return UpdateOrderStatusResponse
|
||
func (a *OrdersAPIService) UpdateOrderStatusExecute(r OrdersAPIUpdateOrderStatusRequest) (*UpdateOrderStatusResponse, *http.Response, error) {
|
||
var (
|
||
localVarHTTPMethod = http.MethodPut
|
||
localVarPostBody interface{}
|
||
formFiles []formFile
|
||
localVarReturnValue *UpdateOrderStatusResponse
|
||
)
|
||
|
||
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "OrdersAPIService.UpdateOrderStatus")
|
||
if err != nil {
|
||
return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
|
||
}
|
||
|
||
localVarPath := localBasePath + "/campaigns/{campaignId}/orders/{orderId}/status"
|
||
localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
|
||
localVarPath = strings.Replace(localVarPath, "{"+"orderId"+"}", url.PathEscape(parameterValueToString(r.orderId, "orderId")), -1)
|
||
|
||
localVarHeaderParams := make(map[string]string)
|
||
localVarQueryParams := url.Values{}
|
||
localVarFormParams := url.Values{}
|
||
if r.campaignId < 1 {
|
||
return localVarReturnValue, nil, reportError("campaignId must be greater than 1")
|
||
}
|
||
if r.updateOrderStatusRequest == nil {
|
||
return localVarReturnValue, nil, reportError("updateOrderStatusRequest is required and must be specified")
|
||
}
|
||
|
||
// to determine the Content-Type header
|
||
localVarHTTPContentTypes := []string{"application/json"}
|
||
|
||
// set Content-Type header
|
||
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
|
||
if localVarHTTPContentType != "" {
|
||
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
|
||
}
|
||
|
||
// to determine the Accept header
|
||
localVarHTTPHeaderAccepts := []string{"application/json"}
|
||
|
||
// set Accept header
|
||
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
|
||
if localVarHTTPHeaderAccept != "" {
|
||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||
}
|
||
// body params
|
||
localVarPostBody = r.updateOrderStatusRequest
|
||
if r.ctx != nil {
|
||
// API Key Authentication
|
||
if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
|
||
if apiKey, ok := auth["ApiKey"]; ok {
|
||
var key string
|
||
if apiKey.Prefix != "" {
|
||
key = apiKey.Prefix + " " + apiKey.Key
|
||
} else {
|
||
key = apiKey.Key
|
||
}
|
||
localVarHeaderParams["Api-Key"] = key
|
||
}
|
||
}
|
||
}
|
||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||
if err != nil {
|
||
return localVarReturnValue, nil, err
|
||
}
|
||
|
||
localVarHTTPResponse, err := a.client.callAPI(req)
|
||
if err != nil || localVarHTTPResponse == nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
|
||
localVarHTTPResponse.Body.Close()
|
||
localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
|
||
if err != nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
if localVarHTTPResponse.StatusCode >= 300 {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: localVarHTTPResponse.Status,
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 400 {
|
||
var v ApiClientDataErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 401 {
|
||
var v ApiUnauthorizedErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 403 {
|
||
var v ApiForbiddenErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 404 {
|
||
var v ApiNotFoundErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 420 {
|
||
var v ApiLimitErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 500 {
|
||
var v ApiServerErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: err.Error(),
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
return localVarReturnValue, localVarHTTPResponse, nil
|
||
}
|
||
|
||
type OrdersAPIUpdateOrderStatusesRequest struct {
|
||
ctx context.Context
|
||
ApiService *OrdersAPIService
|
||
campaignId int64
|
||
updateOrderStatusesRequest *UpdateOrderStatusesRequest
|
||
}
|
||
|
||
func (r OrdersAPIUpdateOrderStatusesRequest) UpdateOrderStatusesRequest(updateOrderStatusesRequest UpdateOrderStatusesRequest) OrdersAPIUpdateOrderStatusesRequest {
|
||
r.updateOrderStatusesRequest = &updateOrderStatusesRequest
|
||
return r
|
||
}
|
||
|
||
func (r OrdersAPIUpdateOrderStatusesRequest) Execute() (*UpdateOrderStatusesResponse, *http.Response, error) {
|
||
return r.ApiService.UpdateOrderStatusesExecute(r)
|
||
}
|
||
|
||
/*
|
||
UpdateOrderStatuses Изменение статусов нескольких заказов
|
||
|
||
{% include notitle [:no-translate[access]](../../_auto/method_scopes/updateOrderStatuses.md) %}
|
||
|
||
Изменяет статусы нескольких заказов.
|
||
|
||
Возможные изменения статусов:
|
||
|
||
* Если магазин подтвердил и подготовил заказ к отправке, то заказ из статуса `"status": "PROCESSING"`и этапа обработки `"substatus": "STARTED"` нужно перевести в статус `"status": "PROCESSING"` и этап обработки `"substatus": "READY_TO_SHIP"`.
|
||
* Если магазин подтвердил заказ, но не может его выполнить (например, товар числится в базе, но отсутствует на складе или нет нужного цвета), то заказ из статуса `"status": "PROCESSING"` и этапа обработки `"substatus": "STARTED"` нужно перевести в статус `"status": "CANCELLED"` с причиной отмены заказа `"substatus": "SHOP_FAILED"`.
|
||
* Если магазин подготовил заказ к отгрузке, но не может его выполнить (например, последний товар был поврежден или оказался с браком), то заказ из статуса `"status": "PROCESSING"` и этапа обработки `"substatus": "READY_TO_SHIP"` нужно перевести в статус `"status": "CANCELLED"` с причиной отмены заказа `"substatus": "SHOP_FAILED"`.
|
||
|
||
|**:no-translate[⚙️] Лимит:** 100 000 заказов в час|
|
||
|-|
|
||
|
||
@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||
@param campaignId Идентификатор кампании. Его можно узнать с помощью запроса [:no-translate[GET campaigns]](:no-translate[../../reference/campaigns/getCampaigns.md]) или найти в кабинете продавца на Маркете — нажмите на название своего бизнеса и перейдите на страницу: * **Модули и :no-translate[API]** → блок **Передача данных Маркету**. * **Лог запросов** → выпадающий список в блоке **Показывать логи**. ⚠️ Не передавайте вместо него идентификатор магазина, который указан в кабинете продавца на Маркете рядом с названием магазина и в некоторых отчетах.
|
||
@return OrdersAPIUpdateOrderStatusesRequest
|
||
*/
|
||
func (a *OrdersAPIService) UpdateOrderStatuses(ctx context.Context, campaignId int64) OrdersAPIUpdateOrderStatusesRequest {
|
||
return OrdersAPIUpdateOrderStatusesRequest{
|
||
ApiService: a,
|
||
ctx: ctx,
|
||
campaignId: campaignId,
|
||
}
|
||
}
|
||
|
||
// Execute executes the request
|
||
//
|
||
// @return UpdateOrderStatusesResponse
|
||
func (a *OrdersAPIService) UpdateOrderStatusesExecute(r OrdersAPIUpdateOrderStatusesRequest) (*UpdateOrderStatusesResponse, *http.Response, error) {
|
||
var (
|
||
localVarHTTPMethod = http.MethodPost
|
||
localVarPostBody interface{}
|
||
formFiles []formFile
|
||
localVarReturnValue *UpdateOrderStatusesResponse
|
||
)
|
||
|
||
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "OrdersAPIService.UpdateOrderStatuses")
|
||
if err != nil {
|
||
return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
|
||
}
|
||
|
||
localVarPath := localBasePath + "/campaigns/{campaignId}/orders/status-update"
|
||
localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
|
||
|
||
localVarHeaderParams := make(map[string]string)
|
||
localVarQueryParams := url.Values{}
|
||
localVarFormParams := url.Values{}
|
||
if r.campaignId < 1 {
|
||
return localVarReturnValue, nil, reportError("campaignId must be greater than 1")
|
||
}
|
||
if r.updateOrderStatusesRequest == nil {
|
||
return localVarReturnValue, nil, reportError("updateOrderStatusesRequest is required and must be specified")
|
||
}
|
||
|
||
// to determine the Content-Type header
|
||
localVarHTTPContentTypes := []string{"application/json"}
|
||
|
||
// set Content-Type header
|
||
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
|
||
if localVarHTTPContentType != "" {
|
||
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
|
||
}
|
||
|
||
// to determine the Accept header
|
||
localVarHTTPHeaderAccepts := []string{"application/json"}
|
||
|
||
// set Accept header
|
||
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
|
||
if localVarHTTPHeaderAccept != "" {
|
||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||
}
|
||
// body params
|
||
localVarPostBody = r.updateOrderStatusesRequest
|
||
if r.ctx != nil {
|
||
// API Key Authentication
|
||
if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
|
||
if apiKey, ok := auth["ApiKey"]; ok {
|
||
var key string
|
||
if apiKey.Prefix != "" {
|
||
key = apiKey.Prefix + " " + apiKey.Key
|
||
} else {
|
||
key = apiKey.Key
|
||
}
|
||
localVarHeaderParams["Api-Key"] = key
|
||
}
|
||
}
|
||
}
|
||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||
if err != nil {
|
||
return localVarReturnValue, nil, err
|
||
}
|
||
|
||
localVarHTTPResponse, err := a.client.callAPI(req)
|
||
if err != nil || localVarHTTPResponse == nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
|
||
localVarHTTPResponse.Body.Close()
|
||
localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
|
||
if err != nil {
|
||
return localVarReturnValue, localVarHTTPResponse, err
|
||
}
|
||
|
||
if localVarHTTPResponse.StatusCode >= 300 {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: localVarHTTPResponse.Status,
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 400 {
|
||
var v ApiClientDataErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 401 {
|
||
var v ApiUnauthorizedErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 403 {
|
||
var v ApiForbiddenErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 404 {
|
||
var v ApiNotFoundErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 420 {
|
||
var v ApiLimitErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
if localVarHTTPResponse.StatusCode == 500 {
|
||
var v ApiServerErrorResponse
|
||
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr.error = err.Error()
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
|
||
newErr.model = v
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||
if err != nil {
|
||
newErr := &GenericOpenAPIError{
|
||
body: localVarBody,
|
||
error: err.Error(),
|
||
}
|
||
return localVarReturnValue, localVarHTTPResponse, newErr
|
||
}
|
||
|
||
return localVarReturnValue, localVarHTTPResponse, nil
|
||
}
|