2010-08-19 84 views
0

我試圖讓示例FedEx地址驗證應用程序在C#中工作。聯繫我的聯邦快遞技術聯繫人並讓他在我的測試帳戶上激活地址驗證(顯然它被認爲是需要額外權限的高級服務)後,我才能編譯和運行示例應用程序。Fedex地址驗證Web參考問題

但是,我沒有得到我很期待給出的設置的結果...

request.Options.ConvertToUpperCase = true; 
request.Options.CheckResidentialStatus = true; 

基於這些標誌,我預計將有地址回來大寫,並能檢查住宅或ResidentialStatus屬性以確定商業與住宅。沒有發生。

因此,我安裝了Fiddler以查看發生的確切SOAP交換,並發現出站選項標記除了一個屬性MaximumNumberOfMatches外沒有填充。

在Visual Studio創建的Reference.cs文件中是否應該檢查一些內容?我沒有看到任何超出規範的事情,但是發生了一些阻止某些屬性序列化的事情。

- 編輯 -

根據以下建議更新我的代碼。不幸的是,它仍然只填充了2個選項參數。我在下面包含了C#設置代碼和出站/入站SOAP請求。任何人都可以想到其他選項沒有在SOAP請求中發送的原因嗎?

AddressValidationRequest request = new AddressValidationRequest(); 
      // 
      request.WebAuthenticationDetail = new WebAuthenticationDetail(); 
      request.WebAuthenticationDetail.UserCredential = new WebAuthenticationCredential(); 
      request.WebAuthenticationDetail.UserCredential.Key = "XXX-KEY-XXX"; // Replace "XXX" with the Key 
      request.WebAuthenticationDetail.UserCredential.Password = "XXX-PWD-XXX"; // Replace "XXX" with the Password 
      // 
      request.ClientDetail = new ClientDetail(); 
      request.ClientDetail.AccountNumber = "XXX-ACCT#-XXX"; // Replace "XXX" with client's account number 
      request.ClientDetail.MeterNumber = "XXX-MTR#-XXX"; // Replace "XXX" with client's meter number 
      // 
      request.TransactionDetail = new TransactionDetail(); 
      request.TransactionDetail.CustomerTransactionId = "***Address Validation v2 Request using VC#***"; // This is just an echo back 
      // 
      request.Version = new VersionId(); // Creates the Version element with all child elements populated 
      // 
      request.RequestTimestamp = DateTime.Now; 
      // 
      request.Options = new AddressValidationOptions(); 
      request.Options.CheckResidentialStatus = true; 
      request.Options.CheckResidentialStatusSpecified = true; 
      request.Options.VerifyAddresses = true; 
      request.Options.MaximumNumberOfMatches = "5"; 
      request.Options.StreetAccuracy = AddressValidationAccuracyType.MEDIUM; 
      request.Options.DirectionalAccuracy = AddressValidationAccuracyType.MEDIUM; 
      request.Options.CompanyNameAccuracy = AddressValidationAccuracyType.MEDIUM; 
      request.Options.ConvertToUpperCase = true; 
      request.Options.RecognizeAlternateCityNames = true; 
      request.Options.ReturnParsedElements = true; 
      // 
      request.AddressesToValidate = new AddressToValidate[2]; 
      request.AddressesToValidate[0] = new AddressToValidate(); 
      request.AddressesToValidate[0].AddressId = "Kimmel"; 
      request.AddressesToValidate[0].Address = new Address(); 
      request.AddressesToValidate[0].Address.StreetLines = new String[1] { "425 Morningside Dr" }; 
      request.AddressesToValidate[0].Address.City = "Deerfield"; 
      request.AddressesToValidate[0].Address.PostalCode = "53531"; 
      request.AddressesToValidate[0].Address.CountryCode = "US"; 
      // 
      request.AddressesToValidate[1] = new AddressToValidate(); 
      request.AddressesToValidate[1].AddressId = "WD"; 
      request.AddressesToValidate[1].Address = new Address(); 
      request.AddressesToValidate[1].Address.StreetLines = new String[1] { "2830 Progress Rd" }; 
      request.AddressesToValidate[1].Address.PostalCode = "53716"; 
      request.AddressesToValidate[1].CompanyName = "Wingra Direct"; 

