Appearance
外贸询盘怎么判断客户所在国家?独立站用 IP 归属地自动识别假询盘(附 PHP 实现)
做外贸独立站的都懂这种烦:询盘表单天天有人发 "I'm interested in your products, please send me catalog",点开一看——同行来套价的、货代群发的、发钓鱼链接的,真买家可能就一两封。更气人的是对方填的国家还不一定真:表单里写 United Kingdom,可查一下发信 IP 在美国,或者干脆是机房地址。业务员的老办法是翻邮件源码找 Received 头里的 IP,再复制到查询网站手动查——一天收几十封询盘,这么搞累死。这篇换个思路:独立站在收询盘那一刻,后端顺手把访客 IP 查成归属地,国家、城市、运营商直接写进询盘记录,真假询盘一眼分,客户在哪个国家不用猜。
一、为什么判断询盘要看 IP 归属地
外贸询盘的本质是「一个可能来自任何国家的人,想跟你做生意」。报价之前,你至少想知道对方是谁、在哪。但表单里的国家字段是最不可信的信息之一:买家出差在外地、用了 VPN/代理、或者是故意伪装(同行想套你的底价和产品册)。相对而言,IP 归属地反映的是「这封询盘实际从哪个网络出口发出来」,造假的成本高得多——要伪装得挂对应国家的代理。
实际场景里它帮得上忙的几件事:
- 识别假询盘:自称欧美大买家的询盘,IP 归属地却是国内机房或东南亚代理节点,基本可以降级处理,别花两小时做报价单;
- 客户画像:IP 显示的所在国和表单填的一致,客户真实性加分,报价、MOQ 策略可以按国家来定;
- 回复时机:知道客户在哪个时区,决定几点回邮件——这是很多外贸老手靠感觉做的事,数据其实一直躺在你服务器里;
- 线索分派:公司有多个业务员分区域(美洲组、欧洲组、东南亚组),按 IP 归属国自动把询盘派给对应的人。
要说明的是,IP 归属地是「网络出口」的属性,不是人的护照。出差、代理、公司总部网络都会让它和真实身份所在地不一致,所以它是判断真伪的第一道信号,不是唯一证据——这点后面还会强调。
二、方案设计
整条链路不复杂,难点在「在哪个环节拿 IP」:
独立站询盘通常走两种通道:一是站内表单(访客在 Contact 页填了发给你),二是邮箱(客户直接写邮件)。表单场景最好办:访客提交请求到你的服务器,REMOTE_ADDR 里就是他的出口 IP,后端顺手查一下归属地存进询盘表即可,全程自动化,客户无感知。邮件场景稍麻烦,要看邮件源码里的 Received 头,适合做成半自动工具,不在本篇展开。
技术要点三条:
- 拿对 IP。没挂反代直接取
REMOTE_ADDR;套了 Nginx 反代或 CDN 的站点,真实 IP 在X-Forwarded-For里,但只信你自己的反代层加的那个头,别直接信任客户端传的,否则能被伪造。 - 查询接口选国内免注册的。查询动作发生在中国服务器上、面向全球客户 IP,接口本身得稳。IP9 的免费接口
GET https://ip9.com.cn/get?ip=<IP>无需注册,一次请求返回国家、省市、运营商等字段,IPv4/IPv6 都支持,对询盘这种低频场景够用。 - 加当日缓存。同一个 IP 一天内可能发多封询盘(客户上午问产品 A 下午问产品 B),每封都查一次浪费额度。按 IP 做当天缓存,查过一次直接用结果。
三、PHP 实现
下面是可直接用的两个函数加一段接入示意,php-cli 和 Web 环境通用:
php
<?php
// 1. 取访客真实 IP:无反代直接 REMOTE_ADDR;有反代时 X-Forwarded-For 需在反代层过滤后才可信
function getClientIp(): string
{
$ip = $_SERVER['REMOTE_ADDR'] ?? '';
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$parts = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$ip = trim($parts[0]);
}
return filter_var($ip, FILTER_VALIDATE_IP) ? $ip : '';
}
// 2. 查归属地 + 当日文件缓存(同一 IP 一天只查一次)
function queryIpLocation(string $ip): ?array
{
$cacheFile = sys_get_temp_dir() . '/iploc_' . md5($ip) . '.json';
if (is_file($cacheFile) && filemtime($cacheFile) > strtotime('-1 day')) {
return json_decode((string)file_get_contents($cacheFile), true) ?: null;
}
$url = 'https://ip9.com.cn/get?ip=' . urlencode($ip);
$ctx = stream_context_create(['http' => [
'timeout' => 5,
'header' => "User-Agent: Mozilla/5.0 (InquiryBot/1.0; +https://example.com)\r\n",
]]);
$body = @file_get_contents($url, false, $ctx);
if ($body === false) {
return null; // 网络失败,本次放弃,不影响收询盘
}
$res = json_decode($body, true);
// 非法 IP 返回 ret=400、限速返回 ret=429,都按查询失败处理,询盘照常入库
if (!is_array($res) || ($res['ret'] ?? 0) !== 200) {
return null;
}
$data = $res['data'] ?? [];
file_put_contents($cacheFile, json_encode($data));
return $data;
}
// 3. 询盘提交处理里接入:查完把字段和表单内容一起入库
$inquiryIp = getClientIp();
$loc = $inquiryIp !== '' ? queryIpLocation($inquiryIp) : null;
$country = $loc['country'] ?? '未知'; // 中国 / United States / 泰国 ...
$region = trim(($loc['prov'] ?? '') . ' ' . ($loc['city'] ?? '')); // 国内:广东 广州;海外通常为空
$isp = $loc['isp'] ?? ''; // 运营商/机房标识,海外 IP 常为空
// 示例:写进询盘表(country/region/isp 三列)
// $stmt = $pdo->prepare('INSERT INTO inquiries (name,email,message,ip,country,region,isp,created_at)
// VALUES (?,?,?,?,?,?,?,NOW())');
// $stmt->execute([$_POST['name'], $_POST['email'], $_POST['message'], $inquiryIp, $country, $region, $isp]);海外 IP 的省市字段基本是空的,只返回国家层(country_code 像 us/jp/th),所以后台列表里海外询盘显示国家就够了,别硬拼空省市。
跑通之后,后台询盘列表可以做成这样:每条询盘后面挂一列「来源:美国(Verizon)」或者「来源:广东 深圳 · 中国电信」。看到自称纽约大客户的询盘 IP 归属地是深圳,心里就有数了。再进一步,加个自动判断:$country === '中国' && $isp 含机房特征就标「疑似同行/套价」,或者按 country_code 把询盘路由给不同业务员的邮箱——这都属于业务逻辑,字段齐了随便玩。
四、落地注意事项
- XFF 别裸信。直接取客户端传来的
X-Forwarded-For等于把 IP 伪造权交给对方。规范做法是在 Nginx 层把可信代理设为set_real_ip_from,或者只在确定流量经过自家反代时才读这个头。 - 假询盘别一棒子打死。IP 归属地异常只是嫌疑信号:客户用公司 VPN 出海、人在第三国出差,IP 都可能和表单国家不一致。建议当「待核实」处理,结合邮件域名、询盘内容细节一起判断,别把真客户误杀了。
- 限速与容错。免费接口 60 次/分钟/IP,缓存做好完全够用;查询失败(网络抖动、限速 429)时询盘照常入库,归属地留空,别因为查 IP 把客户询盘弄丢了——丢询盘比丢 IP 严重得多。
- 客户数据合规。询盘客户多为海外个人,涉及 GDPR 时要在独立站隐私政策里说明收集了 IP 与大致位置、用于防欺诈与线索管理;查询用国内接口(数据不出境或按服务商协议),别把客户邮件列表往不明确的第三方塞。
总结
外贸询盘真假难辨的问题,靠人工翻邮件头只能解决「事后确认」,解决不了「每天几十封怎么筛」。把 IP 归属地查询接进收询盘的环节——访客提交那一刻记下出口 IP,调一次 https://ip9.com.cn/get?ip=<IP>,国家省市运营商落库,后台按国家显示、按异常标记、按区域分派,一套下来假询盘处理效率能高一大截。接口免费无需注册,60 次/分钟/IP 对询盘量级绰绰有余,字段说明见官网 https://www.ip9.com.cn,查询入口 https://ip9.com.cn/get。别把 IP 当唯一证据,它是帮你决定「这封询盘值不值得花两小时」的第一道筛子。