指南

检测访客所在国家以设置默认税率和货币

在向新访客展示价格之前,要求他们从一长串下拉列表中选择国家,这是一个多余的步骤,而一个合适的默认值可以把它完全去掉。

获取国家代码

用访客的地址对 /v1/ip 进行一次调用,即可返回标准 ISO 3166-1 alpha-2 格式的 country_code 字段,而大多数税率和货币查找表本来就是以这种格式作为键的。

GET /v1/ip?ip=198.51.100.7
{
  "status": "ok",
  "ip": "198.51.100.7",
  "version": 4,
  "found": true,
  "country": "Germany",
  "country_code": "DE",
  "region": "Berlin",
  "city": "Berlin",
  "postcode": "10115",
  "lat": 52.5200,
  "lon": 13.4050,
  "timezone": "Europe/Berlin",
  "asn": 6789,
  "org": "Example Telecom"
}

从国家代码到税费和货币

将 country_code 映射到您自己的税率表和货币表,方式与映射客户手动选择的国家相同。请把根据 IP 得出的国家当作默认值而不是最终答案,并允许访客修改,因为正在旅行的客户或使用 VPN 的客户,未必总与他们实际需要的账单国家一致。

查询无法解析时

对没有位置数据记录的地址发起请求时,会返回 found 为 false,而不是错误,这一点值得专门做好准备。在这种情况下,请回退到一个合理的默认国家和货币,而不是让字段留空,或者让空的 country_code 在无人察觉的情况下进入您的税费计算。

My Geocode 自身的不同之处

My Geocode 自身的定价在全球范围内只使用 EUR,无论客户从哪里付款。这与您向自己的访客展示什么是两回事:根据识别出的国家本地化显示货币是完全合理的,即使您自己的后端像我们一样用一种货币结算所有款项。

值得避免的错误

把访客锁定在识别出的国家、不给修改的余地,比偶尔把默认值弄错是更大的问题。在国外酒店购物的客户,或者使用出口位于与其实际所在地不同国家的公司 VPN 的客户,迟早会遇到错误的默认值。请始终把识别出的国家显示为可编辑的字段,而不是固定写入订单的值。

请求成本

每个新访客会话查询一次,并在该会话期间缓存结果,是合理的模式。这样计入每日额度的是每个会话一个请求,而不是每次页面浏览一个请求,即使是繁忙的网站也能轻松保持在每个密钥附带的每天 2,500 次免费请求之内,或者在完全不使用密钥的情况下,保持在单个地址可用的免费请求之内。

同一个响应还包含 timezone 字段,因此既需要货币默认值、又需要在订单确认中合理显示当地时间的结账流程,可以通过一次调用同时获得两者,而无需两次单独查询。

在第一次页面浏览时就设置正确的货币默认值,可以避免在结账后期出现突兀的价格切换。IPv4 查询文档列出了该端点返回的每个字段。