2011-12-12 121 views
1

這可能是一個非常普遍的問題,但任何人都有使用UPS街道級驗證API的運氣很多?我研究的這個部分:http://www.codeproject.com/KB/aspnet/Benz_CPE.aspx?msg=3658759&display=MobileUPS地址街道等級驗證

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

UPS一直沒有自己的示例代碼非常有幫助。即使在獲得訪問密鑰後,他們的樣本仍堅持所提供的狀態無效的樣本數據(即使在測試環境可接受的狀態下)。尋找更多的線索。

+0

我相信你會得到更好的迴應,如果你自己嘗試一些代碼並最終出現一些錯誤,並在這裏發佈你的代碼和錯誤細節。 – Shyju

+0

我所做的只是重寫部分進行調用,並在基本上使用其他95%的UPS代碼庫的單獨類中包含其他內容。但是如果您給出一些示例數據,那麼我們可以分析它並查看最新數據,這將有所幫助。 – John

回答

2

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 響應狀態說明成功

當我到了我的問題,這一點,我會發布另一個問題。在此之前,這個問題得到了回答。

+0

任何想法如何在英國工作? – djack109

1

我看了看UPS的街道級別的API。我所有的搜索都沒有爲我澄清他們從哪裏得到他們的數據,直到我真正聯繫到UPS的開發人員,他告訴我他們的數據直接來自USPS地址數據庫,並增加了一些自己的內部指標。由於UPS根據您的使用量限制了您如何使用其數據(僅允許您使用其服務)的使用限制,因此使用相同的USPS數據可能沒有限制。這通常可從第三方USPS數據提供商處獲得。您將無法下載該國所有地址的完整列表(因爲隱私法),但您可以使用API​​(不受限制)執行地址驗證。

爲了充分披露,我是SmartyStreets的創始人,他是一家進行街道地址驗證的公司。

2

您收到的成功響應是針對Web服務調用的。現在,您需要查看可能的地址或'CandidateType'(UPS對象)。

層次結構響應應類似於此:

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

如果你有一個以上的候選地址,您將收到候選類型對象的數組。確保如果你只收到一個候選類型,確認它不是一個地址範圍(如果你不包含某個地址的特定數字部分,可能會得到這個地址的範圍

希望它有幫助,花了我花了幾個小時來找出這個問題

0

你也可以使用http://www.verifythisaddress.com這是一個WCF服務,它允許你從USPS以及超過250個國家取回地址。我嘗試過實施USPS,但是當我輸入一個公寓大樓的地址時,我收到了一個成功的消息,但它應該拋出一個錯誤,指出一個套件範圍丟失了,如果它沒有驗證,我對UPS驗證有些猶豫。目的如果你不能得到正確的答案ddress。使用USPS服務或第三方,如上面的鏈接。