出站SOAP請求(使用Fiddler獲得)。注意缺少選擇:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <AddressValidationRequest xmlns="http://fedex.com/ws/addressvalidation/v2"> 
      <WebAuthenticationDetail> 
       <UserCredential> 
        <Key>XXX-KEY-XXX</Key> 
        <Password>XXX-PWD-XXX</Password> 
       </UserCredential> 
      </WebAuthenticationDetail> 
      <ClientDetail> 
       <AccountNumber>XXX-ACCT#-XXX</AccountNumber> 
       <MeterNumber>XXX-MTR#-XXX</MeterNumber> 
      </ClientDetail> 
      <TransactionDetail> 
       <CustomerTransactionId>***Address Validation v2 Request using VC#***</CustomerTransactionId> 
      </TransactionDetail> 
      <Version> 
       <ServiceId>aval</ServiceId> 
       <Major>2</Major> 
       <Intermediate>0</Intermediate> 
       <Minor>0</Minor> 
      </Version> 
      <RequestTimestamp>2010-08-26T16:40:13.2026134-05:00</RequestTimestamp> 
      <Options> 
       <CheckResidentialStatus>true</CheckResidentialStatus> 
       <MaximumNumberOfMatches>5</MaximumNumberOfMatches> 
      </Options> 
      <AddressesToValidate> 
       <AddressId>Kimmel</AddressId> 
       <Address> 
        <StreetLines>425 Morningside Dr</StreetLines> 
        <City>Deerfield</City> 
        <PostalCode>53531</PostalCode> 
        <CountryCode>US</CountryCode> 
        <Residential>true</Residential> 
       </Address> 
      </AddressesToValidate> 
      <AddressesToValidate> 
       <AddressId>WD</AddressId> 
       <CompanyName>Wingra Direct</CompanyName> 
       <Address> 
        <StreetLines>2830 Progress Rd</StreetLines> 
        <PostalCode>53716</PostalCode> 
       </Address> 
      </AddressesToValidate> 
     </AddressValidationRequest> 
    </soap:Body> 
</soap:Envelope> 

響應我得到的回覆是:

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <env:Header xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"/> 
    <soapenv:Body> 
     <v2:AddressValidationReply xmlns:v2="http://fedex.com/ws/addressvalidation/v2"> 
      <v2:HighestSeverity>SUCCESS</v2:HighestSeverity> 
      <v2:Notifications> 
       <v2:Severity>SUCCESS</v2:Severity> 
       <v2:Source>wsi</v2:Source> 
      </v2:Notifications> 
      <v2:TransactionDetail xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
       <v2:CustomerTransactionId>***Address Validation v2 Request using VC#***</v2:CustomerTransactionId> 
      </v2:TransactionDetail> 
      <v2:Version xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
       <v2:ServiceId>aval</v2:ServiceId> 
       <v2:Major>2</v2:Major> 
       <v2:Intermediate>0</v2:Intermediate> 
       <v2:Minor>0</v2:Minor> 
      </v2:Version> 
      <v2:ReplyTimestamp>2010-08-26T21:40:14.140Z</v2:ReplyTimestamp> 
      <v2:AddressResults> 
       <v2:AddressId>Kimmel</v2:AddressId> 
       <v2:ProposedAddressDetails> 
        <v2:Score>93</v2:Score> 
        <v2:Changes>MODIFIED_TO_ACHIEVE_MATCH</v2:Changes> 
        <v2:ResidentialStatus>UNAVAILABLE</v2:ResidentialStatus> 
        <v2:DeliveryPointValidation>CONFIRMED</v2:DeliveryPointValidation> 
        <v2:Address> 
         <v2:StreetLines>425 Morningside Dr</v2:StreetLines> 
         <v2:City>Deerfield</v2:City> 
         <v2:StateOrProvinceCode>WI</v2:StateOrProvinceCode> 
         <v2:PostalCode>53531-9492</v2:PostalCode> 
         <v2:CountryCode>US</v2:CountryCode> 
        </v2:Address> 
        <v2:RemovedNonAddressData/> 
       </v2:ProposedAddressDetails> 
      </v2:AddressResults> 
      <v2:AddressResults> 
       <v2:AddressId>WD</v2:AddressId> 
       <v2:ProposedAddressDetails> 
        <v2:Score>93</v2:Score> 
        <v2:Changes>MODIFIED_TO_ACHIEVE_MATCH</v2:Changes> 
        <v2:ResidentialStatus>UNAVAILABLE</v2:ResidentialStatus> 
        <v2:DeliveryPointValidation>CONFIRMED</v2:DeliveryPointValidation> 
        <v2:CompanyName>Wingra Direct</v2:CompanyName> 
        <v2:Address> 
         <v2:StreetLines>2830 Progress Rd</v2:StreetLines> 
         <v2:City>Madison</v2:City> 
         <v2:StateOrProvinceCode>WI</v2:StateOrProvinceCode> 
         <v2:PostalCode>53716-3338</v2:PostalCode> 
         <v2:CountryCode>US</v2:CountryCode> 
        </v2:Address> 
        <v2:RemovedNonAddressData/> 
       </v2:ProposedAddressDetails> 
      </v2:AddressResults> 
     </v2:AddressValidationReply> 
    </soapenv:Body> 
