예제 #1
0
파일: dhl.php 프로젝트: noikiy/owaspbwa
 function get_signature($order_id, $delivery_date)
 {
     global $vmLogger;
     global $VM_LANG, $mosConfig_absolute_path;
     /* Retrieve waybill information from database */
     $dbl = new ps_DB();
     $q = "SELECT tracking_number, label_is_generated, is_international, ";
     $q .= "have_signature ";
     $q .= "FROM #__{vm}_shipping_label ";
     $q .= "WHERE order_id = '" . $order_id . "'";
     $dbl->query($q);
     if (!$dbl->next_record() || !$dbl->f("label_is_generated")) {
         return "couldn't find label info for order #" . $order_id;
     }
     if ($dbl->f('have_signature')) {
         return true;
     }
     $tracking_number = $dbl->f('tracking_number');
     require_once CLASSPATH . "shipping/" . __CLASS__ . ".cfg.php";
     $dhl_url = "https://eCommerce.airborne.com/";
     if (DHL_TEST_MODE == 'TRUE') {
         $dhl_url .= "ApiLandingTest.asp";
     } else {
         $dhl_url .= "ApiLanding.asp";
     }
     require_once $mosConfig_absolute_path . '/includes/domit/xml_domit_lite_include.php';
     $xmlReq = new DOMIT_Lite_Document();
     $xmlReq->setXMLDeclaration('<?xml version="1.0"?>');
     $root =& $xmlReq->createElement('eCommerce');
     $root->setAttribute('action', 'Request');
     $root->setAttribute('version', '1.1');
     $xmlReq->setDocumentElement($root);
     $requestor =& $xmlReq->createElement('Requestor');
     $id =& $xmlReq->createElement('ID');
     $id->setText(DHL_ID);
     $requestor->appendChild($id);
     $password =& $xmlReq->createElement('Password');
     $password->setText(DHL_PASSWORD);
     $requestor->appendChild($password);
     $root->appendChild($requestor);
     /* Signature Request */
     $signature =& $xmlReq->createElement('Signature');
     $signature->setAttribute('action', 'Get');
     $signature->setAttribute('version', '1.0');
     $shipment =& $xmlReq->createElement('Shipment');
     $nbr =& $xmlReq->createElement('TrackingNbr');
     $nbr->setText($tracking_number);
     $shipment->appendChild($nbr);
     $delivery =& $xmlReq->createElement('Delivery');
     $date =& $xmlReq->createElement('Date');
     $start =& $xmlReq->createElement('Start');
     $start->setText($delivery_date);
     $date->appendChild($start);
     $end =& $xmlReq->createElement('End');
     $end->setText($delivery_date);
     $date->appendChild($end);
     $delivery->appendChild($date);
     $shipment->appendChild($delivery);
     $signature->appendChild($shipment);
     $root->appendChild($signature);
     //		$vmLogger->err($xmlReq->toNormalizedString());
     if (function_exists("curl_init")) {
         $CR = curl_init();
         curl_setopt($CR, CURLOPT_URL, $dhl_url);
         curl_setopt($CR, CURLOPT_POST, 1);
         curl_setopt($CR, CURLOPT_FAILONERROR, true);
         curl_setopt($CR, CURLOPT_POSTFIELDS, $xmlReq->toString());
         curl_setopt($CR, CURLOPT_RETURNTRANSFER, 1);
         $xmlResult = curl_exec($CR);
         $error = curl_error($CR);
         curl_close($CR);
         if (!empty($error)) {
             return false;
         }
     }
     // XML Parsing
     $xmlResp = new DOMIT_Lite_Document();
     if (!$xmlResp->parseXML($xmlResult, false, true)) {
         return false;
     }
     //		$vmLogger->err($xmlResp->toNormalizedString());
     // Check for success or failure.
     $result_code_list =& $xmlResp->getElementsByPath('//Result/Code');
     $result_code =& $result_code_list->item(0);
     $result_desc_list =& $xmlResp->getElementsByPath('//Result/Desc');
     $result_desc =& $result_desc_list->item(0);
     if ($result_code == NULL) {
         $vmLogger->debug($VM_LANG->_('PHPSHOP_SHIPPING_METHOD_DHL_MISSING_RESULT') . "\n" . $xmlResp->toNormalizedString());
         return false;
     }
     /* 0 is the code for success with viewing a signature. */
     if ($result_code->getText() != 0) {
         $err_msg = '<br /><span class="message">' . $result_desc->getText() . ' [code ' . $result_code->getText() . ']' . '</span>';
         // display an error line for each fault
         $fault_node_list =& $xmlResp->getElementsByPath('//Faults/Fault');
         if ($fault_node_list->getLength() > 0) {
             $err_msg .= '<ul>';
         }
         for ($i = 0; $i < $fault_node_list->getLength(); $i++) {
             $fault_node =& $fault_node_list->item($i);
             $fault_code_node_list =& $fault_node->getElementsByTagName('Code');
             $fault_desc_node_list =& $fault_node->getElementsByTagName('Desc');
             $fault_code_node =& $fault_code_node_list->item(0);
             $fault_desc_node =& $fault_desc_node_list->item(0);
             $err_msg .= '<li>' . $fault_desc_node->getText() . ' [code ' . $fault_code_node->getText() . ']</li>';
         }
         if ($fault_node_list->getLength() > 0) {
             $err_msg .= '</ul>';
         }
         //			echo $err_msg;
         return false;
     }
     $signature_image_node_list =& $xmlResp->getElementsByPath('//Signature/Image');
     $signature_image_node =& $signature_image_node_list->item(0);
     if ($signature_image_node == NULL) {
         return false;
     }
     $signature_image = $signature_image_node->getText();
     /*
      * insert signature image into database and mark that the signature
      * has been retrieved.
      */
     $q = "UPDATE #__{vm}_shipping_label ";
     $q .= "SET ";
     $q .= "have_signature='1', ";
     $q .= "signature_image='" . $signature_image . "' ";
     $q .= "WHERE order_id = '" . $order_id . "'";
     $dbnl = new ps_DB();
     $dbnl->query($q);
     $dbnl->next_record();
     return true;
 }