Hello:
Conway just released a PHP page that can be used to intergrate to a customers website and they can get shipping quotes on the customers website as opposed to having to leave the customers website.
I need help creating a module that i can import into zencart so that the customer can provide this method of shipping. Here is the code for the rate quote page provided by conway.
Any thoughts?PHP Code:<?php
/*
Con-way XML Sample Code for PHP - Rating interface
This code has been tested on PHP 4.3.XX and PHP 5.XX
-----------------
TODO:
* replace the USERNAME and PASSWORD String values below
with your Con-way username and password
* to get customer-specific discounts, replace CUSTNMBR String value
below with your Con-way customer number
NOTE: you must have the cURL libraries installed with PHP on your server--
If you need them, see your System Administrator, who can get then at
http://curl.haxx.se/download.html
-----------------
Send questions to Con-way XML Support at [email protected]
*/
$title = "Rating";
$requestType = "RateRequest";
$requestUrl = "https://www.Con-way.com/XMLj/X-Rate";
// replace the USERNAME and PASSWORD String values below with your Con-way username and password
$username = "USERNAME";
$password = "PASSWORD";
// to get a customer-specific discount, replace the CUSTNMBR string below with
// your Con-way customer number, then uncomment the <CustNmbr> line below.
$custNmbr = "CUSTNMBR";
$today = date("m/d/y");
// array of input data
$myInput = $_GET;
// If you don't pass data in as a GET variables, hard code them here:
if (! isset($myInput['origZip'])) {
$myInput['origZip'] = "19348";
}
if (! isset($myInput['destZip'])) {
$myInput['destZip'] = "97202";
}
// array of elements you want to query from the XML Response
$myElements = array('TotalCharge', 'Discount', 'TotalAccessorialCharges', 'NetCharge', 'TransitTime');
/*
Build XML Request
In actual use, you would probably populate the XML Request
parameters (Weights, Classes, Zip Codes, etc.) from data submitted
via an on-line order form or database.
For this sample we will just hard code some dummy data.
*/
$itemArray = array(); //Your commodity items, maximum of 4 - add as needed
$itemArray[] = array('class'=>'775', 'weight'=>'667');
$itemArray[] = array('class'=>'100', 'weight'=>'555');
$accArray = array(); // Your accessorial services - add as needed
$accArray[] = "SSC";
$accArray[] = "DNC";
$accArray[] = "GUR";
extract($myInput);
$xmlRequest="<RateRequest>" .
"<OriginZip country=\"us\">$origZip</OriginZip>" .
"<DestinationZip country=\"us\">$destZip</DestinationZip>";
// To get customer specific discount, uncomment this line:
// $xmlRequest .= "<CustNmbr shipcode=\"S\">$custNmbr</CustNmbr>";
$xmlRequest .= "<ChargeCode>P</ChargeCode>" .
"<DiscountRate>100</DiscountRate>" .
"<EffectiveDate>$today</EffectiveDate>";
foreach ($itemArray as $item) { // Add commodity items to the XML Request
extract($item);
$xmlRequest .= "<Item>" .
"<CmdtyClass>$class</CmdtyClass>" .
"<Weight unit=\"lbs\">$weight</Weight>" .
"</Item>";
}
foreach ($accArray as $acc) { // Add accessorials to the XML Request
$xmlRequest .= "<Accessorial>$acc</Accessorial>";
}
$xmlRequest .= "</RateRequest>";
//Convert characters to proper format for HTTP POST
$xmlRequest = urlencode($xmlRequest);
// open synchronous connection to Con-way servlet and set options
$urlConn = curl_init ($requestUrl);
curl_setopt ($urlConn, CURLOPT_POST, 1);
curl_setopt ($urlConn, CURLOPT_SSL_VERIFYPEER, false); // May be needed for SSL behind a firewall
curl_setopt ($urlConn, CURLOPT_HTTPHEADER, array("Content-type: application/x-www-form-urlencoded"));
curl_setopt ($urlConn, CURLOPT_USERPWD, $username.":".$password);
curl_setopt ($urlConn, CURLOPT_POSTFIELDS, "$requestType=$xmlRequest");
// Get the XML Response
ob_start(); // prevent the buffer from being displayed
curl_exec($urlConn);
$xmlResponse = ob_get_contents();
ob_end_clean();
curl_close($urlConn); // close the connection
// Parse the XML Response
$parser= xml_parser_create();
xml_parse_into_struct($parser,$xmlResponse,$xmlVals);
xml_parser_free($parser);
// This function will return an array of the values of an element
// given the $vals and $index arrays, and the element name
function getElementValue($xmlVals, $elName) {
$elValue = null;
foreach ($xmlVals as $arrkey => $arrvalue) {
foreach ($arrvalue as $key => $value) {
if ($value==strtoupper($elName)){
$elValue[] = $arrvalue['value'];
}
}
}
return $elValue;
}
// Build the HTML page
echo "
<html>
<head>
<title>Sample PHP for Con-way XML $title></title>
<script language=\"Javascript\" type=\"text/javascript\">
<!--
function erase(object) {
object.value=\"\";
}
// -->
</script>
</head>
<body text=\"SlateBlue\">
<center>
<B><font face=\"arial\" size=+1><I>Sample PHP Con-way XML $title</I></font></B>
</center>
<br>
<form action=\"". $_SERVER['PHP_SELF'] ."\" method=\"get\">
<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
";
foreach ($myInput as $key => $value) {
if ($key != "Submit" && strlen($value))
echo "
<tr>
<td><b>" . strtoupper($key) . ": </b></td>
<td><input type=\"text\" name=\"$key\" value=\"$value\"
onFocus=\"erase(this);\" onClick=\"erase(this);\"></td>
</tr>
";
}
echo "
<tr><td> </td><td> </td></tr>
<tr>
<td> </td>
<td><input type=\"submit\" name=\"Submit\" value=\"Process $title\"></td>
</tr>
</table>
</form>
<hr>
";
// Extract your element values from the XML Response
$elCount = count(getElementValue($xmlVals, $myElements[0])); // total occurrences
// The outer loop iterates the total number of occurrences of your first element
for ($i=0; $i < $elCount; $i++) {
// The inner loop iterates all of your elements, for each occurrence of the first
foreach ($myElements as $myEl) {
$myVals = getElementValue($xmlVals, $myEl);
echo "<b>Value of <$myEl> is: $myVals[$i]</b><BR>";;
}
echo '<br>';
}
echo "<b>Here is the dump of the XML output for $title:</b>" .
"<code>$xmlResponse</code><br><br>" .
"<b>And here it is displayed as a formatted array:</b><br>";
print_r($xmlVals);
echo
"</body>" .
"</html>";
?>