</soapenv:Envelope> 

回答

0

我無法獲得API工作,所以我最終手動編碼處理SOAP請求和響應。除了沒有正確設置所有標誌的API之外,我還發現FedEx DEV服務器沒有返回住宅狀態,無論選項是什麼(由我們的FedEx Web服務聯繫人確認)。當我們獲得對生產服務器的訪問權時,新代碼就像魅力一樣。

+1

我很驚訝你能夠在Dev服務器上獲得任何工作。有人告訴我,地址驗證在測試服務器上不可用,並且在我進入生產服務器之前無法做任何事情。我甚至無法使用身份驗證在測試服務器上工作。 – 2010-09-14 20:34:08

+0

如果您仍然遇到與FedEx API的地址驗證部分有關的問題,還有其他可供您探索的途徑(無雙關語)。例如,我爲[SmartyStreets](http://www.smartystreets.com)工作,我們提供了一個簡單的地址驗證API。這不是一個廣告:我鼓勵你做一些研究,但我很樂意幫助你解決進一步的地址驗證問題。 – Matt 2012-02-24 18:45:36

2

看來,上選項被忽略,除非您還設置optionSpecified標誌也是如此。

這是我新的代碼選項工程 - 關鍵在於你需要添加選項指定的(財產)=你想每一個真正:

request.Options = New AddressValidationOptions() 
    request.Options.CheckResidentialStatus = True 
    request.Options.CheckResidentialStatusSpecified = True 
    request.Options.VerifyAddresses = True 
    request.Options.VerifyAddressesSpecified = True 
    request.Options.MaximumNumberOfMatches = 5 
    request.Options.StreetAccuracy = AddressValidationAccuracyType.MEDIUM 
    request.Options.DirectionalAccuracy = AddressValidationAccuracyType.MEDIUM 
    request.Options.CompanyNameAccuracy = AddressValidationAccuracyType.MEDIUM 
    request.Options.ConvertToUpperCase = True 
    request.Options.ConvertToUpperCaseSpecified = True 
    request.Options.RecognizeAlternateCityNames = True 
    request.Options.RecognizeAlternateCityNamesSpecified = True 
    request.Options.ReturnParsedElements = True 
    request.Options.ReturnParsedElementsSpecified = True 
+0

我會添加評論,但顯然我的聲望級別不會允許它,這是我唯一的選擇。我剛剛找到解決方案,並將編輯我的答案,以便它有解決方案。 – 2010-08-25 23:29:15

+0

嘗試添加request.Options.CheckResidentialStatusSpecified,並且該標誌至少在傳出的SOAP請求中設置。這也觸發了ProposedAddressDetails元素在SOAP響應中返回。不幸的是,我無法獲得所有居住狀態。 – Sam 2010-08-26 14:22:48

+0

@Sam:剛添加了一些代碼給我的答案,也許這將澄清和幫助。 – 2010-08-26 16:12:41

2

下面是從聯邦快遞技術支持另一種答案:

「地址驗證API不能從測試 環境」。

所以我不確定你是如何得到你的測試帳戶「激活」的地址驗證。假設FedEx系統使用USPS生產地址驗證系統,這就是爲什麼FedEx測試環境無法訪問它。

我不知道我是否相信這100%,但我知道我用有效的憑證擊中了FedEx測試服務器並得到「身份驗證失敗」響應。