我试图使用USPS来验证一个地址。我已经通过了注册过程,测试和推广到生产。
我使用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>我使用的url是(用户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中无法调用。以下是我尝试过的:
我不知道下一步该尝试什么。特别是当我将传递给simplexml_load_file的url复制/粘贴到浏览器地址栏中时,它可以正常工作。
下面是我试过的一个片段:
$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
我肯定我漏掉了一些显而易见的东西。
提前感谢!
斯隆
发布于 2014-05-04 00:22:41
除了HTTP请求之外,您不仅发送地址(在浏览器和simpleXML中可能是相同的),而且还发送一堆头(例如cookie)。我猜测API也会检查这些头。对于我来说,指定用户名是有点奇怪的,但是访问信息(令牌/密钥/密码)不是--它们不是由浏览器作为cookie发送的吗?重新看一下API规范,特别是一般/身份验证章节;也许您只是忘记了隐藏在这些规范中的一些先决条件。
我会这样做:
https://stackoverflow.com/questions/23451059
复制相似问题