跳到主要内容
← 返回 API 目录

中文域名转码

域名

中文域名与 Punycode 互相转换。

GET https://api.wanmi.net/open/v1/idn-convert

每天 100 次免费,超出 ¥0.01/次 · 同一账号多个 key 共用

用多少付多少。云工具 API 无免费次数,创建时预留余额,成功交付才结算(异步 PDF 在领取时结算);失败释放或补偿。主动开通按量付费后,免费次数用完按接口单价从钱包扣费;余额不足或每日扣费上限已到时拒绝,不欠费。仅成功交付收费,符合接口契约的降级成功照常收费;失败和未交付不收费。每次扣费及补偿可在控制台账单查看,单价以各接口当前配置及调用准入快照为准。

沿用站内域名规范化,返回 ASCII、Unicode、展示形式与混合文字风险提示。纯本地计算,不访问上游。

返回示例

{
  "state": "ready",
  "data": {
    "ascii": "xn--fsqu00a.com",
    "unicode": "例子.com",
    "display": "例子.com",
    "risks": []
  }
}

在线试调

粘贴你自己的 key,浏览器会直接向 api.wanmi.net 发送请求。key 仅在当前页面内存中使用,不保存、不上传主站。成功调用会计入免费次数;已开通按量付费时,超出免费次数会按接口单价扣余额。

前往控制台获取 API key

响应点击“发送请求”查看真实返回
等待请求

代码示例

curl --max-time 6 'https://api.wanmi.net/open/v1/idn-convert?domain=%E4%BE%8B%E5%AD%90.com' \
  -H "Authorization: Bearer $WANMI_API_KEY"

将 WANMI_API_KEY 设为环境变量。请在自己的服务器中运行,勿将 key 放进公开代码。

请求参数

参数类型必填说明
domainstring必填最长 1024 字符
例如:例子.com
返回字段与完整结构
字段类型必返说明
stateready | empty | degraded是—
dataobject是—
data.asciistring是最短 1 字符;最长 253 字符
data.displaystring是最短 1 字符;最长 253 字符
data.risksobject[]是—
data.risks.[]codeDOMAIN_MIXED_SCRIPT_RISK是—
data.risks.[]labelAsciistring是最短 1 字符;最长 63 字符
data.risks.[]messagestring是最短 1 字符
data.risks.[]scriptsstring[]是—
data.unicodestring是最短 1 字符
metaobject否—
meta.cacheStatushit | miss | mixed | not_used否—
meta.dataSourcestring否最短 1 字符
meta.lastSuccessfulAtstring否date-time;格式 ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
meta.observedAtstring否date-time;格式 ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
meta.staleboolean否—
meta.traceIdstring否格式 ^[a-zA-Z0-9._:-]{8,128}$
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "state": {
      "type": "string",
      "enum": [
        "ready",
        "empty",
        "degraded"
      ]
    },
    "data": {
      "type": "object",
      "properties": {
        "ascii": {
          "type": "string",
          "minLength": 1,
          "maxLength": 253
        },
        "display": {
          "type": "string",
          "minLength": 1,
          "maxLength": 253
        },
        "risks": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "const": "DOMAIN_MIXED_SCRIPT_RISK"
              },
              "labelAscii": {
                "type": "string",
                "minLength": 1,
                "maxLength": 63
              },
              "message": {
                "type": "string",
                "minLength": 1
              },
              "scripts": {
                "minItems": 2,
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1
                }
              }
            },
            "required": [
              "code",
              "labelAscii",
              "message",
              "scripts"
            ],
            "additionalProperties": false
          }
        },
        "unicode": {
          "type": "string",
          "minLength": 1
        }
      },
      "required": [
        "ascii",
        "display",
        "risks",
        "unicode"
      ],
      "additionalProperties": false
    },
    "meta": {
      "type": "object",
      "properties": {
        "cacheStatus": {
          "type": "string",
          "enum": [
            "hit",
            "miss",
            "mixed",
            "not_used"
          ]
        },
        "dataSource": {
          "type": "string",
          "minLength": 1
        },
        "lastSuccessfulAt": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        "observedAt": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
        },
        "stale": {
          "type": "boolean"
        },
        "traceId": {
          "type": "string",
          "pattern": "^[a-zA-Z0-9._:-]{8,128}$"
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "state",
    "data"
  ],
  "additionalProperties": false
}

