我想开发,我在建设一个笨车一USPS率计算器。 我有收到来自USPS测试服务器和他们的API得到成功响应的问题。 我也打电话跟我的问题,显然,他们不希望提供给任何人试图创建一个自定义解决方案的任何支持。 为了使它更加混乱,他们告诉我,我需要知道可以在他们找到开发指南v3.pdf ,但在它他们陈述:
第3步:运行“罐头”从测试服务器测试
适用的API:所有
下一步是测试您的API接口。 作为一个注册用户的API您已被授予访问航运API测试服务器。 重要提示:测试服务器设置为只接受预先定义的XML数据的一个子集,并返回本文档中提供的预先定义的XML响应。
如果您已经成功地测试了您的API,并有机会获得到生产服务器,请跳过此步骤并继续第5步:从生产服务器运行“样本”。
这里的问题是,他们不提供任何“预先定义的XML数据的子集”的举手。 他们提供测试样品,但他们似乎是专为生产服务器,你只可以访问乳清您成功测试的测试服务器上(在下面我的剧本,我有这些样品,我不成功地设法之一)。 因此,我指的是美国邮政利率计算器v1-5-1.pdf ,他们给你具体的测试样品的交易。 在最好的情况,我会得到一个错误响应,指出:
<Error>
<Number>80040b1a</Number>
<Description>Authorization failure. You are not authorized to connect to this server. </Description>
<Source>UspsCom:: DoAuth</Source>
</Error>
我知道人们已经解决了这一点,有几个在这里关闭与此类似的问题,但他们没有表现出解决方案。 我的代码如下:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Usps_curl extends CI_Controller {
public function index()
{
$devurl = "testing.shippingapis.com/ShippingAPITest.dll";
$puburl = "https://secure.shippingapis.com/ShippingAPITest.dll";
$service = "RateV4";
// ALTHOUGH THE USPS DEV GUIDE V3 SAYS
// $xml = '<RateV4Request USERID="225XXXXX5943">
// <Revision>2</Revision>
// <Package ID="1">
// <Service>PRIORITY</Service>
// <Container>FLAT RATE BOX</Container>
// <ZipOrigination>20012</ZipOrigination>
// <ZipDestination>20007</ZipDestination>
// <Pounds>1</Pounds>
// <Ounces>0.0</Ounces>
// <Size>REGULAR</Size>
// </Package>
// </RateV4Request>';
// THIS IS AN EXACT EXAMPLE PROVIDED IN THE USPS DEV GUIDE V3 - BUT I BELIEVE IT IS ONE OF THE FOUR "CANNED" TEST FOR THE PRODUCTION SERVER
//$xml = '<AddressValidateRequest USERID="225XXXXX5943">
// <Address ID="0">
// <Address1></Address1>
// <Address2>6406 Ivy Lane</Address2>
// <City>Greenbelt</City>
// <State>MD</State>
// <Zip5></Zip5>
// <Zip4></Zip4>
// </Address>
// </AddressValidateRequest>';
// THIS IS THE SAMPLE CODE FROM USPS RATE CALCULATORS V1-5-1 PDF
$xml = rawurlencode('<RateV4Request USERID="225XXXXX5943">
<Revision>2</Revision>
<Package ID="1ST">
<Service>FIRST CLASS</Service>
<FirstClassMailType>LETTER</FirstClassMailType>
<ZipOrigination>44106</ZipOrigination>
<ZipDestination>20770</ZipDestination>
<Pounds>0</Pounds>
<Ounces>3.5</Ounces>
<Container/>
<Size>REGULAR</Size>
<Machinable>true</Machinable>
</Package>
<Package ID="2ND">
<Service>PRIORITY</Service>
<ZipOrigination>44106</ZipOrigination>
<ZipDestination>20770</ZipDestination>
<Pounds>1</Pounds>
<Ounces>8</Ounces>
<Container>NONRECTANGULAR</Container>
<Size>LARGE</Size>
<Width>15</Width>
<Length>30</Length>
<Height>15</Height>
<Girth>55</Girth>
<Value>1000</Value>
<SpecialServices>
<SpecialService>1</SpecialService>
</SpecialServices>
</Package>
<Package ID="3RD">
<Service>ALL</Service>
<ZipOrigination>90210</ZipOrigination>
<ZipDestination>96698</ZipDestination>
<Pounds>8</Pounds>
<Ounces>32</Ounces>
<Container/>
<Size>REGULAR</Size>
<Machinable>true</Machinable>
<ShipDate>13-Dec-2010</ShipDate>
</Package>
</RateV4Request>');
$request = $devurl . "?API=" . $service . "&xml=" . $xml;
// echo "<pre>";
// print_r($request);
// die;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// echo "<pre>";
// print_r($response);
// echo "</pre>";
}
}
/* End of file usps_curl.php */
/* Location: ./application/controllers/usps_curl.php */
正如你所看到的,我有不同的字符串评论和注释。 我曾尝试每一种与rawurlencode,进行urlencode和不进行编码,但没有工作。 任何帮助/建议将不胜感激!
我知道,我一定要近,因为我做的时间得到正确的错误信息,但我必须在这里失去了一些东西!