Lasso Soft Inc. > Home

[laposte]

Linklaposte
AuthorDominique Guardiola Falco
CategoryCustom Tag
Version8.5.x
LicensePublic Domain
Posted18 Feb 2008
Updated23 Apr 2010
More by this author...

Description

This ctag will be only useful for french e-commerce sites.
It simply grabs shipping costs from several applications from La Poste website and gives you the shipping cost for a parcel sent from France based upon weight and others options.

At the moment it handles the following services :

  • Colissimo France 48h
  • Colissimo R1
  • Colissimo R2
  • Colissimo R3
  • Colissimo Outre-Mer
  • Colissimo Outre-Mer R1
  • Colissimo Outre-Mer R2
  • Colissimo Outre-Mer R3
  • Colissimo Outre-Mer économique
  • Colissimo international
  • Colissimo international économique (à vérifier)

Ce ctag vous permet de calculer automatiquement le coût d'un envoi Colissimo à partie de la France métropolitaine, en fonction de son poids, de sa destination et de quelques options. Pour une liste des codes pays, inspirez vous du menu déroulant de cette page.
Demo en ligne ici : Tarif-Colis.info

It uses js_flattenparams to allow you to create params for the custom type as an array, see usage.

Sample Usage

//Its a custom type : you need to create a type,
//then use the ->price method to get the price

//nlle calédonie, tarif économique
var('moncolis') = laposte(-weight='3.23',-cc='NC',-eco); 
$monenvoi->price;

//france recommandé R2
var('monenvoi') = laposte(-weight='3.23',-cc='F',-rec='R2'); 
$monenvoi->price;

//using js_flattenparams facility
var('colis') = array(  -weight = client_param('poids'),
                           -cc = client_param('pays'));
client_param('eco') == 'yes'? $ colis->(insert:-eco='');
laposte($colis)->price;


Country codes used are standard, except 'F' for France.

Source Code

Click the "Download" button below to retrieve a copy of this tag, including the complete documentation and sample usage shown on this page. Place the downloaded ".inc" file in your LassoStartup folder, restart Lasso, and you can begin using this tag immediately.

