import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class TestApiZoomClient {
private static final Logger logger = LoggerFactory.getLogger(TestApiZoomClient.class);
public static void main(String[] args) throws Exception {
logger.info("Start of test");
testApiZoomClient();
logger.info("End of test");
}
private static void testApiZoomClient() throws Exception {
RestTemplate rest = new RestTemplate();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
String id = "ODYSSEE72"; // à remplacer par l'identifiant de l'accès Mon espace
String cle = "9f40d4f1f31d44d78f2fc561cd3c2c39"; // à remplacer par l'api key générée pour utiliser la fonction zoom
String url = "https://espace-client.geodis.com/services";
String serviceRechercheEnvois = "api/zoomclient/recherche-envois";
String serviceRechercheEnvoi = "api/zoomclient/recherche-envoi";
String lang = "fr";
FiltreRechercheEnvois filtreRechercheEnvois = new FiltreRechercheEnvois();
filtreRechercheEnvois.setDateDepartDebut("2020-01-08");
filtreRechercheEnvois.setDateDepartFin("2020-01-21");
String json = objectMapper.writeValueAsString(filtreRechercheEnvois);
Reponse reponse = callService(rest, objectMapper, url, serviceRechercheEnvois, cle, id, lang, json);
if(reponse.getCodeErreur() != null) {
logger.info("Erreur : " + reponse.getCodeErreur() + " - " + reponse.getTexteErreur());
}
else {
Object contenuReponse = reponse.getContenu();
List listEnvoisSimples = objectMapper.convertValue(contenuReponse, new TypeReference
- >(){});
logger.info("Nb envois : " + listEnvoisSimples.size());
for(EnvoiSimple envoiSimple : listEnvoisSimples) {
String log = "noRecepisse : " + envoiSimple.getNoRecepisse()
+ " - dateDepartFrs : " + envoiSimple.getDateDepartFrs()
+ " - libellePrestation : " + envoiSimple.getLibellePrestation()
+ " - reference1 : " + envoiSimple.getReference1()
+ " - nbColis : " + envoiSimple.getNbColis()
+ " - nbPalettes : " + envoiSimple.getNbPalettes()
+ " - poids : " + envoiSimple.getPoids()
+ " - nomExp : " + envoiSimple.getNomExp()
+ " - nomDest : " + envoiSimple.getNomDest()
+ " - libelleEtat : " + envoiSimple.getLibelleEtat()
+ " - dateEtatFrs : " + envoiSimple.getDateEtatFrs()
+ " - noSuivi : " + envoiSimple.getNoSuivi();
logger.info(log);
}
if(listEnvoisSimples.size() > 0) {
int nbSuivisDetaillesMax = 20;
int nbSuivisDetailles = 0;
for(EnvoiSimple envoiSimple : listEnvoisSimples) {
nbSuivisDetailles ++;
if(nbSuivisDetailles > nbSuivisDetaillesMax) {
break;
}
filtreRechercheEnvoi = new FiltreRechercheEnvoi();
filtreRechercheEnvoi.setNoSuivi(envoiSimple.getNoSuivi());
json = objectMapper.writeValueAsString(filtreRechercheEnvoi);
reponse = callService(rest, objectMapper, url, serviceRechercheEnvoi, cle, id, lang, json);
if(reponse.getCodeErreur() != null) {
logger.info("Erreur : " + reponse.getCodeErreur() + " - " + reponse.getTexteErreur());
}
else {
contenuReponse = reponse.getContenu();
Envoi envoi = objectMapper.convertValue(contenuReponse, Envoi.class);
String log = "Detail noRecepisse : " + envoi.getNoRecepisse()
+ " - instructionsLivraison1 : " + envoi.getInstructionsLivraison1()
+ " - instructionsLivraison2 : " + envoi.getInstructionsLivraison2()
+ " - natureMarchandises : " + envoi.getNatureMarchandises();
logger.info(log);
if(envoi.getListSuivis() != null && envoi.getListSuivis().size() > 0) {
for(Suivi suivi : envoi.getListSuivis()) {
String log2 = " dateSuiviFrs : " + suivi.getDateSuiviFrs()
+ " - heureSuiviFrs : " + suivi.getHeureSuiviFrs()
+ " - libelleCentre : " + suivi.getLibelleCentre()
+ " - libelleCourtSuivi : " + suivi.getLibelleCourtSuivi();
if(suivi.getListInformationsComplementaires() != null && suivi.getListInformationsComplementaires().size() > 0) {
for(String infoComplementaire : suivi.getListInformationsComplementaires()) {
log2 = log2 + "\n " + infoComplementaire;
}
}
logger.info(log2);
}
}
}
}
}
}
}
private static Reponse callService(RestTemplate rest, ObjectMapper objectMapper, String url, String service, String cle, String id, String lang, String json)
throws JsonParseException, JsonMappingException, IOException, NoSuchAlgorithmException, DecoderException {
logger.info("appel service : " + service + " - " + json);
String ts = String.valueOf(System.currentTimeMillis());
String message = cle + ";" + id + ";" + ts + ";" + lang + ";" + service + ";" + json;
String hash = computeHash(message);
String serviceRequestHeader = id + ";" + ts + ";" + lang + ";" + hash;
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
headers.add("Accept", "*/*");
headers.add("X-GEODIS-Service", serviceRequestHeader);
HttpEntity