Comment accéder aux tarifs de plusieurs transporteurs via une seule API (avec l'API de livraison gratuite)

Publié: 2017-02-27
Multi Carrier

Dernière mise à jour - 24 février 2020

Dans cet article, vous comprendrez comment accéder à cette API et obtenir des tarifs nationaux et internationaux pour votre colis auprès de différents transporteurs comme FedEx, UPS et USPS. Il vous suffit de spécifier l'adresse de l'expéditeur, l'adresse du destinataire, le type de service et les détails d'autorisation pour le transporteur spécifique sous forme de données JSON cryptées.

Pour utiliser cette API, vous devez vous inscrire sur http://shippingapi.storepep.com et obtenir une clé API gratuite dans votre e-mail, il vous suffit de fournir votre identifiant e-mail lors de l'inscription.

GET : Liste des services disponibles

1 : Obtenez tous les services FedEx disponibles :
Commande : curl http://shippingapi.storepep.com/api/shippings/fedex-services

Sortie :
{
"FEDEX_1_DAY_FREIGHT":"FEDEX 1 DAY FREIGHT",
"FEDEX_2_DAY":"FEDEX 2 DAY",
"FEDEX_2_DAY_AM":"FEDEX 2 DAY AM",
"FEDEX_2_DAY_FREIGHT":"FEDEX 2 DAY FREIGHT",
"FEDEX_3_DAY_FREIGHT":"FEDEX 3 DAY FREIGHT",
"FEDEX_DISTANCE_DEFERRED":"FEDEX DISTANCE DEFERRED",
"FEDEX_EXPRESS_SAVER":"FEDEX EXPRESS SAVER",
"FEDEX_FIRST_FREIGHT":"FEDEX FIRST FREIGHT",
"FEDEX_FREIGHT_ECONOMY":"FEDEX FREIGHT ECONOMY",
"FEDEX_FREIGHT_PRIORITY":"FEDEX FREIGHT PRIORITY",
"FEDEX_GROUND":"FEDEX GROUND",
"FEDEX_NEXT_DAY_AFTERNOON":"FEDEX NEXT DAY AFTERNOON",
"FEDEX_NEXT_DAY_EARLY_MORNING":"FEDEX NEXT DAY EARLY MORNING",
"FEDEX_NEXT_DAY_END_OF_DAY":"FEDEX NEXT DAY END OF DAY",
"FEDEX_NEXT_DAY_FREIGHT":"FEDEX NEXT DAY FREIGHT",
"FEDEX_NEXT_DAY_MID_MORNING":"FEDEX NEXT DAY MID MORNING",
"FIRST_OVERNIGHT":"FIRST OVERNIGHT",
"GROUND_HOME_DELIVERY":"GROUND HOME DELIVERY",
"EUROPE_FIRST_INTERNATIONAL_PRIORITY":"EUROPE FIRST INTERNATIONAL PRIORITY",
"INTERNATIONAL_ECONOMY":"INTERNATIONAL ECONOMY",
"INTERNATIONAL_ECONOMY_FREIGHT":"INTERNATIONAL ECONOMY FREIGHT",
"INTERNATIONAL_FIRST":"INTERNATIONAL FIRST",
"INTERNATIONAL_PRIORITY":"INTERNATIONAL PRIORITY",
"INTERNATIONAL_PRIORITY_FREIGHT":"INTERNATIONAL PRIORITY FREIGHT",
"PRIORITY_OVERNIGHT":"PRIORITY OVERNIGHT",
"SAME_DAY":"SAME DAY",
"SAME_DAY_CITY":"SAME DAY CITY",
"SMART_POST":"SMART POST",
"STANDARD_OVERNIGHT":"STANDARD OVERNIGHT"
}

2 : Obtenez tous les services UPS disponibles :
Commande : curl http://shippingapi.storepep.com/api/shippings/ups-services
Sortie :

{
'01': 'UPS Next Day Air',
'02': 'UPS Second Day Air',
'03': 'UPS Ground',
'07': 'UPS Worldwide Express',
'08': 'UPS Worldwide Expedited',
'11': 'UPS Standard',
'12': 'UPS Three-Day Select',
'13': 'UPS Next Day Air Saver',
'14': 'UPS Next Day Air Early AM',
'54': 'UPS Worldwide Express Plus',
'59': 'UPS Second Day Air AM',
'65': 'UPS Saver',
'82': 'UPS Today Standard',
'83': 'UPS Today Dedicated Courier',
'84': 'UPS Today Intercity',
'85': 'UPS Today Express',
'86': 'UPS Today Express Saver',
'92': 'UPS SurePost (USPS) < 1lb', '93': 'UPS SurePost (USPS) > 1lb',
'94': 'UPS SurePost (USPS) BPM',
'95': 'UPS SurePost (USPS) Media'
}

3 : Obtenez tous les services USPS disponibles :
Commande : curl http://shippingapi.storepep.com/api/shippings/usps-services
Sortie :

{
'First Class>LETTER':'First Class>LETTER',
'First Class>FLAT':'First Class>FLAT',
'First Class>PARCEL':'First Class>PARCEL',
'First Class>POSTCARD':'First Class>POSTCARD',
'First Class>PACKAGE SERVICE':'First Class>PACKAGE SERVICE',
'First Class Commercial>PACKAGE SERVICE':'First Class Commercial>PACKAGE SERVICE',
'First Class HFP Commercial>PACKAGE SERVICE':'First Class HFP Commercial>PACKAGE SERVICE',
'Priority':'Priority',
'Priority Commercial':'Priority Commercial',
'Priority Cpp':'Priority Cpp',
'Priority HFP Commercial':'Priority HFP Commercial',
'Priority HFP Cpp':'Priority HFP Cpp',
'Priority Mail Express':'Priority Mail Express',
'Priority Mail Express Commercial':'Priority Mail Express Commercial',
'Priority Mail Express Cpp':'Priority Mail Express Cpp',
'Priority Mail Express HFP':'Priority Mail Express HFP',
'Priority Mail Express HFP Commercial':'Priority Mail Express HFP Commercial',
'Standard Post':'Standard Post',
'Retail Ground':'Retail Ground',
'Media':'Media',
'Library':'Library',
'Online Plus':'Online Plus',
'12':'Global Express Guaranteed',
'1':'Priority Mail Express International',
'2':'Priority Mail International',
'9':'Priority Mail International Medium Flat Rate Box',
'11':'Priority Mail International Large Flat Rate Box',
'16':'Priority Mail International Small Flat Rate Box',
'15':'First Class Package International Service'
}

POST : API des tarifs

Pour utiliser l'API Rates, nous devons d'abord comprendre la structure de cette demande d'API

Nom La description
Common_Params Contient des éléments internes communs à toutes les compagnies maritimes
Common_Params > environnement pour le mode test : sandbox, pour le mode production : live
Common_Params > identifiant de messagerie Identifiant de messagerie enregistré pour cette API
Common_Params >clé Clé API reçue lors de l'inscription
Common_Params > hôte Facultatif (votre nom d'hôte)
Common_Params >os Facultatif (les détails de votre système d'exploitation)
Common_Params >Expéditeur_PersonName Nom de l'expéditeur
Common_Params >Shipper_CompanyName Société de l'expéditeur
Common_Params > Shipper_PhoneNumber Numéro de téléphone de l'expéditeur
Common_Params >Expéditeur_Address_StreetLines Adresse municipale de l'expéditeur
Common_Params >Shipper_Address_City Ville de l'expéditeur
Common_Params >Shipper_Address_StateOrProvinceCode Code d'état/province de l'expéditeur (*pas plus de deux lettres)
Common_Params > Shipper_Address_PostalCode Code postal de l'expéditeur
Common_Params > Shipper_Address_CountryCode Code pays de l'expéditeur (*uniquement code à deux lettres)
Common_Params > Recipient_PersonName Nom du destinataire
Common_Params >Recipient_CompanyName Entreprise du destinataire
Common_Params >Recipient_PhoneNumber Numéro de téléphone du destinataire
Common_Params >Recipient_Address_StreetLines Adresse municipale du destinataire
Common_Params > Recipient_Address_City Ville du destinataire
Common_Params >Recipient_Address_StateOrProvinceCode Code d'état/province du destinataire ()
Common_Params >Recipient_Address_PostalCode Code postal du destinataire
Common_Params >Recipient_Address_CountryCode Code pays du destinataire
Common_Params >Recipient_Address_CountryName Nom du pays du destinataire
Common_Params >Recipient_Address_Residential Vrai/Faux (est l'adresse résidentielle du destinataire)
Common_Params > clé_fedex Clé reçue de FedEx
Common_Params > mot de passe_fedex Mot de passe Fedex
Common_Params > numéro_de_compte_fedex Numéro de compte FedEx
Common_Params > fedex_meter_number Numéro de compteur FedEx
Common_Params > ups_key Clé reçue d'UPS
Common_Params > ups_password Mot de passe de l'onduleur
Common_Params > ups_account_number Numéro de compte UPS
Common_Params >ups_username Nom d'utilisateur reçu d'UPS
Common_Params > usps_username Nom d'utilisateur USPS
Request_Array Cet objet contient des demandes pour plusieurs entreprises et plusieurs packages
Request_Array > Tableau de requêtes Plusieurs requêtes passées dans un tableau

Structure de la requête (comme dans Request_Array )

Nom La description
Demande Contient des éléments internes communs à tous les transporteurs (compagnies maritimes)
Requête > identifiant Tout ID unique pour identifier ce package (ID de cet élément de tableau)
Demande >entreprise Nom du transporteur (par exemple : 'fedex', 'ups', 'usps') pour obtenir les tarifs de ces sociétés pour ce colis
Requête > Unités_de_poids Unité de poids (actuellement, seul "LB" est pris en charge)
Requête > Type de service Code de service pour le service de transporteur spécifique pour lequel le tarif est requis. Reportez-vous à la documentation API des opérateurs.
Demande > Types de demande de taux 'NONE' pour les tarifs spécifiques au compte et 'LIST' pour les tarifs de détail
Demande >forfaits

Exemple de JSON (avant chiffrement) :
 {
	"Common_Params": {
		"environnement": "bac à sable",
		"emailid": "[email protected]",
		"clé": "b52ee1f3ab8454589d6a9bd5018d60be",
		"hébergeur": "www.storepep.com",
		"os": "Windows NT 6.3 version 9600 (Windows 8.1 Famille) i586",
		"Shipper_PersonName": "JOE CHRIST",
		"Shipper_CompanyName": "MON ENTREPRISE",
		"Shipper_PhoneNumber": "0123456789",
		"Shipper_Address_StreetLines": "TABLEAU DE SOIE",
		"Shipper_Address_City": "COLUMBUS",
		"Shipper_Address_StateOrProvinceCode": "OH",
		"Shipper_Address_PostalCode": "43218",
		"Shipper_Address_CountryCode": "États-Unis",
		"Recipient_PersonName": "Nom du destinataire",
		"Recipient_CompanyName": "XYZ",
		"Recipient_PhoneNumber": "0123456789",
		"Recipient_Address_StreetLines": "123 , ROUTE XYZ",
		"Recipient_Address_City": "",
		"Recipient_Address_StateOrProvinceCode": "WA",
		"Recipient_Address_PostalCode": "98503",
		"Recipient_Address_CountryCode": "États-Unis",
		"Recipient_Address_CountryName": "États-Unis (US)",
		"Recipient_Address_Residential": "faux",
		"fedex_key": "UzxdpT3cy7UDF3Vl",
		"fedex_password": "I1IWFyvBz34QnJOwqZyBn9oll",
		"fedex_account_number": "110087444",
		"fedex_meter_number": "128768444",
		"ups_key": "DCEF2E428E10BBB7",
		"ups_password": "Q1w2e3r4t5o5",
		"ups_account_number": "189Y5A",
		"ups_username": "iahtai21",
		"usps_username": "806XDDAP3116",
		"usps_password": "516GD04CJ256"
	},
	"Request_Array": [
		{
			"id": "53:1",
			"compagnie": [
				"usps"
			],
			"Poids_Unités": "LB",
			"ServiceType": "Priorité",
			"RateRequestTypes": "AUCUN",
			"paquets": [
				{
					"poids": 2,
					"unité": "LBS",
					"Description": "Mon forfait",
					"no_of_packages": 1,
					"Numéro de séquence": 1
				}
			]
		},
		{
			"id": "53,37:1",
			"compagnie": [
				"fedex"
			],
			"Poids_Unités": "LB",
			"ServiceType": "FEDEX_GROUND",
			"RateRequestTypes": "AUCUN",
			"paquets": [
				{
					"poids": 1,5,
					"unité": "LBS",
					"Description": "Mon forfait",
					"no_of_packages": 1,
					"Numéro de séquence": 3
				}
			]
		}
	]
}

Après avoir généré un tel objet JSON, vous devez encoder cet objet à l'aide de votre clé API unique. Nous fournissons l'algorithme de codage ci-dessous, afin qu'il vous soit facile de continuer.

Fonction PHP pour encoder cette requête JSON

 <?php
    fonction encode($key,$data)
    {
     $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
     $key256 = $key;
     $iv = '1156651@Xadapter' ;
     mcrypt_generic_init($cipher, $key256, $iv);
     $cipherText256 = mcrypt_generic($cipher,$data );
     mcrypt_generic_deinit($cipher);
     $cipherHexText256 =bin2hex($cipherText256);
     retourner $cipherHexText256 ;
    }
?>

Ensuite, placez cet objet encodé dans un autre objet JSON (avec deux éléments, 'emailid' et 'data') et envoyez-le au serveur.

 <?php
  $req=tableau();
  $req['emailid']='[email protected]' ; Votre identifiant de messagerie enregistré API
  $apikey='b52ee1f3ab8454589d6a9bd5018d60be'; Votre clé API enregistrée
  $req['data']=$this->encode($apikey,$JSON_Req);
  $content =json_encode($req);
?>

La requête JSON finale ressemble à ceci :

 {"emailid":"[email protected]",
    "Les données":""
   }

Envoyez cet objet JSON au serveur.

Jetez un œil à l'exemple ci-dessous pour comprendre comment envoyer une requête en PHP :

 $curl = curl_init("http://shippingapi.storepep.com/api/shippings/rates");
                curl_setopt($curl, CURLOPT_HEADER, faux);
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, vrai);
                curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json"));
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, faux);
                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, faux);
                curl_setopt($curl, CURLOPT_POST, true);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $content ); // c'est le $content que nous avons créé dans le code ci-dessus
                $json_response = curl_exec($curl);
                $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
                curl_close($curl);
                $response = json_decode($json_response, true);
                print_r($réponse);