Skip to content

跨境电商:怎么判断海外客户到底在哪个国家?

做跨境电商的朋友经常遇到一个问题:网站里明明写着"本店仅发美国",可每天还是有大把其他国家的访问进来,白花带宽和精力。等真出了订单,才发现收货地址和IP所在国对不上,麻烦一堆。

这篇讲讲,怎么用IP归属地快速判断海外访客所在的国家/地区。

为什么需要IP判断国家

  • 防"假海外":很多所谓"海外客户"其实是国内用户挂代理,IP一变,货发出去就亏了;
  • 按国家做限制:不同国家合规要求不同,先按IP筛一遍;
  • 区域差异化:价格、语言、货品,按国家区分展示。

核心就一个字段:country_code

像IP9这类国际覆盖到200+国家的接口,返回里有个 country_code,是ISO国家简码:

json
{
  "ip": "8.8.8.8",
  "country": "美国",
  "country_code": "us"
}

用这个简码做判断,比存中文国家名靠谱得多——不涉及编码、语言问题,还方便和白名单对比。

判断逻辑

1. 国家白名单/黑名单

python
ALLOWED = {"us", "ca", "uk", "de", "fr", "au"}  # 允许的国家

def check_country(country_code):
    return country_code in ALLOWED

2. 识别"代理伪装"

跨境电商最大的坑是代理IP。很多国内用户挂美区代理来"假装海外客户"。识别手段有限,但可以组合用:

python
def is_suspicious(country_code, ip_type, isp):
    # 声称是美国用户
    if country_code == "us":
        # 但IP是机房类型 -> 很可能是服务器中转,不是真人
        if ip_type == "IDC":
            return True
        # 或者运营商是国内运营商
        if "中国" in isp:
            return True
    return False

ip_typeisp 这两个字段,在识别代理场景里特别有用。真美国用户用美国家庭宽带,ip_type 是 ISP、运营商是美国的;假美国用户往往挂在机房IP上。

3. 下单前二次校验

更稳的做法:浏览时只做粗略判断,下单时再查一次。因为下单那一刻的IP才是关键,而且可以用"下单IP国家 ≠ 收货国家"来触发人工审核。

python
def before_order_check(order, ip_info):
    if not ip_info:
        return "review"  # 查不到,走人工
    if order.shipping_country_code != ip_info["country_code"]:
        # 收货国家和IP国家不一致,标记复核
        return "review"
    return "ok"

注意:这个规则不能一票否决(有代购、中转仓等正常场景),但必须触发复核

数据精度的小提醒

海外定位的精度一般到国家级别是稳的,到城市级别就要看数据源了。做跨境电商判断,只要国家判断准,就够用,别指望它给你"精确到美国哪个州哪个市"——能做到更好,做不到也别纠结。

另外,判断国家时建议优先用IPv6查一次(手机流量海外用户不少),避免显示错误。

落地顺序建议

  1. 先接接口,把 country_codecountry 存进访问日志;
  2. 加白名单/黑名单判断,挡掉非目标国家;
  3. 下单时二次校验收货国家和IP国家是否一致;
  4. 积累数据后,对高风险组合(IDC IP + 高价值订单)做专门策略。

这套东西我用下来,最大的感受是:别想着一步到位,先把"国家判断"这层做扎实,后面很多问题都顺了。

免费查国家归属地的接口:https://www.ip9.com.cn