bebeboutik/modules/lapostews/webservice2.php

334 lines
12 KiB
PHP
Raw Normal View History

2016-01-04 12:49:26 +01:00
<?php
if(!defined('_PS_VERSION_')) {
exit;
}
class WS_ServiceCallContextVO {
public $dateDeposite; // dateTime
//~ public $dateValidation; // dateTime
public $returnType = 'CreatePDFFile'; // RequestTypeVO, CreatePDFFile / ReturnPDFInResponse
public $serviceType; // string
public $crbt = FALSE; // bool
//~ public VATCode; // int
//~ public VATPercentage; // int
//~ public VATAmount; // int
//~ public transportationAmount; // int
//~ public totalAmount; // int, oblig pour Andorre
//public $portPaye = FALSE; // bool
//~ public FTD; // bool
//~ public FTDAmount; // int
//~ public returnOption; // bool
//~ public returnOptionAmount; // int
public function __construct() {
$this->serviceType = (Module::isInstalled('socolissimo')? 'SO': 'DOM');
$this->dateDeposite = date('Y-m-d\TH:i:s.000P');
}
}
class WS_ExpEnvVO {
public $alert = 'none'; // AlertTypeVO
public $addressVO; // AddressVO
}
class WS_AddressVO {
//~ public $companyName; // string
//~ public $Civility; // string
//~ public $Name; // string
//~ public $Surname; // string
//~ public $line0; // string
//~ public $line1; // string
public $line2 = ''; // string
//~ public $line3; // string
//~ public $phone; // string, not required for DOM or DOS only
//~ public $MobileNumber; // string
//~ public $DoorCode1; // string
//~ public $DoorCode2; // string
//~ public $Interphone; // string
//~ public $country; // string
public $countryCode; // string
public $city; // string
public $email; // string
public $postalCode; // string
}
class WS_DestEnvVO {
public $alert = 'none'; // AlertTypeVO
public $addressVO; // AddressVO
public $codeBarForreference = FALSE; // bool
public $deliveryError = FALSE; // bool
}
class WS_ServiceCallContextV2 extends WS_ServiceCallContextVO {
//~ public $commandNumber; // string
public $commercialName; // string
public function __construct() {
parent::__construct();
$this->commercialName = Configuration::get('LAPOSTEWS_COMMERCIALNAME', 'ONLINE SHOP');
}
}
class WS_Letter {
public $password; // string, not null
public $contractNumber; // int, not null
// public $profil; // string
public $service; // ServiceCallContextV2
public $parcel; // ParcelVO
public $dest; // DestEnvVO
public $exp; // ExpEnvVO
public function __construct() {
$this->contractNumber = (int) Configuration::get('LAPOSTEWS_API_CONTRACT');
$this->password = Configuration::get('LAPOSTEWS_API_PASSWORD');
}
}
class WS_GetLetterColissimoRequest {
public $letter; // Letter
public function __construct($letter=NULL) {
$this->letter = $letter;
}
}
class WS_ParcelVO {
public $insuranceRange = '00'; // string, not null
//~ public $typeGamme; // string, not null
//~ public $parcelNumber; // string, not null
//~ public $returnTypeChoice; // int, not null
//~ public $insuranceValue; // int, not null
//~ public $recommendationLevel; // string, not null
//~ public $RecommendationAmount; // int
public $weight = 0.01; // float, not null, /!\ décimales si > 0 uniquement
public $horsGabarit = FALSE;
//~ public $HorsGabaritAmount; // int
public $DeliveryMode = 'DOM'; // DeliveryModeVO: DOM, RDV, BPR, ACP, CDI, A2P, MRL, CIT, DOS
//public $ReturnReceipt = FALSE; // bool
//public $Recommendation = FALSE; // bool
//~ public $Instructions; // string
//public $RegateCode = ''; // string, vide si domicile, sinon point de livraison
//~ public $contents; // ContentsVO, not null, required if Andorre
}
class Parcel {
public $mode;
public $parcelVO;
public $getLetterColissimoRequest;
public $letter;
public $serviceCallContextV2;
public $order;
public function __construct() {
$this->mode = (int) Configuration::get('LAPOSTEWS_MODE'); // 0: test, 1: production
$this->serviceCallContextV2 = new WS_ServiceCallContextV2();
$this->parcelVO = new WS_ParcelVO();
$this->letter = new WS_Letter();
$this->letter->parcel = $this->parcelVO;
$this->letter->service = $this->serviceCallContextV2;
$this->letter->dest = new WS_DestEnvVO();
$this->letter->exp = new WS_ExpEnvVO();
}
public function attachOrder($id_order) {
global $cookie;
$this->order = new Order($id_order);
if(Validate::isLoadedObject($this->order)) {
$this->serviceCallContextV2->commandNumber = $this->order->id;
$dst_customer = new Customer($this->order->id_customer);
$dst_address = new Address($this->order->id_address_invoice);
$dst_country = new Country($dst_address->id_country);
$dst_address_ws = new WS_AddressVO();
if($dst_address->company != '') {
$dst_address_ws->companyName = substr($dst_address->company, 0, 32);
}
$dst_address_ws->Name = (string) substr($dst_address->firstname, 0, 32);
$dst_address_ws->Surname = (string) substr(strtoupper($dst_address->lastname), 0, 32);
$dst_address_ws->email = (string) $dst_customer->email;
$dst_address_ws->postalCode = (string) $dst_address->postcode;
$dst_address_ws->city = (string) substr(strtoupper($dst_address->city), 0, 32);
if(strtolower($dst_country->name[$cookie->id_lang]) == 'monaco') {
$dst_address_ws->countryCode = 'FR';
} else {
$dst_address_ws->countryCode = (string) $dst_country->iso_code;
}
$dst_address_ws->country = (string) substr($dst_country->name[$cookie->id_lang], 0, 32);
/*if(Module::isInstalled('socolissimo') && ($so_data = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.'socolissimo_delivery_info`
WHERE `id_cart` = '.(int) $this->order->id_cart.'
AND `id_customer` = '.(int) $this->order->id_customer.'
'))) {
$dst_address_ws->email = $so_data['ceemail'];
$dst_address_ws->Name = substr($so_data['prfirstname'], 0, 32);
$dst_address_ws->Surname = substr($so_data['prname'], 0, 32);
$address_lines = array();
for($i = 1; $i < 5; $i++) {
if(($line = (string) substr($so_data['pradress'.$i], 0, 32)) != '') {
$address_lines[] = trim($line);
}
}
if(count($address_lines) == 1) {
$dst_address_ws->line2 = $address_lines[0];
} elseif(count($address_lines) == 2) {
$dst_address_ws->line2 = $address_lines[0];
$dst_address_ws->line3 = $address_lines[1];
} elseif(count($address_lines) == 3) {
$dst_address_ws->line0 = $address_lines[0];
$dst_address_ws->line2 = $address_lines[1];
$dst_address_ws->line3 = $address_lines[2];
} else {
$dst_address_ws->line0 = $address_lines[0];
$dst_address_ws->line1 = $address_lines[1];
$dst_address_ws->line2 = $address_lines[2];
$dst_address_ws->line3 = $address_lines[3];
}
$dst_address_ws->postalCode = (string) substr($so_data['przipcode'], 0, 32);
$dst_address_ws->city = (string) substr($so_data['prtown'], 0, 32);
$dst_address_ws->MobileNumber = (string) substr($so_data['cephonenumber'], 0, 32);
if(strlen($dst_address_ws->MobileNumber) > 10) {
if(preg_match('/^(0033|\+33|33)[0-9]{9,10}$/', $dst_address_ws->MobileNumber)) {
$dst_address_ws->MobileNumber = '0'.substr(substr($dst_address_ws->MobileNumber, -10), 1);
}
}
if(($doorcode = (string) substr($so_data['cedoorcode1'], 0, 32)) != '') {
$dst_address_ws->DoorCode1 = $doorcode;
}
if(($doorcode = (string) substr($so_data['cedoorcode2'], 0, 32)) != '') {
$dst_address_ws->DoorCode2 = $doorcode;
}
$this->letter->parcel->Instructions = str_replace(array('°'), '', (string) $so_data['cedeliveryinformation']);
$this->letter->parcel->DeliveryMode = (string) $so_data['delivery_mode'];
if(!in_array($this->letter->parcel->DeliveryMode, array('DOM', 'DOS', 'RDV'))) {
$this->letter->parcel->RegateCode = $so_data['prid']; //(string) ltrim($so_data['prid'], '0');
error_log($this->letter->parcel->RegateCode);
}
} else {*/
// $this->serviceCallContextV2->serviceType = 'DOM';
$dst_address_ws->line2 = (string) $dst_address->address1;
$dst_address_ws->line3 = (string) $dst_address->address2;
if($dst_country->iso_code == 'FR' || $dst_country->iso_code == 'AD' || $dst_country->iso_code == 'MO') {
if($dst_address->phone != '' && preg_match('/^0[67][0-9]+$/', $dst_address->phone)) {
$dst_address_ws->phone = (string) $dst_address->phone;
} elseif($dst_address->phone_mobile != '' && preg_match('/^0[67][0-9]+$/', $dst_address->phone_mobile)) {
$dst_address_ws->phone = (string) $dst_address->phone_mobile;
}
if(strlen($dst_address_ws->phone) > 10) {
if(preg_match('/^(0033|\+33|33)[0-9]{9,10}$/', $dst_address_ws->phone)) {
$dst_address_ws->phone = '0'.substr(substr($dst_address_ws->phone, -10), 1);
}
}
if(strlen($dst_address_ws->phone_mobile) > 10) {
if(preg_match('/^(0033|\+33|33)[0-9]{9,10}$/', $dst_address_ws->phone_mobile)) {
$dst_address_ws->phone_mobile = '0'.substr(substr($dst_address_ws->phone_mobile, -10), 1);
}
}
} else {
if($dst_address->phone != '') {
$dst_address_ws->phone = (string) $dst_address->phone;
}
if($dst_address->phone_mobile != '') {
$dst_address_ws->MobileNumber = (string) $dst_address->phone_mobile;
}
}
// }
$this->letter->dest->addressVO = $dst_address_ws;
$exp_country = new Country((int) Configuration::get('LAPOSTEWS_EXP_COUNTRY'));
$exp_address_ws = new WS_AddressVO();
$exp_address_ws->companyName = (string) substr(Configuration::get('LAPOSTEWS_EXP_COMPANY', ''), 0, 32);
$exp_address_ws->Name = (string) substr(Configuration::get('LAPOSTEWS_EXP_FIRSTNAME', ''), 0, 32);
$exp_address_ws->Surname = (string) substr(strtoupper(Configuration::get('LAPOSTEWS_EXP_LASTNAME', '')), 0, 32);
$exp_address_ws->email = (string) Configuration::get('LAPOSTEWS_EXP_EMAIL', '');
$exp_address_ws->postalCode = (string) Configuration::get('LAPOSTEWS_EXP_POSTALCODE', '');
$exp_address_ws->city = (string) substr(strtoupper(Configuration::get('LAPOSTEWS_EXP_CITY', '')), 0, 32);
$exp_address_ws->line2 = (string) substr(strtoupper(Configuration::get('LAPOSTEWS_EXP_ADDR1', '')), 0, 32);
$exp_address_ws->line3 = (string) substr(strtoupper(Configuration::get('LAPOSTEWS_EXP_ADDR2', '')), 0, 32);
if(strtolower($exp_country->name[$cookie->id_lang]) == 'monaco') {
$exp_address_ws->countryCode = 'FR';
} else {
$exp_address_ws->countryCode = (string) $dst_country->iso_code;
}
$exp_address_ws->country = (string) substr($exp_country->name[$cookie->id_lang], 0, 32);
$exp_address_ws->phone = (string) Configuration::get('LAPOSTEWS_EXP_PHONE', '');
if(strlen($exp_address_ws->phone) > 10) {
if(preg_match('/^(0033|\+33|33)[0-9]{9,10}$/', $exp_address_ws->phone)) {
$exp_address_ws->phone = '0'.substr(substr($exp_address_ws->phone, -10), 1);
}
}
$this->letter->exp->addressVO = $exp_address_ws;
}
}
public function setWeight($weight=0) {
$this->parcelVO->weight = rtrim((string) $weight, '0');
}
public function send() {
if(Validate::isLoadedObject($this->order)) {
global $cookie;
$c = new SoapClient(
(
/*$this->mode
? 'http://ws.colissimo.fr/soap.shippingclpV2/services/WSColiPosteLetterService?wsdl'
: 'http://217.108.161.162/soap.shippingclpV2/services/WSColiPosteLetterService?wsdl'*/
'http://ws.colissimo.fr/soap.shippingclpV2/services/WSColiPosteLetterService?wsdl'
),
array(
'trace' => $this->mode,
'exceptions' => !$this->mode,
'cache_wsdl' => $this->mode? WSDL_CACHE_MEMORY: WSDL_CACHE_NONE,
)
);
$this->getLetterColissimoRequest = new WS_GetLetterColissimoRequest($this->letter);
try {
//x = $c->getLetterColissimo(array('in0' => $this->letter));
$x = $c->getLetterColissimo($this->getLetterColissimoRequest);
return $x;
} catch(Exception $e) {
return $e;
}
} else {
return FALSE;
}
}
}