Example #1
0
 /**
  * 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;
 }