my:
if ($delivery_type == '10') {// 顺丰同城快递配送
$type = 'kuaidi';
// 此接口 不返回运费
$create_order = express::store()->create($address,$products,$merchant_info,$order_model['order_no']);
app()->log->info(['顺丰订单号' => $create_order]);
// 查询运费接口 沙箱返回null
// 订单号
//货物名称
// 详细地址 寄件人地址电话
//收件人地址 电话
// $fee = express::store()->manifestfreightinquiry($order_model['order_no']);
$discounted_distances = array_reduce($free_fee['free_fee'], function ($carry,$item) {
$exploded_distance = explode(',',$item);
$distance_range = explode('-',$exploded_distance[0]);
$min_distance =$distance_range[0];
if(isset($distance_range[1])){
$max_distance = $distance_range[1];
}
$carry[] = [
//距离范围min
'min_distance' => $min_distance,
//距离范围max
'max_distance' => $max_distance ?? '',
'over_price' => $exploded_distance[1],
'price' => $exploded_distance[2]
];
return $carry;
}, []);
$current_distance = $this->getdistance( $free_fee['longitude'], $free_fee['latitude'],$merchant_info['longitude'],$merchant_info['latitude']);
// 用户支付的费用
if($current_distance > $discounted_distances[0]['min_distance'] && $current_distance <= $discounted_distances[0]['max_distance'] ){
// 0-3km
if($total_price > $discounted_distances[0]['over_price']){
$express_price = 0;
}else{
$express_price = $discounted_distances[0]['price'];
}
}else if($current_distance > $discounted_distances[1]['min_distance'] && $current_distance <= $discounted_distances[1]['max_distance'] ){
//3-8km
if($total_price > $discounted_distances[1]['over_price']){
$express_price = 0;
}else{
$express_price = $discounted_distances[1]['price'];
}
}else if($current_distance > $discounted_distances[2]['min_distance'] && $current_distance <= $discounted_distances[2]['max_distance'] ){
//8-20km
if($total_price > $discounted_distances[2]['over_price']){
$express_price = 0;
}else{
$express_price = $discounted_distances[2]['price'];
}
}else if($current_distance > $discounted_distances[3]['min_distance'] && $current_distance <= $discounted_distances[3]['max_distance'] ){
// 20-30km
if($total_price > $discounted_distances[3]['over_price']){
// 20-30 km 满¥198 20配送费
$express_price = $discounted_distances[3]['price'];
}else{
// 20-30 km 满¥198 28 配送费
$express_price = $discounted_distances[2]['price'];
}
}else{
throw new error('不在配送范围内');
}
} else if ($delivery_type == '30'){ // 闪送
// $open_city = $this->openCitiesLists();
// dd($open_city);
if(empty($address['address_info_text'])){
throw new Error('收货地址错误!');
}
$cityName = substr($address['address_info_text'], strpos($address['address_info_text'], '/') + 1, strpos($address['address_info_text'], '/', strpos($address['address_info_text'], '/') + 1) - strpos($address['address_info_text'], '/') - 1)."市";
//订单计费 获取 总距离 m
$issOrder = $this->orderCalculate($address,$order,$products,$cityName,$merchant_info,$free_fee,$order_model['order_no']);
app()->log->info(['闪送订单号' => $issOrder]);
// 闪送订单号
$orderNumber = $issOrder['data']['orderNumber'];
$data['order_number'] = $issOrder['data']['orderNumber'];
// 提交订单 获取闪送 费用 默认为分
$create_order = $this->orderPlace($orderNumber);
$discounted_distances = array_reduce($free_fee['free_fee'], function ($carry,$item) {
$exploded_distance = explode(',',$item);
$distance_range = explode('-',$exploded_distance[0]);
$min_distance =$distance_range[0];
if(isset($distance_range[1])){
$max_distance = $distance_range[1];
}
$carry[] = [
//距离范围min
'min_distance' => $min_distance,
//距离范围max
'max_distance' => $max_distance ?? '',
'over_price' => $exploded_distance[1],
'price' => $exploded_distance[2]
];
return $carry;
}, []);
// 闪送接口返回的距离 单位m
$current_distance = $issOrder['data']['totalDistance'] /1000;
app()->log->info(['闪送返回的距离'=>$current_distance]);
// todo 测试的接口返回的距离41
$current_distance = 2;
// 用户支付的费用
if($current_distance > $discounted_distances[0]['min_distance'] && $current_distance <= $discounted_distances[0]['max_distance'] ){
// 0-3km
if($total_price > $discounted_distances[0]['over_price']){
$express_price = 0;
}else{
$express_price = $discounted_distances[0]['price'];
}
}else if($current_distance > $discounted_distances[1]['min_distance'] && $current_distance <= $discounted_distances[1]['max_distance'] ){
//3-8km
if($total_price > $discounted_distances[1]['over_price']){
$express_price = 0;
}else{
$express_price = $discounted_distances[1]['price'];
}
}else if($current_distance > $discounted_distances[2]['min_distance'] && $current_distance <= $discounted_distances[2]['max_distance'] ){
//8-20km
if($total_price > $discounted_distances[2]['over_price']){
$express_price = 0;
}else{
$express_price = $discounted_distances[2]['price'];
}
}else if($current_distance > $discounted_distances[3]['min_distance'] && $current_distance <= $discounted_distances[3]['max_distance'] ){
// 20-30km
if($total_price > $discounted_distances[3]['over_price']){
// 20-30 km 满¥198 20配送费
$express_price = $discounted_distances[3]['price'];
}else{
// 20-30 km 满¥198 28 配送费
$express_price = $discounted_distances[2]['price'];
}
}else{
throw new Error('不在配送范围内');
}
B:
if ($delivery_type == '10') {// 顺丰同城快递配送
$type = 'kuaidi';
// 此接口 不返回运费
$create_order = express::store()->create($address,$products,$merchant_info,$order_model['order_no']);
$express_price = DeliveryModel::fee($address['city_id'], $pro_num, $pro_weight, $order_price);
} else if ($delivery_type == '30'){ // 闪送
if(empty($address['address_info_text'])){
throw new Error('收货地址错误!');
}
$cityName = substr($address['address_info_text'], strpos($address['address_info_text'], '/') + 1, strpos($address['address_info_text'], '/', strpos($address['address_info_text'], '/') + 1) - strpos($address['address_info_text'], '/') - 1)."市";
//订单计费 获取 总距离 m
$issOrder = $this->orderCalculate($address,$order,$products,$cityName,$merchant_info,$free_fee,$order_model['order_no']);
// 闪送订单号
$orderNumber = $issOrder['data']['orderNumber'];
$data['order_number'] = $issOrder['data']['orderNumber'];
// 提交订单 获取闪送 费用 默认为分
$create_order = $this->orderPlace($orderNumber);
// 闪送接口返回的距离 单位m
$current_distance = $issOrder['data']['totalDistance'] /1000;
// 用户支付的费用
$express_price = false;
$delivery_fee = \app()->dbConfig->get('delivery', []);
uksort($delivery_fee, function ($a,$b) {
return $b['km'] - $a['km'];
});
foreach ($delivery_fee as $item) {
if ($current_distance <= $item['km']) {
$express_price = $data['order_price'] >= $item['free_money'] ? 0 : $item['fee'];
}
}
if ($express_price===false) {
throw new Exception('已超出配送范围,请选择快递下单或联系客服');
}