2

我正在尝试使用 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>

我正在使用的网址是(用户 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 提交的 url 中的 XML 字符串
  • urlencode 整个网址
  • 测试和生产服务器
  • curl 而不是 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在上面的代码中更改

我确定我遗漏了一些明显的东西。

提前致谢!

仕龙

4

1 回答 1

0

除了 HTTP GET 请求,您不仅会发送地址(在您的浏览器和 simpleXML 中大概是相同的),而且还会发送一堆标头(例如 cookie)。我冒昧地猜测 API 也会检查这些标头。指定用户名但未指定访问信息(令牌/密钥/密码)对我来说有点奇怪 - 它们不是由您的浏览器作为 cookie 发送的吗?重新审视 API 规范,尤其是通用/认证章节;也许您只是忘记了一些隐藏在其中的先决条件。

这是我要做的:

  1. 暂时过渡到 curl 以便我可以更改标题。
  2. 使用浏览器的网络调试器(例如 Firefox F12->Net)查看发送了哪些标头。
  3. 在 curl 中设置完全相同的标题,看看它是否有效。如果它不停止使用这种方法。
  4. 一个一个地删除标题,看看哪些是成功的关键。
于 2014-05-04T00:22:41.323 回答