Как установить точку доступа в обёртке ups API?

Я использую оболочку API gabrielbull ups, и она работает нормально, за исключением случаев, когда я хочу добавить точку доступа ИБП; в документации сказано, что я должен объявить «Альтернативный адрес доставки». Затем данные точки доступа должны быть напечатаны на этикетке ИБП, но они не отображаются.

Поскольку на странице оболочки GitHub нет примера для этого случая, я самостоятельно искал методы и нашел один, но у меня такое чувство, что я что-то забыл, поскольку я не получаю никаких ошибок. Я пробовал этот код для конкретной части. Окружающий код аналогичен примеру класса доставки.

$address = new \Ups\Entity\Address();
$address->setAddressLine1($ap_addressline1);
$address->setPostalCode($ap_postal);
$address->setCity($ap_city);
$address->setCountryCode($ap_country);

$alternateTo = new \Ups\Entity\AlternateDeliveryAddress;
$alternateTo->setAddress($address);
$alternateTo->setUpsAccessPointId($ap_id);
$alternateTo->setName($ap_name);
$alternateTo->setAttentionName($ap_name);

$shipment->setAlternateDeliveryAddress($alternateTo);

Редактировать: я получил эту информацию о настройке точки доступа от службы поддержки UPS. Парень сказал мне установить альтернативный адрес с данными AccessPoint, которые будут напечатаны в нижней строке этикетки (там, где они сейчас отсутствуют). Если я что-то не так понял (хотя мы провели видеоконференцию и он показал мне результат) и вы знаете другой способ, не стесняйтесь сказать мне.


person Insomnia88    schedule 14.06.2019    source источник
comment
Какие ошибки вы ожидаете получить, но не получили? Если он работает, вы не должны получить ровно 0 ошибок?   -  person zbee    schedule 07.08.2019
comment
Из некоторых беглых исследований API ИБП единственные упоминания, которые я могу найти об альтернативных адресах, связаны с их проверкой адреса, предоставляющей их в случае, если предоставленный адрес не может быть проверен. Можете ли вы поделиться ошибкой, которую вы получили в первую очередь? Можете ли вы также поделиться документацией, указывающей, что вам нужен альтернативный адрес?   -  person zbee    schedule 07.08.2019
comment
Я не получаю и не ожидаю ошибок - поэтому мне это сложно. Как я уже писал, я хочу напечатать этикетку UPS, и в этом заключаются основные проблемы. Если я добавлю все данные, включая приведенный выше код, с альтернативным адресом и напечатаю переменную $shipment, все будет на своих местах - по крайней мере, насколько я могу судить. НО когда вы печатаете этикетку UPS, часть альтернативного адреса отсутствует. Я разговаривал с сервисным работником UPS, и он сказал мне, что я должен использовать запасной адрес для объявления точки доступа. Затем он будет напечатан в нижней строке этикетки. Но его там нет.   -  person Insomnia88    schedule 11.08.2019
comment
Это долгий путь, потому что я не знаком с API UPS, но просто чтобы проверить, вы выполняете метод setAlternateDeliveryAddress для объекта $shipment, предоставляя то, что выглядит как объект адреса, но вы не делаете ничего подобного с вашим основной $адрес ? Может ли быть так, что альтернативный адрес становится основным адресом, потому что основной адрес не определен в $shipment?   -  person François Huppé    schedule 11.08.2019
comment
Основной адрес определен, я просто не включил весь код. Приведенный выше код — это только часть, которую я установил для точки доступа.   -  person Insomnia88    schedule 11.08.2019
comment
Является ли ваш $ap_id действительным идентификатором?   -  person Moses Schwartz    schedule 13.08.2019
comment
@Моисей Да, это так   -  person Insomnia88    schedule 13.08.2019


Ответы (1)


Хорошо, перечитав официальные документы, я узнал, чего не хватало. Если вы хотите использовать точку доступа в качестве адреса, вам также необходимо установить тип индикации через setShipmentIndicationType. Есть 2 кода: 01 и 02 в зависимости от того, как вы хотите его отправить. Конечно, я не добавил их раньше...

Я еще не закончил его, потому что я получаю некоторые ошибки, но это больше о том, какая информация нужна от меня, и так далее. По крайней мере, я могу работать с этим.

Как я упоминал в своем первом посте, я использовал пример оболочку API в качестве базы и вставьте необходимую часть перед отправкой запроса:

...
// Set Reference Number
...

// this is the part where you set shipment indication type for the accesspoint
$accesspoint = new \Ups\Entity\ShipmentIndicationType;
$accesspoint->setCode(Ups\Entity\ShipmentIndicationType::CODE_HOLD_FOR_PICKUP_ACCESS_POINT); // for "01" 
#$accesspoint->setCode(Ups\Entity\ShipmentIndicationType::CODE_ACCESS_POINT_DELIVERY); // for "02"
$shipment->setShipmentIndicationType($accesspoint);

// Set payment information
...

// Ask for negotiated rates (optional)
...


// Get shipment info
...
person Insomnia88    schedule 13.08.2019
comment
опубликуйте свой код, который поможет другим найти решение этого вопроса. - person Serghei Leonenco; 14.08.2019
comment
Я сделал, но в моем случае это еще не завершено, потому что у меня все еще есть некоторые проблемы с проверкой телефона/электронной почты для альтернативного адреса, указанного выше. Я на связи со службой поддержки ups и добавлю ее позже, когда узнаю больше - person Insomnia88; 14.08.2019