我正在尝试使用 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在上面的代码中更改
我确定我遗漏了一些明显的东西。
提前致谢!
仕龙