Skip to content

外贸询盘怎么判断客户所在国家?独立站用 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 头,适合做成半自动工具,不在本篇展开。

技术要点三条:

  1. 拿对 IP。没挂反代直接取 REMOTE_ADDR;套了 Nginx 反代或 CDN 的站点,真实 IP 在 X-Forwarded-For 里,但只信你自己的反代层加的那个头,别直接信任客户端传的,否则能被伪造。
  2. 查询接口选国内免注册的。查询动作发生在中国服务器上、面向全球客户 IP,接口本身得稳。IP9 的免费接口 GET https://ip9.com.cn/get?ip=<IP> 无需注册,一次请求返回国家、省市、运营商等字段,IPv4/IPv6 都支持,对询盘这种低频场景够用。
  3. 加当日缓存。同一个 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 把询盘路由给不同业务员的邮箱——这都属于业务逻辑,字段齐了随便玩。

四、落地注意事项

  1. XFF 别裸信。直接取客户端传来的 X-Forwarded-For 等于把 IP 伪造权交给对方。规范做法是在 Nginx 层把可信代理设为 set_real_ip_from,或者只在确定流量经过自家反代时才读这个头。
  2. 假询盘别一棒子打死。IP 归属地异常只是嫌疑信号:客户用公司 VPN 出海、人在第三国出差,IP 都可能和表单国家不一致。建议当「待核实」处理,结合邮件域名、询盘内容细节一起判断,别把真客户误杀了。
  3. 限速与容错。免费接口 60 次/分钟/IP,缓存做好完全够用;查询失败(网络抖动、限速 429)时询盘照常入库,归属地留空,别因为查 IP 把客户询盘弄丢了——丢询盘比丢 IP 严重得多。
  4. 客户数据合规。询盘客户多为海外个人,涉及 GDPR 时要在独立站隐私政策里说明收集了 IP 与大致位置、用于防欺诈与线索管理;查询用国内接口(数据不出境或按服务商协议),别把客户邮件列表往不明确的第三方塞。

总结

外贸询盘真假难辨的问题,靠人工翻邮件头只能解决「事后确认」,解决不了「每天几十封怎么筛」。把 IP 归属地查询接进收询盘的环节——访客提交那一刻记下出口 IP,调一次 https://ip9.com.cn/get?ip=<IP>,国家省市运营商落库,后台按国家显示、按异常标记、按区域分派,一套下来假询盘处理效率能高一大截。接口免费无需注册,60 次/分钟/IP 对询盘量级绰绰有余,字段说明见官网 https://www.ip9.com.cn,查询入口 https://ip9.com.cn/get。别把 IP 当唯一证据,它是帮你决定「这封询盘值不值得花两小时」的第一道筛子。