/** * TransOpenApiAct::act_fixCarrierShipFeeByCode() * 根据运输方式简码计算运费 * @param string $carrierAbb 简码名称 * @param string $country 国家 * @param float $weight 重量 * @param string $postCode 邮政编码(预留) * @param string $transitId 转运中心ID(预留) * @return array; */ public function act_fixCarrierShipFeeByCode($carrierAbb = '', $country = '', $weight = 0, $postCode = '', $transitId = 0) { $carrierAbb = isset($_REQUEST['carrierAbb']) ? post_check($_REQUEST['carrierAbb']) : $carrierAbb; $country = isset($_REQUEST['country']) ? rawurldecode(trim($_REQUEST['country'])) : $country; $weight = isset($_REQUEST['weight']) ? abs(floatval($_REQUEST['weight'])) : $weight; $postCode = isset($_REQUEST['postCode']) ? trim($_REQUEST['postCode']) : $postCode; $transitId = isset($_REQUEST['transitId']) ? abs(intval($_REQUEST['transitId'])) : $transitId; if (empty($carrierAbb)) { self::$errCode = 10000; self::$errMsg = '运输方式简码参数有误!'; return false; } $res = TransOpenApiModel::getCarrierByAbb($carrierAbb); $carrierId = isset($res['id']) ? intval($res['id']) : 0; if (empty($carrierId)) { self::$errCode = 10001; self::$errMsg = '运输方式简码不存在!'; return false; } if (empty($country)) { self::$errCode = 10002; self::$errMsg = '国家参数有误!'; return false; } if (empty($weight)) { self::$errCode = 10003; self::$errMsg = '重量参数有误!'; return false; } $shipfee = 0; $data = array(); $data['postCode'] = $postCode; //获取邮编如果有 $data['transitId'] = $transitId; //获取转运中心ID如果有 if (!in_array($carrierId, array(1, 2, 3, 4, 5, 6, 8, 9, 10, 62, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 91, 92, 93, 95, 96, 97, 98))) { self::$errCode = 10001; self::$errMsg = '不支持运费计算的运输方式简码!'; return false; } $shipfeeobj = new ShipfeeQueryModel(); //小语种国家转标准国家 $stdcountry = $shipfeeobj->translateMinorityLangToStd($country); if (empty($stdcountry)) { $stdcountry = $country; } else { $stdcountry = $stdcountry['countryName']; } //标准国家转运输方式国家 $shcountryname = $shipfeeobj->translateStdCountryNameToShipCountryName($stdcountry, $carrierId); //某个运输方式下所有渠道信息 $channel = $shipfeeobj->getChannelInfo($carrierId); $minship = 0; $res = array(); //返回最优的(运输方式ID、渠道ID、折后价、折扣、原价) foreach ($channel as $v) { $shipfee = $shipfeeobj->calculateShipfee($v['channelAlias'], $weight, $shcountryname, $data); if ($shipfee['fee'] < $minship && !empty($shipfee['fee']) || empty($minship)) { $minship = empty($shipfee['fee']) ? 0 : $shipfee['fee']; $res['discount'] = empty($shipfee['discount']) ? 0 : $shipfee['discount']; $res['fee'] = $minship; $res['channelId'] = $v['id']; $res['totalFee'] = empty($shipfee['totalfee']) ? 0 : $shipfee['totalfee']; $res['level'] = empty($shipfee['level']) ? '' : $shipfee['level']; $res['exRate'] = empty($shipfee['exRate']) ? '' : $shipfee['exRate']; $res['country'] = $shcountryname; } } $rtn = array('fee' => $res['fee'], 'channelId' => $res['channelId'], 'discount' => $res['discount'], 'carrierId' => $carrierId, 'totalFee' => $res['totalFee'], 'country' => $res['country'], 'level' => $res['level'], 'exRate' => $res['exRate']); //增加接口调用日志 $logFile = WEB_PATH . "log/fixShipFee/" . date('Y') . "/" . date('m') . "/" . date('Y-m-d') . ".abb.log"; $log = date('Y-m-d H:i:s') . "==={$carrierAbb}==={$carrierId}==={$country}==={$weight}==={$postCode}==={$transitId}===" . json_encode($rtn) . "\n"; if (function_exists('write_a_file')) { @write_a_file($logFile, $log); } return $rtn; }