Overview

Packages

  • IllApps
    • Shipsync
  • PHP

Classes

  • IllApps_Shipsync_Block_Adminhtml_Sales_Order_Shipment_Abstract
  • IllApps_Shipsync_Block_Adminhtml_Sales_Order_Shipment_Packages_View
  • IllApps_Shipsync_Block_Adminhtml_Sales_Order_Shipment_Packages_View_Form
  • IllApps_Shipsync_Block_Adminhtml_Sales_Order_Shipment_Packages_View_Items
  • IllApps_Shipsync_Block_Adminhtml_Sales_Order_Shipment_Packages_View_Package
  • IllApps_Shipsync_Block_Adminhtml_Sales_Order_Shipment_View
  • IllApps_Shipsync_Block_Adminhtml_Sales_Order_View
  • IllApps_Shipsync_Block_Adminhtml_Shipsync
  • IllApps_Shipsync_Block_Adminhtml_Shipsync_Option
  • IllApps_Shipsync_Helper_Data
  • IllApps_Shipsync_IndexController
  • IllApps_Shipsync_Model_Mysql4_Setup
  • IllApps_Shipsync_Model_Mysql4_Shipment_Package
  • IllApps_Shipsync_Model_Mysql4_Shipment_Package_Collection
  • IllApps_Shipsync_Model_Sales_Order_Shipment_Package
  • IllApps_Shipsync_Model_Sales_Order_Shipment_Package_Item
  • IllApps_Shipsync_Model_Sales_Quote_Address
  • IllApps_Shipsync_Model_Shipment_Abstract
  • IllApps_Shipsync_Model_Shipment_Package
  • IllApps_Shipsync_Model_Shipment_Request
  • IllApps_Shipsync_Model_Shipment_Response
  • IllApps_Shipsync_Model_Shipment_Result
  • IllApps_Shipsync_Model_Shipping_Carrier_Abstract
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Address
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Package
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Rate
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Ship
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_B13afilingoption
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_Freemethod
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_Label_Image
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_Label_Orientation
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_Label_Stock
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_Method
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_Packaging
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_Rate
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_Ratediscount
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_Residencedelivery
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_Signature
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_Smartpost_Endorsement
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_Smartpost_Indicia
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Source_Unitofmeasure
  • IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Track
  • IllApps_Shipsync_Model_Shipping_Package
  • IllApps_Shipsync_Model_Shipping_Package_Item
  • IllApps_Shipsync_Model_Shipping_Package_Origins
  • IllApps_Shipsync_Model_Shipping_Package_Sort
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: 
  3: /**
  4:  * ShipSync
  5:  *
  6:  * @category   IllApps
  7:  * @package    IllApps_Shipsync
  8:  * @copyright  Copyright (c) 2014 EcoMATICS, Inc. DBA IllApps (http://www.illapps.com)
  9:  * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 10:  */
 11: 
 12: /**
 13:  * IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Address
 14:  */
 15: class IllApps_Shipsync_Model_Shipping_Carrier_Fedex_Address extends IllApps_Shipsync_Model_Shipping_Carrier_Fedex
 16: {
 17:     
 18:     
 19:     protected $_addressRequest;
 20:     protected $_addressResult;
 21:     protected $_addressResultError;
 22:     protected $_addressServiceClient;
 23:     protected $_addressServiceVersion = '2';
 24:     protected $_addressServiceWsdlPath = 'AddressValidationService_v2.wsdl';
 25:     
 26:     
 27:     
 28:     /**
 29:      * validate
 30:      *
 31:      * @param Mage_Sales_Model_Quote_Address $request
 32:      * @return mixed
 33:      */
 34:     public function validate(Mage_Sales_Model_Quote_Address $request)
 35:     {
 36:         $this->_addressServiceClient = $this->_initWebServices($this->_addressServiceWsdlPath);
 37:         
 38:         $this->setAddressRequest($request);
 39:         
 40:         $this->_addressResult = $this->_validateAddress();
 41:         
 42:         return $this->_addressResult;
 43:     }
 44:     
 45:     
 46:     
 47:     /**
 48:      * setAddressRequest
 49:      *
 50:      * @param Mage_Sales_Model_Quote_Address $request
 51:      * @return mixed
 52:      */
 53:     public function setAddressRequest(Mage_Sales_Model_Quote_Address $request)
 54:     {
 55:         // Clean null streets
 56:         foreach ($request->getStreet() as $street) {
 57:             if ($street != '') {
 58:                 $streets[] = $street;
 59:             }
 60:         }
 61:         
 62:         // Set street
 63:         $request->setStreet($streets);
 64:         
 65:         // Set address request
 66:         $this->_addressRequest = $request;
 67:         
 68:         // Return this
 69:         return $this;
 70:     }
 71:     
 72:     
 73:     
 74:     /**
 75:      * getAddressResultError
 76:      *
 77:      * @return mixed
 78:      */
 79:     public function getAddressResultError()
 80:     {
 81:         // If error is set, return msg
 82:         if ($this->_addressResultError) {
 83:             return array(
 84:                 Mage::helper('customer')->__($this->_addressResultError)
 85:             );
 86:         }
 87:         
 88:         return false;
 89:     }
 90:     
 91:     
 92:     
 93:     /**
 94:      * getResidential
 95:      * 
 96:      * @param array $street
 97:      * @param string $postcode
 98:      * @return bool
 99:      */
100:     public function getResidential($street, $postcode)
101:     {
102:         $addressServiceClient  = $this->_initWebServices($this->_addressServiceWsdlPath);
103:         $addressServiceVersion = $this->_addressServiceVersion;
104:         
105:         $request['WebAuthenticationDetail'] = array(
106:             'UserCredential' => array(
107:                 'Key' => $this->getFedexKey(),
108:                 'Password' => $this->getFedexPassword()
109:             )
110:         );
111:         
112:         $request['ClientDetail'] = array(
113:             'AccountNumber' => $this->getFedexAccount(),
114:             'MeterNumber' => $this->getFedexMeter()
115:         );
116:         
117:         $request['TransactionDetail']['CustomerTransactionId'] = '*** Address Validation Request v' . $addressServiceVersion . ' Using PHP ***';
118:         
119:         $request['Version'] = array(
120:             'ServiceId' => 'aval',
121:             'Major' => $addressServiceVersion,
122:             'Intermediate' => '0',
123:             'Minor' => '0'
124:         );
125:         
126:         $request['RequestTimestamp'] = date('c');
127:         
128:         $request['Options'] = array(
129:             'CheckResidentialStatus' => 1,
130:             'MaximumNumberOfMatches' => 1,
131:             'StreetAccuracy' => 'LOOSE',
132:             'DirectionalAccuracy' => 'LOOSE',
133:             'CompanyNameAccuracy' => 'LOOSE',
134:             'ConvertToUpperCase' => 1,
135:             'RecognizeAlternateCityNames' => 1,
136:             'ReturnParsedElements' => 1
137:         );
138:         
139:         $request['AddressesToValidate'] = array(
140:             0 => array(
141:                 'AddressId' => 'Destination',
142:                 'Address' => array(
143:                     'StreetLines' => $street,
144:                     'PostalCode' => $postcode,
145:                     'CountryCode' => 'US'
146:                 )
147:             )
148:         );
149:         
150:         try {
151:             Mage::Helper('shipsync')->mageLog($request, 'address');
152:             $response = $addressServiceClient->addressValidation($request);
153:             Mage::Helper('shipsync')->mageLog($response, 'address');
154:         }
155:         catch (SoapFault $ex) {
156:             $this->_addressResultError = $ex->getMessage();
157:         }
158:         
159:         if (isset($response->AddressResults->ProposedAddressDetails->DeliveryPointValidation) && $response->AddressResults->ProposedAddressDetails->DeliveryPointValidation == 'CONFIRMED') {
160:             if ($response->AddressResults->ProposedAddressDetails->ResidentialStatus == 'RESIDENTIAL') {
161:                 return true;
162:             }
163:             
164:             return false;
165:         } else {
166:             return true;
167:         }
168:     }
169:     
170:     
171:     /**
172:      * isPostOfficeBox
173:      *
174:      * param string $street
175:      * return bool
176:      */
177:     public function isPostOfficeBox($street)
178:     {
179:         if (preg_match('/^(POB\s+|P\s*O\s*Box|Post Office Box|Postal Box|Box|Boite Postal)\s*[0-9a-z]+(-[0-9a-z]+)*/i', (string) $street)) {
180:             return true;
181:         }
182:         return false;
183:     }
184:     
185:     
186:     
187:     /**
188:      * _validateAddress
189:      *
190:      * @return bool
191:      */
192:     protected function _validateAddress()
193:     {
194:         return $this->validateAddress();
195:     }
196:     
197:     
198:     
199:     /**
200:      * validateAddress
201:      * 
202:      * @return bool
203:      */
204:     public function validateAddress()
205:     {
206:         $addressRequest        = $this->_addressRequest;
207:         $addressServiceClient  = $this->_addressServiceClient;
208:         $addressServiceVersion = $this->_addressServiceVersion;
209:         
210:         $request['WebAuthenticationDetail'] = array(
211:             'UserCredential' => array(
212:                 'Key' => $this->getFedexKey(),
213:                 'Password' => $this->getFedexPassword()
214:             )
215:         );
216:         
217:         $request['ClientDetail'] = array(
218:             'AccountNumber' => $this->getFedexAccount(),
219:             'MeterNumber' => $this->getFedexMeter()
220:         );
221:         
222:         $request['TransactionDetail']['CustomerTransactionId'] = '*** Address Validation Request v' . $addressServiceVersion . ' Using PHP ***';
223:         
224:         $request['Version'] = array(
225:             'ServiceId' => 'aval',
226:             'Major' => $addressServiceVersion,
227:             'Intermediate' => '0',
228:             'Minor' => '0'
229:         );
230:         
231:         $request['RequestTimestamp'] = date('c');
232:         
233:         $request['Options'] = array(
234:             'CheckResidentialStatus' => 1,
235:             'MaximumNumberOfMatches' => 5,
236:             'StreetAccuracy' => 'LOOSE',
237:             'DirectionalAccuracy' => 'LOOSE',
238:             'CompanyNameAccuracy' => 'LOOSE',
239:             'ConvertToUpperCase' => 1,
240:             'RecognizeAlternateCityNames' => 1,
241:             'ReturnParsedElements' => 1
242:         );
243:         
244:         $request['AddressesToValidate'] = array(
245:             0 => array(
246:                 'AddressId' => 'Destination',
247:                 'Address' => array(
248:                     'StreetLines' => $addressRequest->getStreet(),
249:                     'City' => $addressRequest->getCity(),
250:                     'StateOrProvinceCode' => $addressRequest->getRegionCode(),
251:                     'CountryCode' => $addressRequest->getCountryCode(),
252:                     'PostalCode' => $addressRequest->getPostcode()
253:                 )
254:             )
255:         );
256:         
257:         try {
258:             Mage::Helper('shipsync')->mageLog($request, 'address');
259:             $response = $addressServiceClient->addressValidation($request);
260:             Mage::Helper('shipsync')->mageLog($response, 'address');
261:         }
262:         catch (SoapFault $ex) {
263:             $this->_addressResultError = $ex->getMessage();
264:         }
265:         
266:         return $this->_parseWsdlResponse($response);
267:     }
268:     
269:     
270:     
271:     /**
272:      * _parseWsdlResponse
273:      *
274:      * @param object $response
275:      * @return bool
276:      */
277:     protected function _parseWsdlResponse($response)
278:     {
279:         $addressResult = $this->_addressRequest;
280:         
281:         if ($response->HighestSeverity == 'ERROR' || $response->HighestSeverity == 'FAILURE') {
282:             $errorMsg = '';
283:             
284:             if (is_array($response->Notifications)) {
285:                 foreach ($response->Notifications as $notification) {
286:                     $errorMsg .= $notification->Severity . ': ' . $notification->Message . '<br />';
287:                 }
288:             } elseif (($response->Notifications->Message == 'General Error') && Mage::getStoreConfig('carriers/fedex/test_mode')) {
289:                 $errorMsg .= 'ERROR: FedEx Testing servers are temporarily unavailable. Please try again in a few moments.<br />';
290:             } else {
291:                 $errorMsg .= $response->Notifications->Severity . ': ' . $response->Notifications->Message . '<br />';
292:             }
293:             
294:             $this->_addressResultError = $errorMsg;
295:             
296:             return true;
297:         } elseif (is_array($response->AddressResults->ProposedAddressDetails)) {
298:             $address = "";
299:             
300:             foreach ($response->AddressResults->ProposedAddressDetails as $detail) {
301:                 $address .= $detail->Address->StreetLines . "\n" . $detail->Address->City . ", " . $detail->Address->StateOrProvinceCode . " " . $detail->ParsedAddress->ParsedPostalCode->Elements[0]->Value . "\n\n";
302:             }
303:             
304:             $this->_addressResultError = "We're sorry, but your address was not found.  However, we found a few close matches :\n\n" . $address . "Please correct your address and resubmit.";
305:         } elseif ($response->AddressResults->ProposedAddressDetails->DeliveryPointValidation == 'CONFIRMED') {
306:             if (is_array($response->AddressResults->ProposedAddressDetails->ParsedAddress->ParsedPostalCode->Elements)) {
307:                 $postcode = $response->AddressResults->ProposedAddressDetails->ParsedAddress->ParsedPostalCode->Elements[0]->Value;
308:             } else {
309:                 $postcode = $response->AddressResults->ProposedAddressDetails->ParsedAddress->ParsedPostalCode->Elements->Value;
310:             }
311:             
312:             $addressResult->setStreet($response->AddressResults->ProposedAddressDetails->Address->StreetLines);
313:             $addressResult->setCity($response->AddressResults->ProposedAddressDetails->Address->City);
314:             $addressResult->setPostcode($postcode);
315:             $addressResult->setCountryId($response->AddressResults->ProposedAddressDetails->Address->CountryCode);
316:             $addressResult->setRegionCode($response->AddressResults->ProposedAddressDetails->Address->StateOrProvinceCode);
317:         } elseif ($response->AddressResults->ProposedAddressDetails->DeliveryPointValidation == 'UNCONFIRMED' && $response->AddressResults->ProposedAddressDetails->ResidentialStatus == 'INSUFFICIENT_DATA') {
318:             if (is_array($response->AddressResults->ProposedAddressDetails->ParsedAddress->ParsedPostalCode->Elements)) {
319:                 $postcode = $response->AddressResults->ProposedAddressDetails->ParsedAddress->ParsedPostalCode->Elements[0]->Value;
320:             } else {
321:                 $postcode = $response->AddressResults->ProposedAddressDetails->ParsedAddress->ParsedPostalCode->Elements->Value;
322:             }
323:             
324:             $addressResult->setStreet($response->AddressResults->ProposedAddressDetails->Address->StreetLines);
325:             $addressResult->setCity($response->AddressResults->ProposedAddressDetails->Address->City);
326:             $addressResult->setPostcode($postcode);
327:             $addressResult->setCountryId($response->AddressResults->ProposedAddressDetails->Address->CountryCode);
328:             $addressResult->setRegionCode($response->AddressResults->ProposedAddressDetails->Address->StateOrProvinceCode);
329:         } else {
330:             $this->_addressResultError = 'Invalid address. Please check to make sure it is correct and try again.';
331:         }
332:         
333:         return $addressResult;
334:     }
335:     
336: }
337: 
shipsync-community API documentation generated by ApiGen 2.8.0