0) { $province = $areas[0]; $endtxts= ["省","市","自治区","特别行政区"]; foreach ($endtxts as $endtxt) { if(strpos($province, $endtxt) === false) { continue; } else { $province = mb_strcut($province, 0, strrpos($province, $endtxt)); } } if(array_key_exists($province,Prov2Noes)) { return Prov2Noes[$province]; } } return -1; }; $ali = function ($card_no, &$region_no, &$status) use ($regin_checker): bool { $url = 'https://mobileempty.shumaidata.com/mobileempty'; $params['mobile'] = $card_no; $headers = ["Authorization:APPCODE " . '8f92d951293f4d2ea48ff86d5a70c537']; $net_err = 0; $resp = http_request($url, $params, 'GET', false, $headers,$net_err); if ($resp == false) return false; $resp = json_decode($resp, true); if ($resp == false) return false; if ($resp['code'] == 200) { $data = $resp['data']; $status = intval($data['status']); $region_no = $regin_checker($data['area']); return true; } else { Log::record("ali_valid phone:{$card_no} return msg:{$resp['msg']}", Log::DEBUG); return false; } }; $tianyan = function ($card_no, &$region_no, &$status) use ($regin_checker): bool { $url = 'https://api.shumaidata.com/v4/mobile_empty/check'; $appid = '2Xfa6IFIPv0sVUjy'; $appSecurity = '2Xfa6IFIPv0sVUjynOddsfh6KXfbyJ84'; $cur = microtime (true); $data['appid'] = $appid; $data['timestamp'] = intval($cur * 1000); $content = "{$appid}&{$data['timestamp']}&{$appSecurity}"; $data['sign'] = md5($content); $data['mobile'] = $card_no; $net_err = 0; $resp = http_request($url, $data, 'GET',false, [],$net_err); if ($resp == false) return false; $resp = json_decode($resp, true); if ($resp == false) return false; if ($resp['code'] == 200) { $data = $resp['data']; $status = intval($data['status']); $region_no = $regin_checker($data['area']); return true; } else { Log::record("tianyan_valid phone:{$card_no} return msg:{$resp['msg']}", Log::DEBUG); return false; } }; $tianyan_cardtyper = function ($card_no) use ($type_checker) { $url = 'https://api.shumaidata.com/v4/mobile-transfer/query'; $appid = '2Xfa6IFIPv0sVUjy'; $appSecurity = '2Xfa6IFIPv0sVUjynOddsfh6KXfbyJ84'; $cur = microtime (true); $data['appid'] = $appid; $data['timestamp'] = intval($cur * 1000); $content = "{$appid}&{$data['timestamp']}&{$appSecurity}"; $data['sign'] = md5($content); $data['mobile'] = $card_no; $net_err = 0; $resp = http_request($url, $data, 'GET',false, [],$net_err); if ($resp == false) return [false,UnknownCard,UnknownCard,false]; $resp = json_decode($resp, true); if ($resp == false) return [false,UnknownCard,UnknownCard,false]; if ($resp['code'] == 200) { $data = $resp['data']; $ispType = $data['ispType']; $newIspType = $data['newIspType']; $card_type = $type_checker($newIspType); $org_type = $type_checker($ispType); $isTransfer = $org_type != $card_type; Log::record("tianyan_transfer phone:{$card_no} card_type={$card_type} ispType:{$ispType} newIspType:{$newIspType}", Log::DEBUG); return [true,$card_type,$org_type,$isTransfer]; } else { Log::record("tianyan_transfer phone:{$card_no} return msg:{$resp['msg']}", Log::DEBUG); return [false,UnknownCard,UnknownCard,false]; } }; //////////////////////////////////////////////////////////////////////////////////////////////////////////////// [$succ,$_card_type,$_org_type,$_isTransfer] = $tianyan_cardtyper($card_no); if($succ) { $card_type = $_card_type; $org_type = $_org_type; $isTransfer = $_isTransfer; } else { $isTransfer = false; $card_type = card_type($card_no,$region_no); } $status = 6; $ret = $tianyan($card_no, $region_no, $status); if ($ret) { return [true, $card_type, $region_no, $isTransfer, $status]; } $ret = $ali($card_no, $region_no, $status); if ($ret) { return [true, $card_type, $region_no, $isTransfer, $status]; } return [false, $card_type, -1, false, $status]; } //[$validate,$card_type,$region_no,$isTransfer,$status,$black] public function validate($card_no) { $time_checker = function ($info) { $update_time = $info['update_time']; $delta = time() - intval($update_time); $status = intval($info['card_state']); if(in_array($status,[0,5]) && $delta > 86400 * 15) { return false; } else { return $delta < 360 * 86400 && $delta >= 0; } }; $pinfo_getter = function ($card_no) use ($time_checker) { $mod_card = Model('card_info'); $info = $mod_card->getCardInfo($card_no); if(empty($info)) { return [false,[]]; } elseif($time_checker($info)) { $mod_card->where(['card_no' => $card_no])->update(['using_times' => $info['using_times'] + 1]); $card_type = intval($info['card_type']); $region_no = intval($info['regin']); $isTransfer = !(intval($info['transfer']) == 0); $status = intval($info['card_state']); $black = intval($info['black']); $validate = $this->validate_checker($status); $result = [$validate,$card_type,$region_no,$isTransfer,$status,$black]; return [true,$result]; } else { return [false,[]]; } }; $pinfo_updator = function ($card_no,$card_type,$org_type,$region_no,$isTransfer,$status) { $mod_card = Model('card_info'); $transfer = $isTransfer == true ? 1 : 0; $mod_card->replace_card($card_no,$card_type,$org_type,$region_no,$transfer,$status); }; //////////////////////////////////////////////////////////////////////////////////////////////////////////////// $validate = true; $black = 0; $org_type = card_type($card_no,$region_no); $region_no = -1; if($org_type === UnknownCard) { return [false, $org_type, $region_no, false, 1, $black]; } if($org_type == PetroChinaCard || $org_type == SinopecCard) { return [$validate, $org_type, $region_no, false, 1, $black]; } [$succ,$result] = $pinfo_getter($card_no); if($succ) return $result; [$succ, $card_type, $region_no, $isTransfer, $status] = $this->tencent_query($card_no); if ($succ === false) { [$succ, $card_type, $region_no, $isTransfer, $status] = $this->tianyan_query($card_no); if ($succ === false) { return [true, $org_type, -1, false, 1, $black]; } } $validate = $this->validate_checker($status); $pinfo_updator($card_no,$card_type,$org_type,$region_no,$isTransfer,$status); return [$validate,$card_type,$region_no,$isTransfer,$status,$black]; } }