relynolli-server/CDEK/v2/orderUpdate.go

86 lines
3.9 KiB
Go
Raw Permalink Normal View History

2024-05-03 12:02:41 +03:00
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
}