177 lines
9.3 KiB
Go
177 lines
9.3 KiB
Go
|
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)
|
|||
|
}
|