define_type(
	'laposte',
	-description='Tarifs d\'expédition de la poste'
);

	// flatten arrays passed as params 
    local: 'flattenedparams' = js_flattenparams: params; 
    // replace the current params with the flattened params 
    params = #flattenedparams -> params; 
    // autocreate locals from params 
    locals = #flattenedparams -> locals; 

	local(
		'cookiejar' = map,
		'debug' = string,
		'price' = decimal,
	);	
	
	define_tag(
		'oncreate',
		-req='weight',
		-req='cc',
		-optional='rec',
		-optional='eco',
		-optional='cr'
	);
		

		local('jsessionid') = string;	
		local('category') = string;
		local('om') = array('GP','GF','MQ','YT','NC','PF','RE','PM','WF');		
		local('rf') = #om;
		#rf->(insert:'F');
			
		select(true);
		
			case(#cc == 'F'); 
				#category = string('8N');  //Colissimo normal
			case(#om >> #cc); 
				#category = string('8Y'); //Colissimo OM
			case;
				#category = string('CC'); // Colissimo international
			
		/select;
		
		//si -eco et international, c'est un international economique
		local_defined('eco') && #category == 'CC' ? local('category') = string('CE');
		
		//si -eco et OM, c'est un Colissimo OM economique
		local_defined('eco') && #om >> #cc ? local('category') = string('XE');
		
		
		//recommandé France
		local_defined('rec') && #cc == 'F' ? local('category') = string('8U');
		
		//recommandé Outre-Mer
		local_defined('rec') && #om >> #cc ? local('category') = string('8Z');
				
		fail_if(local_defined('rec')&&(#rf!>>#cc), -1, 'Erreur : Pas de recommande pour l\'international'); 		
		
		local('pp') = array(
			'forward'				=	'success',
			'codeOffre'				=	#category,
			'codePaysDestination'	=	#cc,
			'poids'					=	#weight,
			'page'					=	'tarificationParticulier'
		);
		
		local_defined('rec')? #pp->(insert: 'choixTauxOptionObligatoire' = #rec);

///// fin config		

		protect;
			local('page') = include_url(
				'http://www.coliposte.fr/cotation/gp/tarificationParticulier.do',
				-getparams = array('codeOffre'=#category),
				-SendMIMEHeaders=(array:'User-Agent'='Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; fr; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'),
				-retrievemimeheaders='hdr',
				-timeout=15
			);
		/protect;
			
	
		local('debug_cookie_sent') = ((self->cookiejar)->values->join:'
find('Set-Cookie'), local('i')); #i->value >> 'JSESSIONID'? #jsessionid = #i->value; /iterate; #jsessionid->(Replace: 'JSESSIONID=',''); #jsessionid->(Replace: 'path=/',''); //global routine for getting and updating cookiemap, should be ctagged or something iterate($hdr->find('Set-Cookie'), local('i')); local('debug_cookie_rcvd') += (#i->value)+'
'; //we are given an array of cookies statements local('ivalue') = (#i->value)->(split:';'); // this way for each of each cookie statement , we get an array like this: // array ((NAME=VALUE),(Domain=.example.com),(/Path=/),(Expires:....)) local('valuename') = ((#ivalue->Get:1)->(split:'='))->First; (self->cookiejar)->(insert: #valuename = #i->value); //we update the cookiejar map, and the key is the value of the cookie //limitations is that we don't care about domains so this is only for a single-domain transaction /iterate; self->debug += '

1. Calling first page to get a cookie

' '

Cookie sent :
'#debug_cookie_sent'

' '

Cookie received :
'#debug_cookie_rcvd'

' '

Cookie stored :
'((self->cookiejar)->values->join:'
')'

' //'

HTML :

'#page'

' ; ////////////step (2) protect; local('page2') = include_url('http://www.coliposte.fr/cotation/gp/tarificationParticulier.do;jsessionid='+#jsessionid, -postparams = #pp, -SendMIMEHeaders=(array:'User-Agent'='Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; fr; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11', 'Cookie'=((self->cookiejar)->values->join:';')), -retrievemimeheaders='hdr', -timeout=15 ); /protect; local('debug_cookie_sent') = ((self->cookiejar)->values->join:'
'); iterate($hdr->find('Set-Cookie'), local('i')); local('debug_cookie_rcvd') += (#i->value)+'
'; local('ivalue') = (#i->value)->(split:';'); local('valuename') = ((#ivalue->Get:1)->(split:'='))->First; (self->cookiejar)->(insert: #valuename = #i->value); /iterate; #page2->(replace:'\r\n', ''); #page2->(replace:'\t', ''); #page2->(replace:' ', ''); local('data') = #page2->(ExportString: 'iso-8859-1'); local('computed_price')=(String_FindRegExp: #data, -Find='resest:(.*?)€*', -IgnoreCase); self->debug += '

2. POST results

' '

POST params passed : '#pp'

' '

Cookie sent :
'#debug_cookie_sent'

' '

Cookie received :
'#debug_cookie_rcvd'

' '

Cookie stored :
'((self->cookiejar)->values->join:'
')'

' //'

HTML :

'encode_html(#data)'

' '

Prix :

'#computed_price'

' ; local('final_price') = decimal(#computed_price->Get:2); decimal(#final_price); local_defined('cr')? #final_price = (#final_price + 11.72); self->price = #final_price; /define_tag; /define_type;

Related Tags

Comments

No comments

Please log in to comment

Subscribe to the LassoTalk mail list

LassoSoft Inc. > Home

 

 

©LassoSoft Inc 2015 | Web Development by Treefrog Inc | PrivacyLegal terms and Shipping | Contact LassoSoft