我尝试使用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工作中进行调用。以下是我尝试过的内容:
我不知道接下来应该尝试什么。特别是当我把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 :(得分:0)
除了HTTP GET请求,您不仅要发送地址(在浏览器和simpleXML中大概相同),还要发送一堆标题(例如cookie)。我猜测API也会检查这些标头。对我来说有点奇怪的是,指定了用户名但访问信息(令牌/密钥/密码)不是 - 它们不是由浏览器作为cookie发送的?重新审视API规范,尤其是通用/身份验证章节;也许你只是忘记了那些藏在那些中的先决条件。
这就是我要做的事情: