86 lines
3.9 KiB
Go
86 lines
3.9 KiB
Go
package v2
|
||
|
||
import (
|
||
"bytes"
|
||
"context"
|
||
"encoding/json"
|
||
"fmt"
|
||
"net/http"
|
||
)
|
||
|
||
type OrderUpdateRequest struct {
|
||
// UUID Идентификатор заказа в ИС СДЭК, который нужно изменить (да, если не заполнен cdek_number)
|
||
UUID string `json:"uuid,omitempty"`
|
||
// CdekNumber Номер заказа СДЭК, который нужно изменить (да, если не заполнен uuid)
|
||
CdekNumber string `json:"cdek_number,omitempty"`
|
||
// Код тарифа (режимы старого и нового тарифа должны совпадать)
|
||
TariffCode int `json:"tariff_code,omitempty"`
|
||
// Comment Комментарий к заказу
|
||
Comment string `json:"comment"`
|
||
// ShipmentPoint Код ПВЗ СДЭК, на который будет производится забор отправления либо самостоятельный привоз клиентом. Не может использоваться одновременно с from_location
|
||
ShipmentPoint string `json:"shipment_point,omitempty"`
|
||
// DeliveryPoint Код ПВЗ СДЭК, на который будет доставлена посылка. Не может использоваться одновременно с to_location
|
||
DeliveryPoint string `json:"delivery_point,omitempty"`
|
||
// OrderDeliveryRecipientCost Доп. сбор за доставку, которую ИМ берет с получателя. Валюта сбора должна совпадать с валютой наложенного платежа
|
||
DeliveryRecipientCost Payment `json:"delivery_recipient_cost"`
|
||
// DeliveryRecipientCostAdv Доп. сбор за доставку (которую ИМ берет с получателя) в зависимости от суммы заказа. Только для заказов "интернет-магазин". Возможно указать несколько порогов.
|
||
DeliveryRecipientCostAdv Cost `json:"delivery_recipient_cost_adv"`
|
||
// Sender Отправитель. Обязателен если:
|
||
// нет, если заказ типа "интернет-магазин"
|
||
// да, если заказ типа "доставка"
|
||
Sender RecipientSender `json:"sender,omitempty"`
|
||
// Seller Реквизиты истинного продавца
|
||
Seller Seller `json:"seller,omitempty"`
|
||
// Recipient Получатель
|
||
Recipient RecipientSender `json:"recipient,omitempty"`
|
||
// ToLocation Адрес получения. Не может использоваться одновременно с delivery_point
|
||
ToLocation Location `json:"to_location"`
|
||
// FromLocation Адрес отправления. Не может использоваться одновременно с shipment_point
|
||
FromLocation Location `json:"from_location"`
|
||
// Services Дополнительные услуги
|
||
Services []Service `json:"services,omitempty"`
|
||
// Packages Список информации по местам (упаковкам)
|
||
Packages []Package `json:"packages,omitempty"`
|
||
}
|
||
|
||
type OrderUpdateResponse struct {
|
||
Entity ResponseEntity `json:"entity,omitempty"`
|
||
Requests []ResponseRequests `json:"requests"`
|
||
}
|
||
|
||
func (c *clientImpl) OrderUpdate(ctx context.Context, input *OrderUpdateRequest) (*OrderUpdateResponse, error) {
|
||
payload, err := json.Marshal(input)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
req, err := http.NewRequestWithContext(
|
||
ctx,
|
||
http.MethodPost,
|
||
c.buildUri("/v2/orders", nil),
|
||
bytes.NewReader(payload),
|
||
)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
req.Header.Add("Content-Type", "application/json")
|
||
|
||
accessToken, err := c.getAccessToken(ctx)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", accessToken))
|
||
|
||
resp, err := jsonReq[OrderUpdateResponse](req)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
if err := validateResponse(resp.Requests); err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
return resp, nil
|
||
}
|