2014-05-03 104 views
2

我正在嘗試使用USPS API來驗證地址。我已經完成註冊過程,測試和推廣到生產。USPS API地址驗證失敗

我使用PHP和simplexml_load_file函數進行調用。當我做在PHP中的調用,USPS返回一個錯誤:

[Number] => 80040B1A 
[Description] => API Authorization failure. Verify is not a valid API name for this protocol. 
[Source] => USPSCOM::DoAuth 

如果我複製並粘貼傳遞給使用simplexml_load_file功能的URL,我得到一個成功的響應:

<AddressValidateResponse><Address ID="0"><Address2>1228 E MAIN ST</Address2><City>MONTROSE</City><State>CO</State><Zip5>81401</Zip5><Zip4>5821</Zip4></Address></AddressValidateResponse> 

的網址我m使用是(用戶ID已更改):

http://production.shippingapis.com/ShippingAPI.dll?API=Verify&XML=%3CAddressValidateRequest%20USERID=%123usrid456%27%3E%3CAddress%20ID=%270%27%3E%3CAddress1%3E1228%20East%20Main%20Street%3C/Address1%3E%3CAddress2%3E%3C/Address2%3E%3CCity%3EMontrose%3C/City%3E%3CState%3ECO%3C/State%3E%3CZip5%3E81401%3C/Zip5%3E%3CZip4%3E%3C/Zip4%3E%3C/Address%3E%3C/AddressValidateRequest%3E 

我已經撥打了800次ICCC USPS號碼兩次。文檔缺乏幾個方面,例如,他們說在註冊後,電子郵件將包含測試服務器的URL,但它們不在電子郵件中。此外,不得不打電話尋求支持並每次等待一小時左右都令人沮喪。好的,這麼抱怨。否則,USPS真棒。

我已經閱讀了大量的文章,並嘗試了建議的內容,但一直未能在PHP中進行調用。以下是我已經試過:

  • 進行urlencode提交的網址
  • 進行urlencode整個URL XML字符串
  • 測試和生產服務器
  • 捲曲的,而不是使用simplexml_load_file
  • 我複製從瀏覽器地址欄起作用的url並將其粘貼到PHP代碼中 - 我仍然得到相同的錯誤。

我很茫然,因爲我應該接下來嘗試。特別是當我將url傳遞給simplexml_load_file並將其複製/粘貼到瀏覽器地址欄中時可以正常工作。

這裏是我試過一個片段:

$url = "http://production.shippingapis.com/ShippingAPI.dll?API=Verify&XML=<AddressValidateRequest%20USERID='123usrid456'><Address ID='0'><Address1></Address1><Address2>1228 East Main Street</Address2><City>Montrose</City><State>CO</State><Zip5>81401</Zip5><Zip4></Zip4></Address></AddressValidateRequest>"; 
$addr_data = simplexml_load_file($url); 

用戶ID改變在上面的代碼中

我敢肯定,我失去了一些東西明顯。

在此先感謝!

斯隆

回答

0

隨着HTTP GET請求你不僅發送地址(這大概是在瀏覽器和SimpleXML相同),但一系列的頭太大(如餅乾)。我猜測API也會檢查這些頭文件。對於我來說,指定用戶名是有點奇怪,但是訪問信息(令牌/密鑰/密碼)不是 - 它們不是由您的瀏覽器作爲cookie發送的嗎?重新審視API規範,特別是通用/認證章節;也許你只是忘記了一些隱藏在那些中的先決條件。

這裏就是我想要做的:

  1. 過渡暫時捲曲,所以我可以改變頭。
  2. 使用瀏覽器的網絡調試器(例如Firefox F12-> Net)查看要發送的標頭。
  3. 在curl中設置完全相同的標題並查看它是否有效。如果它不停止使用這種方法。
  4. 逐個刪除標題以查看哪些對成功至關重要。
+0

謝謝。我按照你的建議做了,但是在使用curl時我沒有得到任何結果。我將這些選項設置爲: curl_setopt($ ch,CURLOPT_FRESH_CONNECT,TRUE); \t curl_setopt($ ch,CURLOPT_TRANSFERTEXT,TRUE); \t curl_setopt($ ch,CURLOPT_RETURNTRANSFER,TRUE); \t curl_setopt($ ch,CURLOPT_URL,$ url); \t curl_setopt($ ch,CURLOPT_HEADER,false); \t $ rslt = curl_exec($ ch); $ rslt是空的... –

+0

您可以請求一份Firefox調試器(F12)Net面板列表請求標題的副本嗎?也許我們可以從中找出一些東西。你可以嘗試的另一件事是,如果你把它放到隱私瀏覽窗口中,URL是否也可以工作。 –