USPS API - 使用curl和笨(USPS api - using curl and cod

2019-09-16 22:23发布

我想开发,我在建设一个笨车一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和不进行编码,但没有工作。 任何帮助/建议将不胜感激!

我知道,我一定要近,因为我做的时间得到正确的错误信息,但我必须在这里失去了一些东西!

Answer 1:

该错误响应只是说你是不是auth'd该API。

我认为你需要使用测试的例子,他们提供给测试。 一旦那些在工作,你的API是工作,你可以访问到生产API的。

curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER , false );
curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST , false );

还将以忽略证书错误重要(USPS确实在他们的示例代码基本上是相同的事情 - 他们设置了ActiveX对象忽略证书错误)。

该PDF也说,使用你的浏览器,如果客户端不工作。 你可以做到这一点,看看你可以期望返回什么。

我刚刚注册,以测试这...这似乎至少一个例子是坏了。 但这个例子作品在我的浏览器:

http://testing.shippingapis.com/ShippingAPITest.dll?API=CityStateLookup&XML=<CityStateLookupRequest USERID="xxxxxxx"><ZipCode ID= "0"><Zip5>90210</Zip5></ZipCode></CityStateLookupRequest> 

(替换用户ID)

<CityStateLookupResponse>
<ZipCode ID="0">
<Zip5>90210</Zip5>
<City>BEVERLY HILLS</City>
<State>CA</State>
</ZipCode>
</CityStateLookupResponse>

事情是用的例子:你必须使用取决于它是否是一个SSL API适当的测试服务器。 在它的地址什么是需要使用SSL。 所以,你必须合并与USPS在报名邮件中提供的测试URL的例子。

无论如何,所以检查出上方的网址,让你的代码,你在浏览器中得到的输出相匹配。 一旦这个工作,告诉他们你是LIVE,然后你会得到访问生产的URL和价格查询API。



文章来源: USPS api - using curl and codeigniter