']; const SHOW_PRICE_DOM=['','']; const NAME_DOM=['','']; const MANUFACTURER_NAME_DOM=['','']; const COUNTRY_CODE_DOM=['','']; const TERM_VALIDITY_DOM=['','']; const SPEC_DESC_DOM=['','']; const RETAIL_NUM_DOM=['','']; const ENTIRETY_NUM_DOM=['','']; const RETAIL_FLAG_DOM=['','']; const STOCK_NUM_DOM=['','']; const DRUG_FORM_DOM=['','']; const BATCH_NUMBER_DOM=['','']; const PC_CONTENT_DOM=['',' ']; const IMG_DOM=["makeLogin(); //return array_rand(Cache::get('SYSTEM_CONSTANT')['EXTEND_PLAT_USER_DATA']); $send_param=[]; $send_param['pageIndex']=$data['now_page']??1; $search_words=$data['search_words']??''; $send_param['keys']=htmlspecialchars($search_words); //exit($send_param['keys']); $send_param['Lx']=3; $send_param['jg']=$data['price_order']??''; $send_param['isck']=$data['retail_flag']??''; $send_param['xqid']=$data['term_validity_type']??0; //20190926 新增参数 $send_param['FGSID']=''; list($usec, $sec) = explode(" ", microtime()); //$time = (int)(((float)$usec + (float)$sec) * 1000); $time = (float)sprintf('%.0f',(floatval($usec)+floatval($sec))*1000); $send_param['_'] = $time; $search_url = self::SEARCH_URL.'?'.http_build_query($send_param); //return $search_url; //return $need_price; //return curlCookie($search_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false); //return Cache::get('HY_LOGIN_COOKIE'); if ($need_price) { //登录状态设置cookie $response=curlCookie($search_url,[],[],0,Cache::get('HY_LOGIN_COOKIE')??[],false); } else { $response=curlCookie($search_url,[],[],0,'',false); } //return $response; $json_value=$this->dealData($response); //return $json_value; if ($need_price) { if (isset($json_value['data'][0]) && isset($json_value['data'][0]['DJ']) && ($json_value['data'][0]['DJ'] == '会员可查')) { //说明没有初始化登录,再做一次登录 if ($this->makeLogin()) { $response=curlCookie($search_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false); $json_value=$this->dealData($response); if (isset($json_value['data'][0]) && isset($json_value['data'][0]['DJ']) && ($json_value['data'][0]['DJ'] == '会员可查')) { //还是读不到价格的话,给空数据 $json_value=$this->emptyResult(); } } else { $json_value=$this->emptyResult(); } } } return $json_value; } private function dealData($response) { $json_value=json_decode($response,true); if (!isset($json_value['total'])) { $json_value['total']=[]; $json_value['total']['record']=0; $json_value['total']['pcount']=0; } if (isset($json_value['data'])) { $data_value=json_decode($json_value['data'],true); } else { $data_value=[]; } if (isset($data_value['tables'])) { //处理中包装数量可能存在字符串问题 foreach ($data_value['tables'] as $k=>$v) { if (isset($v['ZBZ'])) { $data_value['tables'][$k]['ZBZ'] =(int)$v['ZBZ']; } if (isset($v['BZ'])) { $data_value['tables'][$k]['BZ'] =(int)$v['BZ']; } } //-- $json_value['data']=$data_value['tables']; } else { $json_value['data']=[]; } return $json_value; } private function emptyResult() { $json_value['total']=[]; $json_value['total']['record']=0; $json_value['total']['pcount']=0; $json_value['data']=[]; return $json_value; } //单个药品详情 //$need_price是否需要读取价格 //$only_price是否只需要读取价格 public function detail($data,$need_price=true,$only_price=false) { $send_param=[]; $extend_goods_id=$data['extend_goods_id']??''; if ($extend_goods_id=='') { return false; } $send_param['Drugid']=$extend_goods_id; $detial_url = self::DETAIL_URL.'?'.http_build_query($send_param); if ($need_price) { $response=curlCookie($detial_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false); } else { $response=curlCookie($detial_url,[],[],0,'',false); } $price=getBetween($response,self::PRICE_DOM[0],self::PRICE_DOM[1]); if ($price===false) { return false; } $result['can_show'] = 0; if ($need_price) { $result['can_show'] = 1; if ($price['value'] == '会员可查') { //说明没有初始化登录,再做一次登录 if ($this->makeLogin()) { $response=curlCookie($detial_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false); $price=getBetween($response,self::PRICE_DOM[0],self::PRICE_DOM[1]); if ($price===false) { return false; } if ($price['value'] == '会员可查') { return false; } } else { return false; } } } $result['extend_goods_id']=$extend_goods_id; //7.3号价格放大0.01 by tianyihao //$result['price']=$price['value']; //$result['price'] = @number_format(($price['value']+$price['value']*0.05),2,'.',''); $result['price'] = @number_format($price['value'],2,'.',''); //库存都要 $stock_num=getBetween($response,self::STOCK_NUM_DOM[0],self::STOCK_NUM_DOM[1]); if ($stock_num['value']=='充足') { $result['stock_num']='99999'; } else { $result['stock_num']=$stock_num['value']; } //由于存在折扣价,价格处理部分放到前端处理 if (!$only_price) { //根据具体需求,取其他的详细信息 //图片 $gallery=getMutiBetween($response,self::IMG_DOM[0],self::IMG_DOM[1]); foreach ($gallery as $k=>$v) { $gallery[$k]=self::EXTEND_SITE_URL.'/uploadpic/400'.$v; } $result['gallery']=$gallery; //建议零售价和单位 $show_price=getBetween($response,self::SHOW_PRICE_DOM[0],self::SHOW_PRICE_DOM[1]); $tmp_show_price=explode('元/',$show_price['value']); $result['show_price']=number_format($tmp_show_price[0],2,'.',''); $result['unit']=$tmp_show_price[1]; if ($result['show_price']) { $tmp_price=explode('.',$result['show_price']); $result['show_price_int'] = $tmp_price[0]; $result['show_price_float'] = $tmp_price[1]; } else { $result['show_price_int']='0'; $result['show_price_float']='00'; } //商品名称 $name=getBetween($response,self::NAME_DOM[0],self::NAME_DOM[1]); $result['name']=$name['value']; //商品简述先用名称代替 $result['sketch']=$name['value']; //生产厂家 $manufacturer_name=getBetween($response,self::MANUFACTURER_NAME_DOM[0],self::MANUFACTURER_NAME_DOM[1]); $result['manufacturer_name']=$manufacturer_name['value']; //国药准字 $country_code=getBetween($response,self::COUNTRY_CODE_DOM[0],self::COUNTRY_CODE_DOM[1]); $result['country_code']=$country_code['value']; //有效期 $term_validity=getBetween($response,self::TERM_VALIDITY_DOM[0],self::TERM_VALIDITY_DOM[1]); $result['term_validity']=$term_validity['value']; //规格 $spec_desc=getBetween($response,self::SPEC_DESC_DOM[0],self::SPEC_DESC_DOM[1]); $result['spec_desc']=$spec_desc['value']; //中包装 $retail_num=getBetween($response,self::RETAIL_NUM_DOM[0],self::RETAIL_NUM_DOM[1]); $result['retail_num']=(int)$retail_num['value']; //大包装 $entirety_num=getBetween($response,self::ENTIRETY_NUM_DOM[0],self::ENTIRETY_NUM_DOM[1]); $result['entirety_num']=(int)$entirety_num['value']; //整零 $retail_flag=getBetween($response,self::RETAIL_FLAG_DOM[0],self::RETAIL_FLAG_DOM[1]); if ($retail_flag['value']=='零') { $result['retail_flag']=0; } else { $result['retail_flag']=1; } //库存 /*$stock_num=getBetween($response,self::STOCK_NUM_DOM[0],self::STOCK_NUM_DOM[1]); if ($stock_num['value']=='充足') { $result['stock_num']='99999+'; } else { $result['stock_num']=$stock_num['value']; }*/ //剂型 $drug_form=getBetween($response,self::DRUG_FORM_DOM[0],self::DRUG_FORM_DOM[1]); $result['drug_form']=$drug_form['value']; //批号 $batch_number=getBetween($response,self::BATCH_NUMBER_DOM[0],self::BATCH_NUMBER_DOM[1]); $result['batch_number']=$batch_number['value']; //详情介绍 $pc_content=getBetween($response,self::PC_CONTENT_DOM[0],self::PC_CONTENT_DOM[1]); $result['pc_content']=preg_replace("/]*>(.*?)<\/a>/is", "$1", $pc_content['value']); //-- } return $result; } //api专用-仅更新价格 public function apiPriceDetail($data,$need_price=true) { $send_param=[]; $extend_goods_id=$data['extend_goods_id']??''; if ($extend_goods_id=='') { return false; } $send_param['Drugid']=$extend_goods_id; $detial_url = self::DETAIL_URL.'?'.http_build_query($send_param); if ($need_price) { $response=curlCookie($detial_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false); } else { $response=curlCookie($detial_url,[],[],0,'',false); } $price=getBetween($response,self::PRICE_DOM[0],self::PRICE_DOM[1]); if ($price===false) { return false; } $result['can_show'] = 0; if ($need_price) { $result['can_show'] = 1; if ($price['value'] == '会员可查') { //说明没有初始化登录,再做一次登录 if ($this->makeLogin()) { $response=curlCookie($detial_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false); $price=getBetween($response,self::PRICE_DOM[0],self::PRICE_DOM[1]); if ($price===false) { return false; } if ($price['value'] == '会员可查') { return false; } } else { return false; } } } $result['extend_goods_id']=$extend_goods_id; $result['price'] = ceil($price['value']*100)/100; return $result['price']; } /** * hy商品下单时校验库存+价格;$extend_goods_id:hy商品id对应ydyd_goods_batch表supplier_sn字段 * @param string $extend_goods_id * @param bool $check_more * @return array|bool * 默认校验价格+库存,支持校验更多字段 * by dingchao 20200514 */ public function checkHyGoods($extend_goods_id='',$check_more = false){ $send_param=[]; if ($extend_goods_id=='') { return false; } $send_param['Drugid']=$extend_goods_id; $detial_url = self::DETAIL_URL.'?'.http_build_query($send_param); $response=curlCookie($detial_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false); $price=getBetween($response,self::PRICE_DOM[0],self::PRICE_DOM[1]); if ($price===false) { return false; } //注意同步hy官网显示文字变更;旧版:$price['value']== '会员可查' if (!is_numeric($price['value'])) { //说明没有初始化登录,再做一次登录 if ($this->makeLogin()) { $response=curlCookie($detial_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false); $price=getBetween($response,self::PRICE_DOM[0],self::PRICE_DOM[1]); if ($price===false) { return false; } if (!is_numeric($price['value'])) { return false; } } else { return false;//登录失败 } } $result['extend_goods_id']=$extend_goods_id; $result['price'] = ceil($price*100)/100; //库存 $stock_num=getBetween($response,self::STOCK_NUM_DOM[0],self::STOCK_NUM_DOM[1]); //old-version:$stock_num['value']=='充足' if (!is_numeric($stock_num['value'])) { $result['stock_num']='99999'; } else { $result['stock_num']=$stock_num['value']; } //根据具体需求,取其他的详细信息 if ($check_more){ $more = $this->checkMoreInfo($response); if ($result){ $result = array_merge($result,$more); } } return $result; } public function checkMoreInfo($response=[]){ if ($response){ //图片 $gallery=getMutiBetween($response,self::IMG_DOM[0],self::IMG_DOM[1]); foreach ($gallery as $k=>$v) { $gallery[$k]=self::EXTEND_SITE_URL.'/uploadpic/400'.$v; } $result['gallery']=$gallery; //建议零售价和单位 $show_price=getBetween($response,self::SHOW_PRICE_DOM[0],self::SHOW_PRICE_DOM[1]); $tmp_show_price=explode('元/',$show_price['value']); $result['show_price']=number_format($tmp_show_price[0],2,'.',''); $result['unit']=$tmp_show_price[1]; if ($result['show_price']) { $tmp_price=explode('.',$result['show_price']); $result['show_price_int'] = $tmp_price[0]; $result['show_price_float'] = $tmp_price[1]; } else { $result['show_price_int']='0'; $result['show_price_float']='00'; } //商品名称 $name=getBetween($response,self::NAME_DOM[0],self::NAME_DOM[1]); $result['name']=$name['value']; //商品简述先用名称代替 $result['sketch']=$name['value']; //生产厂家 $manufacturer_name=getBetween($response,self::MANUFACTURER_NAME_DOM[0],self::MANUFACTURER_NAME_DOM[1]); $result['manufacturer_name']=$manufacturer_name['value']; //国药准字 $country_code=getBetween($response,self::COUNTRY_CODE_DOM[0],self::COUNTRY_CODE_DOM[1]); $result['country_code']=$country_code['value']; //有效期 $term_validity=getBetween($response,self::TERM_VALIDITY_DOM[0],self::TERM_VALIDITY_DOM[1]); $result['term_validity']=$term_validity['value']; //规格 $spec_desc=getBetween($response,self::SPEC_DESC_DOM[0],self::SPEC_DESC_DOM[1]); $result['spec_desc']=$spec_desc['value']; //中包装 $retail_num=getBetween($response,self::RETAIL_NUM_DOM[0],self::RETAIL_NUM_DOM[1]); $result['retail_num']=(int)$retail_num['value']; //大包装 $entirety_num=getBetween($response,self::ENTIRETY_NUM_DOM[0],self::ENTIRETY_NUM_DOM[1]); $result['entirety_num']=(int)$entirety_num['value']; //整零 $retail_flag=getBetween($response,self::RETAIL_FLAG_DOM[0],self::RETAIL_FLAG_DOM[1]); if ($retail_flag['value']=='零') { $result['retail_flag']=0; } else { $result['retail_flag']=1; } //剂型 $drug_form=getBetween($response,self::DRUG_FORM_DOM[0],self::DRUG_FORM_DOM[1]); $result['drug_form']=$drug_form['value']; //批号 $batch_number=getBetween($response,self::BATCH_NUMBER_DOM[0],self::BATCH_NUMBER_DOM[1]); $result['batch_number']=$batch_number['value']; //详情介绍 $pc_content=getBetween($response,self::PC_CONTENT_DOM[0],self::PC_CONTENT_DOM[1]); $result['pc_content']=preg_replace("/]*>(.*?)<\/a>/is", "$1", $pc_content['value']); }else{ $result = false; } return $result; } }