错误码

HTTP错误码含义与处理
400INVALID_REQUEST请检查请求;保留响应中的 traceId 以便排查。
400API_INPUT_INVALID请按参数表检查输入;参数错误不计入免费次数。
401API_KEY_REQUIRED在 Authorization 请求头中添加 Bearer key。
401API_KEY_INVALID检查 key 是否正确;轮换后请更新程序中的 key。
401API_KEY_REVOKEDkey 已吊销,请在控制台创建新的 key。
402API_BALANCE_INSUFFICIENT请检查请求;保留响应中的 traceId 以便排查。
403API_SPEND_REACTIVATION_REQUIRED请检查账户状态和权限后再试。
403ACCOUNT_BALANCE_SPEND_DISABLED请检查账户状态和权限后再试。
403STEP_UP_IDENTITY_RISK_COOLDOWN_ACTIVE请检查账户状态和权限后再试。
403API_KEY_BANNEDkey 已封禁,请联系支持。
403API_SCOPE_FORBIDDEN此 key 无权调用该接口,请在控制台检查权限。
403API_KEY_CHANGEDkey 已发生变化,请使用最新的 key。
403REALNAME_VERIFICATION_REQUIRED请检查账户状态和权限后再试。
403ACCOUNT_API_ACCESS_DISABLED请检查账户状态和权限后再试。
403ACCOUNT_LOGIN_DISABLED请检查账户状态和权限后再试。
403ACCOUNT_CLOSED请检查账户状态和权限后再试。
403ACCOUNT_CLOSING请检查账户状态和权限后再试。
403ACCOUNT_PENDING_REGISTRATION请检查账户状态和权限后再试。
403ACCOUNT_SUSPENDED请检查账户状态和权限后再试。
403ACCOUNT_STATE_INVALID请检查账户状态和权限后再试。
404API_NOT_FOUND请检查请求;保留响应中的 traceId 以便排查。
405API_METHOD_NOT_ALLOWED请检查请求;保留响应中的 traceId 以便排查。
408API_REQUEST_ABORTED请检查请求;保留响应中的 traceId 以便排查。
409API_RESERVATION_EXPIRED请检查请求;保留响应中的 traceId 以便排查。
409API_SPEND_VERSION_CHANGED请检查请求;保留响应中的 traceId 以便排查。
409WALLET_SPEND_LIMIT_EXCEEDED请检查请求;保留响应中的 traceId 以便排查。
410API_UNAVAILABLE接口已下架,请查看目录中的已开放接口。
421API_HOST_INVALID请检查请求;保留响应中的 traceId 以便排查。
429API_RATE_LIMITED请求过于频繁,请按 Retry-After 等待后重试。
429API_FREE_QUOTA_EXHAUSTED今日免费次数已用完;可在控制台主动开通按量付费,或等待次日免费次数恢复。
429API_SITE_QUOTA_EXHAUSTED接口的全站日容量已满,请稍后再试。
429API_DAILY_SPEND_LIMIT_EXCEEDED请检查请求;保留响应中的 traceId 以便排查。
500INTERNAL_ERROR服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
500API_TELEMETRY_INVALID服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
500ACCOUNT_RESTRICTIONS_INVALID服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
502API_EXECUTION_FAILED服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
502API_INVALID_RESPONSE服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
502API_RESPONSE_TOO_LARGE服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
502API_UPSTREAM_UNAVAILABLE服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
503API_BILLING_NOT_CONFIGURED服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
503API_BILLING_UNAVAILABLE服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
503WALLET_POLICY_UNAVAILABLE服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
503WALLET_LEDGER_UNAVAILABLE服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
503OPEN_API_DISABLED服务尚未开放或暂时停用,请稍后再试。
503API_LIMIT_UNAVAILABLE服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
503API_QUOTA_UNAVAILABLE服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
503API_QUOTA_NOT_CONFIGURED服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。
504API_EXECUTION_TIMEOUT服务暂时未能完成调用;失败不计次,请保留 X-Request-Id 联系支持。