relynolli-server/CDEK/v2/orderStatus.go

177 lines
9.3 KiB
Go
Raw Normal View History

2024-05-03 12:02:41 +03:00
package v2
import (
"context"
"fmt"
"net/http"
)
type OrderStatusFailedCall struct {
// DateTime Дата и время создания недозвона datetime
DateTime string `json:"date_time"`
// ReasonCode Причина недозвона (подробнее см. приложение 5)
ReasonCode int `json:"reason_code"`
}
type OrderStatusRescheduledCall struct {
// DateTime Дата и время создания переноса прозвона
DateTime string `json:"date_time"`
// DateNext Дата, на которую согласован повторный прозвон
DateNext string `json:"date_next"`
// TimeNext Время, на которое согласован повторный прозвон
TimeNext string `json:"time_next"`
// Comment Комментарий к переносу прозвона
Comment string `json:"comment,omitempty"`
}
type OrderStatusCall struct {
// FailedCalls Информация о неуспешных прозвонах (недозвонах)
FailedCalls OrderStatusFailedCall `json:"failed_calls,omitempty"`
// RescheduledCalls Информация о переносах прозвонов
RescheduledCalls OrderStatusRescheduledCall `json:"rescheduled_calls,omitempty"`
}
type OrderStatusDeliveryProblem struct {
// Code Код проблемы (подробнее см. приложение 4) https://api-docs.cdek.ru/29923975.html
Code string `json:"code,omitempty"`
// CreateDate Дата создания проблемы
CreateDate string `json:"create_date,omitempty"`
}
type OrderStatusPaymentInfo struct {
// Type Тип оплаты: CARD - картой, CASH - наличными
Type string `json:"type"`
// Sum Сумма в валюте страны получателя
Sum float64 `json:"sum"`
// DeliverySum Стоимость услуги доставки (по тарифу)
DeliverySum float64 `json:"delivery_sum"`
// TotalSum Итоговая стоимость заказа
TotalSum float64 `json:"total_sum"`
}
type OrderStatusDeliveryDetail struct {
// Date Дата доставки
Date string `json:"date"`
// RecipientName получатель при доставке
RecipientName string `json:"recipient_name"`
// PaymentSum Сумма наложенного платежа, которую взяли с получателя, в валюте страны получателя с учетом частичной доставки
PaymentSum float64 `json:"payment_sum,omitempty"`
// PaymentInfo Тип оплаты наложенного платежа получателем
PaymentInfo []OrderStatusPaymentInfo `json:"payment_info,omitempty"`
// DeliverySum Стоимость услуги доставки (по тарифу)
DeliverySum float64 `json:"delivery_sum"`
TotalSum float64 `json:"total_sum"`
}
type OrderStatusInfo struct {
// Code Код статуса (подробнее см. приложение 1)
Code string `json:"code"`
// Name Название статуса
Name string `json:"name"`
// DateTime Дата и время установки статуса (формат yyyy-MM-dd'T'HH:mm:ssZ)
DateTime string `json:"date_time"`
// ReasonCode Дополнительный код статуса (подробнее см. приложение 2)
ReasonCode string `json:"reason_code,omitempty"`
// City Наименование места возникновения статуса
City string `json:"city"`
}
type OrderStatusEntity struct {
// Uuid Идентификатор заказа в ИС СДЭК
Uuid string `json:"uuid"`
// IsReturn Признак возвратного заказа: true - возвратный, false - прямой
IsReturn bool `json:"is_return"`
// IsReverse Признак реверсного заказа: true - реверсный, false - не реверсный
IsReverse bool `json:"is_reverse"`
// Type Тип заказа: 1 - "интернет-магазин" (только для договора типа "Договор с ИМ"), 2 - "доставка" (для любого договора)
Type int `json:"type"`
// CdekNumber Номер заказа СДЭК
CdekNumber string `json:"cdek_number,omitempty"`
// Number Номер заказа в ИС Клиента. При запросе информации по данному полю возможны варианты:
// - если не передан, будет присвоен номер заказа в ИС СДЭК - uuid;
// - если найдено больше 1, то выбирается созданный с самой последней датой.
// Может содержать только цифры, буквы латинского алфавита или спецсимволы (формат ASCII)
Number string `json:"number,omitempty"`
// DeliveryMode Истинный режим заказа:
// 1 - дверь-дверь
// 2 - дверь-склад
// 3 - склад-дверь
// 4 - склад-склад
// 6 - дверь-постамат
// 7 - склад-постамат
DeliveryMode string `json:"delivery_mode"`
//// TariffCode Код тарифа
//TariffCode int `json:"tariff_code"`
// Comment Комментарий к заказу
Comment string `json:"comment,omitempty"`
// DeveloperKey Ключ разработчика
DeveloperKey string `json:"developer_key,omitempty"`
// ShipmentPoint Код ПВЗ СДЭК, на который будет производиться самостоятельный привоз клиентом
ShipmentPoint string `json:"shipment_point,omitempty"`
// DeliveryPoint Код офиса СДЭК (ПВЗ/постамат), на который будет доставлена посылка
DeliveryPoint string `json:"delivery_point,omitempty"`
// DateInvoice Дата инвойса. Только для международных заказов. date (yyyy-MM-dd)
DateInvoice string `json:"date_invoice,omitempty"`
// ShipperName Грузоотправитель. Только для международных заказов
ShipperName string `json:"shipper_name,omitempty"`
// ShipperAddress Адрес грузоотправителя. Только для международных заказов
ShipperAddress string `json:"shipper_address,omitempty"`
// DeliveryRecipientCost Доп. сбор за доставку, которую ИМ берет с получателя.
DeliveryRecipientCost Payment `json:"delivery_recipient_cost,omitempty"`
// DeliveryRecipientCostAdv Доп. сбор за доставку (которую ИМ берет с получателя), в зависимости от суммы заказа
DeliveryRecipientCostAdv []Cost `json:"delivery_recipient_cost_adv,omitempty"`
// Sender Отправитель
Sender RecipientSender `json:"sender"`
// Seller Реквизиты истинного продавца
Seller Seller `json:"seller,omitempty"`
// Recipient Получатель
Recipient RecipientSender `json:"recipient,omitempty"`
// FromLocation Адрес отправления. Не может использоваться одновременно с shipment_point
FromLocation Location `json:"from_location"`
// ToLocation Адрес получения. Не может использоваться одновременно с delivery_point
ToLocation Location `json:"to_location"`
// ItemsCostCurrency TODO
ItemsCostCurrency string `json:"items_cost_currency"`
// RecipientCurrency TODO
RecipientCurrency string `json:"recipient_currency"`
// Services Дополнительные услуги
Services []Service `json:"services,omitempty"`
// Packages Список информации по местам (упаковкам)
Packages []Package `json:"packages"`
// DeliveryProblem Проблемы доставки, с которыми столкнулся курьер при доставке заказа "до двери"
DeliveryProblem []OrderStatusDeliveryProblem `json:"delivery_problem,omitempty"`
// DeliveryDetail Информация о вручении
DeliveryDetail OrderStatusDeliveryDetail `json:"delivery_detail,omitempty"`
// TransactedPayment Признак того, что по заказу была получена информация о переводе наложенного платежа интернет-магазину
TransactedPayment bool `json:"transacted_payment,omitempty"`
// Statuses Список статусов по заказу, отсортированных по дате и времени
Statuses []OrderStatusInfo `json:"statuses"`
// Calls Информация о прозвонах получателя
Calls []OrderStatusCall `json:"calls,omitempty"`
// @todo ticket SD-735298 - this is not documented but exists in example response https://api-docs.cdek.ru/29923975.html
DeliveryDate string `json:"delivery_date,omitempty"`
ShopSellerName string `json:"shop_seller_name,omitempty"`
}
func (c *clientImpl) OrderStatus(ctx context.Context, uuid string) (*Response, error) {
req, err := http.NewRequestWithContext(
ctx,
http.MethodGet,
c.buildUri(fmt.Sprintf("/v2/orders/%s", uuid), nil),
nil,
)
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))
return jsonReq[Response](req)
}