Определение способа или тарифа доставки в 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; ?>">