title: XML Request and Response with PHP for USPS Rate Calculator
body: <p>I have been trying to build a USPS Rate Calculator for a site, but unfortunately the test url from USPS does not seem to work. In any case, my code does not return anything at the moment, not even the error message about the url...</p>
  
  <p>Would you take a look to see if I am doing the right thing? I get a bit lost with XML on PHP...</p>
  
  <p>CODE:</p>
  
  <pre><code>$zip = 90002;
  $pounds = 0.1;
  
  function USPSParcelRate($pounds,$zip) {
  $url = "https://secure.shippingapis.com/ShippingAPITest.dll";
  curl_setopt($ch, CURLOPT_URL,$url);
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  // parameters to post
  curl_setopt($ch, CURLOPT_POST, 1);
  $xml = "API=RateV4&amp;XML=&lt;RateV4Request USERID='USERNAME' &gt;
  &lt;Revision/&gt;
       &lt;Package ID='1ST'&gt;
            &lt;Service&gt;PRIORITY&lt;/Service&gt;
            &lt;ZipOrigination&gt;10025&lt;/ZipOrigination&gt;
            &lt;ZipDestination&gt;$zip&lt;/ZipDestination&gt;
            &lt;Pounds&gt;$pounds&lt;/Pounds&gt;
            &lt;Ounces&gt;0&lt;/Ounces&gt;
            &lt;Container&gt;&lt;/Container&gt;
            &lt;Size&gt;REGULAR&lt;/Size&gt;
            &lt;Width&gt;&lt;/Width&gt;
            &lt;Length&gt;&lt;/Length&gt;
            &lt;Height&gt;&lt;/Height&gt;
            &lt;Girth&gt;&lt;/Girth&gt;
       &lt;/Package&gt;
  &lt;/RateV4Request&gt;";
  // send the POST values to USPS
  curl_setopt($ch, CURLOPT_POSTFIELDS,$xml);
      $result = curl_exec($ch);
      $data = strstr($result, '&lt;?');
      $xml_parser = xml_parser_create();
      xml_parse_into_struct($xml_parser, $data, $vals, $index);
      xml_parser_free($xml_parser);
      $params = array();
      $level = array();
      echo "TEST";
      foreach ($vals as $xml_elem) {
          if ($xml_elem['type'] == 'open') {
              if (array_key_exists('attributes',$xml_elem)) {
                  list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
              } else {
              $level[$xml_elem['level']] = $xml_elem['tag'];
              }
          }
          if ($xml_elem['type'] == 'complete') {
          $start_level = 1;
          $php_stmt = '$params';
          while($start_level &lt; $xml_elem['level']) {
              $php_stmt .= '[$level['.$start_level.']]';
              $start_level++;
          }
          $php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
          eval($php_stmt);
          }
      }
      curl_close($ch);
      echo '&lt;pre&gt;'; print_r($params); echo'&lt;/pre&gt;'; // Uncomment to see xml tags
      return $params['RateV4Response']['1ST']['1']['RATE'];
  }
  
  USPSParcelRate($pounds,$zip)
  </code></pre>