Определение способа или тарифа доставки в EasyPost

Итак, у меня есть следующий код в одном файле. Это только частичный код от EasyPost API быстрой доставки

$created_rates = \EasyPost\Rate::create($shipment);

$availableRates = array();

foreach($created_rates as $rate){

    $fedexR = str_replace("FEDEX_", " ", $rate->service);

    $displayS = str_replace("_", " ", $fedexR);

    $displayP = $rate->rate;

    $availableRates[] = $displayS;

}

$_SESSION['displayRates'] = $availableRates;

Затем он отправляет пользователя на следующий шаг в выборе способа доставки, они отображаются так:

<?php foreach($_SESSION['displayRates'] as $rate): ?>
     <option value="<?php echo $rate; ?>"><?php echo $rate; ?></option>
<?php endforeach; ?>

Это соответствует следующей странице:

$_SESSION['shipping_method'] = $_POST['shippingRate'];

$shipment = \EasyPost\Shipment::retrieve(array('id' => $_SESSION['shipment_id']));

$shipment->buy($shipment->rates[1]);

$_SESSION['shipment_label_url'] = $shipment->postage_label->label_url;

echo $_SESSION['shipment_label_url'];

Как отправить выбранный тариф за доставку с помощью EasyPost API, чтобы сообщить ему о необходимости оплаты почтовых расходов для этого метода доставки? я вижу

$shipment->buy($shipment->rates[1]);

И я попытался сделать это:

$shipment->buy($shipment->rates[$_SESSION['shipping_method']]); Но в результате ставка не отправляется вообще.

Кстати, сессия - это фактическое слово типа "ЗЕМЛЯ", а не число. Не уверен, как мне этого добиться, но я должен, если я хочу, чтобы это сработало вообще!

2 ответа

Поставка имеет фильтр тарифов, который называется low_rate. Вы можете передать ему аргументы, такие как имя оператора и название услуги. Что-то вроде:

$shipment->buy($shipment->lowest_rate(array('Fedex'), array($_SESSION['shipping_method'])));

Сначала вам нужно изменить способ вывода <option value="<?php echo $rate; ?>"><?php echo $rate; ?></option>

это должно быть больше похоже на <option value="<?php echo $rate[id]; ?>"><?php echo $rate[rate].' '.$displayS; ?></option>

Вам понадобится этот тариф [id], чтобы купить этикетку доставки, как это

$shipment->buy(array('rate'=>array('id'=>$_POST[rate_id])));

и тогда вы можете сделать это:

<img src="<?php echo $shipment->postage_label->label_url; ?>">

Другие вопросы по тегам