UPS地址街道级别验证

时间:2011-12-12 21:55:38

标签: c#

这可能是一个非常普遍的问题,但是有没有人有幸使用UPS街道级验证API?我研究了部分内容:http://www.codeproject.com/KB/aspnet/Benz_CPE.aspx?msg=3658759&display=Mobile

这个: https://www.ups.com/upsdeveloperkit/downloadresource?loc=en_US

UPS对自己的示例代码不是很有帮助。即使在获得访问密钥之后,他们的样本仍然坚持样本数据(即使在测试环境可接受的状态下),所提供的状态也是无效的。寻找更多潜在客户。

4 个答案:

答案 0 :(得分:3)

UPS通知我,C#样本配置为“城市化”,仅适用于波多黎各。我修改了代码如下:

class XAVWSClient
{
    static void Main()
    {
        try
        {
        XAVService xavSvc = new XAVService();
        XAVRequest xavRequest = new XAVRequest();
        UPSSecurity upss = new UPSSecurity();
UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken();
        upssSvcAccessToken.AccessLicenseNumber = ;
        upss.ServiceAccessToken = upssSvcAccessToken;
        UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken();
        upssUsrNameToken.Username = ;
        upssUsrNameToken.Password = ;
        upss.UsernameToken = upssUsrNameToken;
        xavSvc.UPSSecurityValue = upss;
        RequestType request = new RequestType();

        //Below code contains dummy data for reference. Please update as required.
        String[] requestOption = { "1" };
        request.RequestOption = requestOption;
        xavRequest.Request = request;
        AddressKeyFormatType addressKeyFormat = new AddressKeyFormatType();
        String[] addressLine = { "3930 KRISTI COURT" };
        addressKeyFormat.AddressLine = addressLine;
        addressKeyFormat.PoliticalDivision2 = "SACRAMENTO";
        addressKeyFormat.PoliticalDivision1 = "CA";
        addressKeyFormat.PostcodePrimaryLow = "95827";
        addressKeyFormat.ConsigneeName = "Some Consignee";
        addressKeyFormat.CountryCode = "US";
        xavRequest.AddressKeyFormat = addressKeyFormat;
  System.Net.ServicePointManager.CertificatePolicy = new    TrustAllCertificatePolicy();

        //serialize object (Debugging)
  System.Xml.Serialization.XmlSerializer x = new     System.Xml.Serialization.XmlSerializer(xavRequest.GetType());
        Stream stream = File.Open("SerializedXAVRequest.xml", FileMode.Create);
        x.Serialize(stream, xavRequest);

        XAVResponse xavResponse = xavSvc.ProcessXAV(xavRequest);

 Console.WriteLine("Response Status Code " +  xavResponse.Response.ResponseStatus.Code);
 Console.WriteLine("Response Status Description " + xavResponse.Response.ResponseStatus.Description);
        Console.ReadLine();

虽然我现在可以验证我的凭据,但我不能产生多个结果,我不确定它是否正在进行任何验证,考虑到即使我输入虚假地址,我也收到以下内容:

响应状态代码1 响应状态描述成功

当我在问题中达到这一点时,我会发布另一个问题。在那之前,这个问题得到了回答。

答案 1 :(得分:2)

您收到的成功回复是针对网络服务电话。现在,您需要查看可能的地址或'CandidateType'(UPS对象)。

层次结构响应应该类似于:

<soapenv:Envelop>
<soapenv:Body>
<xqv:XAVResponse>
<xav:Candidate> or <xav:NoCandidatesIndicator>

如果您有多个候选地址,您将收到一系列候选类型对象。确保如果您只收到一个候选类型,请确认它不是一系列地址(如果您不包含地址的特定数字部分,则可以作为回复。

希望它有所帮助,花了我几个小时来计算出这个

答案 2 :(得分:1)

我查看了UPS街道级API。我所有的搜索都没有告诉我他们在哪里得到他们的数据,直到我实际到达UPS的开发人员,告诉我他们的数据直接来自USPS地址数据库,增加了他们自己的一些内部指标。由于UPS根据您的使用量限制了您如何使用他们的数据(只允许您提供服务),因此使用相同的USPS数据但没有限制可能是有意义的。这通常可从第三方USPS数据提供商处获得。您将无法下载该国家/地区的所有地址的完整列表(由于隐私法),但您可以使用API​​(无限制)来执行地址验证。

为了充分披露,我是SmartyStreets的创始人,这是一家进行街道地址验证的公司。

答案 3 :(得分:0)

您还可以使用http://www.verifythisaddress.com这是一个WCF服务,允许您从USPS以及250多个国家/地区检索地址。虽然其他人已经说过,但价格昂贵。我已经尝试过实施USPS但是当我输入一个公寓楼的地址时,我收到了一条成功消息,但它应该抛出一个套件范围丢失的错误。如果没有验证,我对UPS验证有些犹豫。如果你无法获得正确的地址,它就会失败。使用USPS服务或第三方,如上面的链接。