【问题标题】:How to validate the given address using USPS?如何使用 USPS 验证给定地址?
【发布时间】:2011-02-19 09:23:41
【问题描述】:

我想向 USPS 验证给定地址(地址、城市、州、邮编),如果提供的地址是有效地址,则返回结果。如果不是有效地址,则返回无效地址。

那么我如何在 C#.Net 中做到这一点。

【问题讨论】:

    标签: c#


    【解决方案1】:

    美国邮政服务 (USPS) 确实通过其地址信息 API 提供此服务:

    这是一篇关于如何在 .NET 中使用此服务的代码项目文章/库:

    注意

    • 在您使用这个库之前,您需要通过填写此form 来获得一个 USPS Web 工具 ID。

    • 要请求地址信息 API(验证等),您需要额外的权限。同时填写此form 以申请这些权限。

    【讨论】:

    • 我已经使用了代码项目示例,但是如果我将测试模式值传递给 false,我将得到授权,因为需要授权。我该如何解决这个问题
    • 您是否注册了 USPS Web Tools ID? secure.shippingapis.com/registration
    • 我正在传递 Web 工具 ID,它收到错误消息“API 授权失败。用户 XXXXXXXX 无权使用 API 验证。”为什么我会收到此错误?
    • @Vara Prasad.M:正如错误所说,您没有获得验证 API 的授权。我更新了我的答案。
    • 第二个链接再次断开。
    【解决方案2】:

    来自here

    ///Create a new instance of the USPS Manager class
    ///The constructor takes 2 arguments, the first is
    ///your USPS Web Tools User ID and the second is 
    ///true if you want to use the USPS Test Servers.
    USPSManager m = new USPSManager("YOUR_USER_ID", true);
    Address a = new Address();
    a.Address2 = "6406 Ivy Lane";
    a.City = "Greenbelt";
    a.State = "MD";
    
    ///By calling ValidateAddress on the USPSManager object,
    ///you get an Address object that has been validated by the
    ///USPS servers
    Address validatedAddress = m.ValidateAddress(a);
    

    注意:出于某种原因,您需要将实际地址作为地址 2。如果您尝试将 Address1 设置为“6406 Ivy Lane”,它将失败。 Address1 显然是公寓或套房号。 感谢Simon Weaver下方的评论

    【讨论】:

    • 重要提示:出于某些愚蠢的原因,您需要将实际地址作为地址 2。如果您尝试将 Address1 设置为“6406 Ivy Lane”,它将失败。 Address1 显然是公寓或套房号:usps.com/webtools/_pdf/Address-Information-v3-1b.pdf
    • 哇! 8 年后,API 根本没有改变。所有相同的老问题 :-( 另一个超级烦人的事情是您是否错误地指定了公寓号码,或者根本没有得到相同的确切错误消息。
    • 提示:如果您实施地址验证系统,请使用真实客户输入的真实地址来测试流程。我已经实施了我们的新系统,以便在我打开页面时给我一个随机客户的地址——这样我就可以对真实客户的体验有一个很好的印象。我有 10 年的用户输入可供借鉴。您还会发现很多与此有关的边缘案例 - 以及 USPS 系统(或您使用的任何东西)的限制。请确保此功能无法部署到生产环境中!
    • @lospolloshermanos 抱歉,我添加了不必要的混淆。我不记得自己是什么意思了。我在开发过程中实际所做的是将数据库中的真实客户地址随机加载到我的结帐地址表单中。所以每次我刷新页面时都会有不同的客户。 1) 节省我每次输入地址的时间。 2) 让我了解真实客户数据的实际体验,并进行调整以使其更有意义。
    【解决方案3】:

    如果我可以在这里插话——我曾经在 SmartyStreets 的地址验证行业工作,SmartyStreets 是这些服务的 CASS 认证供应商。

    首先请注意,虽然 USPS 是地址数据的权威机构,但他们的强项不是维护 API 和提供支持。另外,请务必注意您签署的协议:

    • 用户同意仅使用 USPS 网站、API 和 USPS 数据来促进 USPS 运输交易。

    因此,除非您使用 USPS 的 API 邮寄或运送,否则使用 API 是不可接受的。在您遇到的其他问题中,有理由寻找更好的解决方案——如果我是您的话。

    无论如何,实际上有不少。我会让你自己做研究,但我当然会建议我研究过的一个叫做 LiveAddress。它是免费的,并且比 USPS 的 API 返回更多数据并且更可靠。

    更新: Here's some C# code examples on GitHub 这可能会有用。

    【讨论】:

    • 关于有效使用 USPS API 的一些注意事项,有一项名为 TaxCloud 的服务可以根据 USPS API 验证地址。显然,这项服务与运输没有直接关系,因为它只是根据用户的地址计算税款(技术上是 Zip+4,由 USPS 查询返回)。我不确定 TaxCloud 与 USPS 有什么协议,但对于那些为计算销售/使用税而寻找地址验证的人来说,这似乎是一个很好的解决方法。
    • Matt SmartyStreets 和 LiveAddress 由同一家公司运营...相同的网站布局和定价模式,也都不是免费的。在我看来,您的帖子更像是宣传您的公司,然后是协助编写代码。
    【解决方案4】:

    服务对象地址验证 Web 服务可以根据 USPS 确定地址是否有效。下面是几个 C# 示例(RESTful 请求和 SOAP 请求):

    宁静的请求

    string mainURL = "https://trial.serviceobjects.com/AV3/api.svc/GetBestMatchesJson/" + businessName + "/" + address + "/" + address2 + "/" + city + "/" + state + "/" + zip + "/" + licenseKey;
    AV3Response result = null;
    
    HttpWebRequest request = WebRequest.Create(mainURL ) as HttpWebRequest;
    request.Timeout = 5000;//timeout for get operation
    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    {
     if (response.StatusCode != HttpStatusCode.OK)
     throw new Exception(String.Format(
     "Server error (HTTP {0}: {1}).",
     response.StatusCode,
     response.StatusDescription));
     //parse response
     DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(AV3Response));
     object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
     result = objResponse as AV3Response;
    //processing result
    if (result.error == null)
    {
     //process result
    }
    else
    {
     //process error
    }
    

    另一种选择是使用 wsdl 并发出 SOAP 请求。

    SOAP 请求

    //Add a service to your application https://trial.serviceobjects.com/av3/api.svc/
    AV3Client_Primary = new AddressValidation3Client("DOTSAddressValidation3");
    response = AV3Client_Primary.GetBestMatches(Business, Address, Address2, City, State, PostalCode, licenseKey);
    

    响应字段将包含有关地址有效性的信息。 DPV 分数可用于确定地址是否可送达、不可送达或接近正确但缺少一些重要信息(apt、ste、rr #)。

    DPV Codes

    如果您想了解有关服务输出的更深入信息,可以查看here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      • 2018-01-26
      相关资源
      最近更新 更多