PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → TPE CARTE BANCAIE
TPE CARTE BANCAIE
Débuté par francoise, 09 avr. 2009 19:56 - 89 réponses
Posté le 09 avril 2009 - 19:56
Bonjour,
Quelqu'un aurait-il déjà programmé des interfaces avec les tpe de carte bancaire. Si oui pouvez vous me donner quelques indications ou exemples.
D'avance Merci.
Posté le 10 avril 2009 - 11:34
bonjour,
il y a le protocole CONCERT, sinon par exemple pour le TPE WYNID il y a une Dll ou activeX, en gros cela dépend du matériel que tu veux piloter; chaque constructeur possède un moyen de piloter ces matèriels
Posté le 10 avril 2009 - 12:42
Bonjour,
j'essaye moi aussi de programmer la liaison
très difficile de trouver une doc sur le protocole concert
j ai réussi a en trouver une si cela vous intéresse laisser moi votre mail
pour vous la transmettre

Cordialement,
Posté le 23 avril 2009 - 20:25
Bonjour,
Je suis également à la recherche d'une documentation du protocole Concert. Pourrais tu m'envoyer cette documentation ?
Merci d'avance pour votre aide

xbourdon@cylande.com
Posté le 24 avril 2009 - 12:31
La documentation sur le protocole concert m'interesserait aussi.
Merci beaucoup

okjetente@hotmail.fr
Posté le 17 décembre 2009 - 17:54
Bonjour,

Je suis interessé par votre documentation sur le protocole concert. Pourriez vous me l'envoyer par mail ?

Salutations


Rives a écrit dans le message de news <a7f1da635f3733c66f5152c9150e4cbe@news.pcsoft> :
Bonjour,
j'essaye moi aussi de programmer la liaison
très difficile de trouver une doc sur le protocole concert
j ai réussi a en trouver une si cela vous intéresse laisser moi votre mail
pour vous la transmettre

Cordialement,
Posté le 12 janvier 2010 - 16:43
Bonjour Rives,

Votre documentation sur le protocole concert m'interresse également. Pourriez vous me l'envoyer par mail lbg@sasi.fr ?

Salutations
Posté le 25 février 2010 - 11:47
Bonjour David

voila mon pb si tu peux m'aider

Nous devons intégrer dans notre logiciel de Magasin
la liaison série ou USB avec le TPE pour l'envoi du montant.
Nous avons fait des tests sur les Sagem, mais cela ne marche pas, erreur
79 à la transmission des datas (STX+DATA+ETX+LRC).
Sagem semble être out et ne sait pas.

Aurais tu une idée (DLL) et un document sur les codes erreur


Réalisé:

On envoi ENQ
Réponse ACK ok du TPE

On envoi (STX+DATA+ETX+LRC).
et le sagem nous répond 79 et affiche "Fonction impossible"


Merci


Salutations, PY OGER 06 86 42 22 91
Posté le 25 février 2010 - 12:10
Bonjour,

Merci de m'envoyer la doc si tu peux
Voila mon PB si tu as une idee


Nous devons intégrer dans notre logiciel de Magasin (www.isctuto.eu)
la liaison série ou USB avec le TPE pour l'envoi du montant.

Nous avons fait des tests sur les Sagem, mais cela ne marche pas, erreur
79 à la transmission des datas (STX+DATA+ETX+LRC).
Sagem semble être out et ne sait pas.

Auriez-vous une idée (DLL) et un document sur les codes erreur



Réalisé:

On envoi ENQ
Réponse ACK ok du TPE

On envoi (STX+DATA+ETX+LRC).
et le sagem nous répond 79 et affiche "Fonction impossible"


Merci


Salutations, PY OGER 06 86 42 22 91
Posté le 25 février 2010 - 12:11
Bonjour Francoise

Si tu as avancé sur ton projet peut-être peux tu m'aider, merci
Voila mon PB

Nous devons intégrer dans notre logiciel de Magasin (www.isctuto.eu)
la liaison série ou USB avec le TPE pour l'envoi du montant.

Nous avons fait des tests sur les Sagem, mais cela ne marche pas, erreur
79 à la transmission des datas (STX+DATA+ETX+LRC).
Sagem semble être out et ne sait pas.

Aurais tu une idée (DLL) et un document sur les codes erreur



Réalisé:

On envoi ENQ
Réponse ACK ok du TPE

On envoi (STX+DATA+ETX+LRC).
et le sagem nous répond 79 et affiche "Fonction impossible"


Merci


Salutations, PY OGER 06 86 42 22 91
Posté le 25 février 2010 - 12:43
Bonjour,

Merci de m'envoyer la doc si tu peux
Voila mon PB si tu as une idee


Nous devons intégrer dans notre logiciel de Magasin (www.isctuto.eu)
la liaison série ou USB avec le TPE pour l'envoi du montant.

Nous avons fait des tests sur les Sagem, mais cela ne marche pas, erreur
79 à la transmission des datas (STX+DATA+ETX+LRC).
Sagem semble être out et ne sait pas.

Auriez-vous une idée (DLL) et un document sur les codes erreur



Réalisé:

On envoi ENQ
Réponse ACK ok du TPE

On envoi (STX+DATA+ETX+LRC).
et le sagem nous répond 79 et affiche "Fonction impossible"


Merci


Salutations, PY OGER 06 86 42 22 91
Posté le 25 mai 2010 - 13:25
Bonjour,

Je suis également intéressé par votre documentation sur le protocole concert. Ça serait très sympa si vous pouvez me l'envoyer par mail.

Merci d'avance,

Salutations

contact@glinfo.fr
Posté le 25 mai 2010 - 20:06
Bonjour,

Je suis également intéressé par votre documentation sur le protocole concert.
Pourriez vous me la faire parvenir par mail.
Dans l'attente de vous lire.

Salutations

rvincent@club-internet.fr
Posté le 26 mai 2010 - 00:45
Je suis aussi interressé par votre documentation sur le protocole CONCERT.

Merci d'avance.

thierry@ispro.fr
Posté le 26 septembre 2010 - 00:57
Bonsoir
peux tu m'nvoyer la dll ou l'activex pour les tpe wyngx
Posté le 27 septembre 2010 - 16:57
Bonjour,

POURQUOI NE PAS SIMPLEMENT METTRE CE DOCUMENT DANS LE DEPOT EN EN LIGNE?

C'est le quatrième lien en début de la page web du forum

Marc
Posté le 27 septembre 2010 - 19:05
extrait
http://www.wdforge.org/modules/newbb/viewtopic.php…
merci à toto pour le code

par contre, je recherche le schema de cablage serie-tpe
merci

Procedure ProcDialogueCarte(ParamMontant)

ii,jj,LRC est un entier
Données est une chaîne
ACK,ENQ,STX,ETX sont des chaînes
Reponse sont des chaînes
MontantCentime est un réel=Arrondi( ParamMontant*100)

STX=Caract(2);ETX=Caract(3);ENQ=Caract(5);ACK=Caract(6)

// Si pas d'imprimante alors on retour
NumSerie est un entier=1 // doit etre modifiable
// Ferme le port serie
sFerme(NumSerie)

SI sOuvre(NumSerie, 2000, 2000) ALORS
// Paramétrage de COM1
sFixeParamètre(NumSerie, 9600, 0, 8, 1)
SINON
Erreur("Erreur d'ouverture du port série "+NumSerie+" pour l'e terminal bancaire")
RETOUR
FIN

// Vide le port Serie
SI sDansFileEntrée(NumSerie) > 0 ALORS
Reponse=sLit(NumSerie,sDansFileEntrée(NumSerie))
FIN

// Format le message
Données="01"+NumériqueVersChaîne(MontantCentime,"08d")+ETX

// Calcul LRC
LRC=0
POUR ii = 1 A Taille(Données)
LRC=OUExclusifBinaire (LRC,Asc(Données[[ii]]))
FIN
Données=STX+Données+Caract(LRC)

SI PAS sEcrit(NumSerie,ENQ) ALORS
Erreur("Impossible d'envoyer l'ENQ")
sFerme(NumSerie)
Ferme
FIN

SI PAS sEcrit(NumSerie,Données) ALORS
Erreur("Impossible d'envoyer les données au terminal")
sFerme(NumSerie)
Ferme
FIN

// Attend réponse
Multitâche(10)
SI sDansFileEntrée(NumSerie) > 0 ALORS
Reponse=sLit(NumSerie,sDansFileEntrée(NumSerie))
SI Position(Reponse,ACK)>0 ALORS
Resultat=Vrai
FIN
SINON
Resultat=Faux
FIN

sFerme(NumSerie)
Posté le 19 octobre 2010 - 20:07
Je viens de terminer un dialogue entre Windev et un TPE
Comme j'ai perdu beaucoup de temps à trouver les bonnes informations, je vous fais profiter de cette expérience pour vous éviter de perdre le votre.

1) Connectique = câble USB entre un PC (sous Vista) et un TPE SAGEM EFT930S.
Il faut installer le driver SAGEM pour que ce port USB soit vu comme un port COMx.

2) paramétrer le TPE pour qu'il accepte de répondre au PC.
Sur le TPE :
Touche F
TELIUM MANAGER
Initialisation
Paramètres
Connexion Caisse
Active (choix entre Active et Inactive)
Liaison série : USB (choix entre COM0 et USB)

3)(facultatif) obtenir documentation sur le protocole CONCERT auprès de votre fournisseur de TPE pour essayer de comprendre le dialogue.
NB: j'ai trouvé des différences entre la théorie de la doc et la réalité de fonctionnement de mon TPE.

4) voici un code qui fonctionne :
// Connexion TPE : envoi montant au TPE
//======================================
// exemple de dialogue avec TPE
// 1) demande ouverture session :
// envoi ENQ au TPE -->
// <-- réponse ACK par TPE
// 2) envoi données
// envoi STK+données au TPE -->
// <-- réponse ACK par TPE
// 3) attente réponse du TPE
// envoi EOT au TPE -->
// (attente action sur TPE)
// 4) réponse du TPE
// <--- envoi ENQ par TPE
// envoi ACK au TPE -->
// <--- envoi STX+réponse par TPE
// envoi ACK au TPE -->
// <-- envoi EOT parTPE = FIN transaction
// NB: les caractères STX, EOT, ... peuvent être dans la même réponse

Procedure TPE_Cnx(p_Mnt,p_MRG="0",p_TYP="0",p_Niveau=0)

// Renvoi Faux si pb, sinon renvoi Vrai

// p_Mnt = montant à transmettre au TPE
// p_MRG = mode de paiement pour le TPE (cf plus bas)
// p_TYP = type de transaction à effectué (cf plus bas)
// p_Niveau : 0= simple envoi mnt au TPE, pas de gestion de la réponse
//1= envoi mnt au TPE et gestion de la réponse

TraceFin() // ferme trace précédente

sENQ est une chaîne=Caract(5)// demande d'ouverture de session
sACK est une chaîne=Caract(6)// acquittement positif de réception
sNAK est une chaîne=Caract(15)// acquittement négatif de réception
sSTX est une chaîne=Caract(2)// début de message
sETX est une chaîne=Caract(3)// fin de message
sEOT est une chaîne=Caract(4)// fin de session

sReponse est une chaîne

// INITIALISATION PORT SERIE (Port COMx)
//--------------------------------------
sFerme(gnTPEPort) // Ferme le port serie
SI sOuvre(gnTPEPort, gnTPETailBuffEntr,gnTPETailBuffSort)=Vrai ALORS
// Paramétrage de COM1
//sFixeParamètre(gnTPEPort, 9600, 1, 7, 0) // 9600 baux, parité paire, 7 bits de sMessage, 1 bit de stop
sFixeParamètre(gnTPEPort,gnTPETauxTrf,gnTPEParite,gnTPENbBitsData,gnTPENbBitsStop)
//sFixeParamètre(<Numéro de port> , <Taux> , <Parité> , <NbBitssMessage> , <NbBitsStop> [, <DTR/DSR> [, <RTS/CTS> [, <XON/XOFF>]]])
SINON
Erreur("LA CONNEXION AVEC LE TPE EST IMPOSSIBLE","sur le port série "+gnTPEPort)
RENVOYER(Faux)
FIN
// Vide le port Serie
SI sDansFileEntrée(gnTPEPort) > 0 ALORS
sReponse=sLit(gnTPEPort,sDansFileEntrée(gnTPEPort))
FIN

// PREPARATION MESSAGE
//---------------------
// Format du message envoyé au TPE :
// STX + ECR + MNT + IND + MRG + TYPE + DEV + PRIV [+ DELAI + AUTO] + ETX + LRC
// 2c8c 1c1c 1c 3c10c 4c 4c
// STXDébut de Trame
sECR est une chaîne="01"// N° de caisse
sMNT est une chaîne=NumériqueVersChaîne(Arrondi(p_Mnt*100),"08d")// Montant en centimes
sIND est une chaîne="1" // Indicateur de champ réponse : 1--> champ REP sera envoyé dans la réponse / autre --> champ rep ne sera pas envoyé
sMRG est une chaîne=p_MRG // Mode de paiement
//Liste des modes de paiement :
//'0' = Indifférent
//'1' = Bancaire
//'2' = American Express
//'3' = Aurore
//'4' = Cetelem = Pass ?
//'5' = Cofinoga
//'6' = Diner's Club
//'7' = Pass -à Supprimer ?
//'8' = Franfinance
//'9' = J.C.B.
//'A' = Accord
//'C' = Chèque
//'F' = Finaref
//'M' = Modeus
//'O' = Monéo
//'P' = Carte Pinault Printemps Redoute
//'X' = Mondex
sTYP est une chaîne=p_TYP//Type de Transaction : 0--> achat / 1 --> remboursement / 2--> annulation / 4 --> pré-autorisation
sDEV est une chaîne="978"//Code Devise: 250=FRF / 978=EUR / ....
sPRIV est une chaîne=" "// sMessage Privées à destination de l'application : 10 blancs par dft
//DELAIDélai de Réponse du TPE [facultatif] : "A01x" où x=0 --> réponse en fin de transaction (dft) / x=1 --> réponse immédiate
//AUTODemande d'autorisation[facultatif] : "B01x" où x='0' (dft) --> Cartes : le TPE décide de réaliser une demande d'autorisation ou non. Chèque : pas de contrôles
// '1' --> Cartes : demande d'autorisation impérative. Chèque : FNCI
// '2' --> Cartes : demande d'autorisation impérative. Chèque : Garantisseur
//ETXFin de Trame
//LRCCheckSum

// constitution message pour calcul LRC (sans STX)
sMessage est une chaîne=sECR+sMNT+sIND+sMRG+sTYP+sDEV+sETX
// Calcul LRC = OU EXCLUSIF des caractères sMessage et ETX compris, initialisé à 00h (STX exclu du calcul)
nLRC est un entier=0
i est un entier
POUR i = 1 _A_ Taille(sMessage)
nLRC=OUExclusifBinaire(nLRC,Asc(sMessage[[i]]))
FIN
// fin constitution message : ajout STX et LRC
sMessage=sSTX+sMessage+Caract(nLRC)

// DIALOGUE AVEC TPE
//===================

// Demande ouverture session (ENQ)
//----------------------------------
Trace("Demande ouverture session avec le TPE")
SI PAS sEcrit(gnTPEPort,sENQ) ALORS
Erreur("Impossible d'ouvrir une session avec le TPE")
sFerme(gnTPEPort)
RENVOYER(Faux)
FIN
// Attend réponse ACK (ou NAK)
Multitâche(50) // time out TE1 entre 300ms et 500ms après émission ENQ
sReponse=sLit(gnTPEPort,sDansFileEntrée(gnTPEPort)) // lecture buffer port du nbre d'octets émis.
SI Position(sReponse,sACK,1)>0 ALORS // si exite ACK dans réponse
//Trace("Réponse TPE=ACK:"+caract(sReponse))
Trace("TPE: Ouverture de session acceptée")
SINON
SI Position(sReponse,sNAK,1)>0 ALORS // si exite NAK dans réponse
Trace("Réponse TPE=NAK :"+sReponse)
SINON
Trace("Réponse TPE-->"+sReponse)
FIN
Erreur("TPE: Ouverture de session REFUSEE")
sFerme(gnTPEPort)
RENVOYER(Faux)
FIN

// Envoi données
//---------------
Trace("Envoi données au TPE")
SI PAS sEcrit(gnTPEPort,sMessage) ALORS
Erreur("Impossible d'envoyer les Données au TPE")
sFerme(gnTPEPort)
RENVOYER(Faux)
FIN
// Attend réponse ACK (ou NAK)
Multitâche(50) // time out TE1 entre 300ms et 500ms après émission ENQ
sReponse=sLit(gnTPEPort,sDansFileEntrée(gnTPEPort)) // lecture buffer port du nbre d'octets émis.
SI Position(sReponse,sACK,1)>0 ALORS // si exite ACK dans réponse
//Trace("Réponse TPE= ACK :"+sReponse)
Trace("TPE: Données reçues")
SINON
SI Position(sReponse,sNAK,1)>0 ALORS // si exite NAK dans réponse
Trace("Réponse TPE=NAK:"+sReponse)
SINON
Trace("Réponse TPE-->"+sReponse)
FIN
Erreur("Données refusées par le TPE")
sFerme(gnTPEPort)
RENVOYER(Faux)
FIN

// Envoi fin session
//-------------------
//Trace("Demande fin session TPE (EOT)")
Trace("Attente réponse du TPE")
SI PAS sEcrit(gnTPEPort,sEOT) ALORS
Erreur("Impossible d'envoyer la demande de réponse au TPE")
sFerme(gnTPEPort)
RENVOYER(Faux)
FIN

SI p_Niveau>0 ALORS // gestion de la réponse

// Attente réponses TPE
//----------------------
nbrep est un entier = 0 // compte tour
BOUCLE
nbrep=nbrep+1
Multitâche(100)
sReponse=sLit(gnTPEPort,sDansFileEntrée(gnTPEPort)) // lecture buffer port du nbre d'octets émis.

SI Position(sReponse,sACK,1)>0 ALORS Trace(nbrep+"Réponse TPE=ACK :"+sReponse) // si exite NAC dans réponse
SI Position(sReponse,sNAK,1)>0 ALORS Trace(nbrep+"Réponse TPE=NAK :"+sReponse) // si exite NAC dans réponse

SI Position(sReponse,sENQ,1)>0 ALORS // si exite ENQ dans réponse
//Trace(nbrep+"Réponse TPE=ENQ :"+sReponse)
Trace("TPE: Envoi réponse")
// Envoi ACK pour récepton STX
//Trace("Envoi ACK")
SI PAS sEcrit(gnTPEPort,sACK) ALORS
Erreur("Impossible de recevoir la réponse du TPE")
sFerme(gnTPEPort)
RENVOYER(Faux)
FIN
SINON
SI Position(sReponse,sSTX,1)>0 ALORS
// Format du message envoyé au TPE :
// STX + ECR + STAT + MNT + MRG + [REP] + DEV + PRIV + ETX + LRC
// 2c1c 8c 1c 55c 3c10c
// avec STAT = code etat de la transaction : "0"=transaction acceptée / "1"=transaction refusée
// et MRG = mode de rglt utilisé par le TPE : "0"= Carte / "2"= chèque

//Trace(nbrep+"Réponse TPE=STX :"+sreponse) // si exite STX dans réponse
Trace("TPE: REPONSE: Caisse="+sReponse[[2 A 3]]+" Stat="+sReponse[[4 A 4]]+" Mnt="+sReponse[[5 A 12]]+" Mode="+sReponse[[13 A 13]])
SI sReponse[[4 A 4]]="0" ALORS
Trace("TPE: Transaction acceptée")
SINON
Trace("TPE: Transaction REFUSEE")
FIN
//Trace("Envoi ACK")
SI PAS sEcrit(gnTPEPort,sACK) ALORS
Erreur("Impossible de valider la réponse du TPE")
sFerme(gnTPEPort)
RENVOYER(Faux)
FIN
FIN
SI Position(sReponse,sEOT,1)>0 ALORS
//Trace(nbrep+"Réponse TPE=EOT :"+sReponse)
Trace("TPE: Fin de session")
SORTIR // si exite EOT dans réponse
FIN
//Trace(nbrep+"Réponse TPE-->"+sReponse)
FIN
FIN

FIN// SI p_Niveau>0 ALORS

// fermeture cnx avec TPE
sFerme(gnTPEPort)

TraceFin()
RENVOYER(Vrai)


Si vous améliorez ce code, n'hésitez pas à m'en faire part.
Bon dev.
Posté le 10 décembre 2010 - 14:25
J'ai suivi à la lettre la procédure écrite par Philippe MAUGIN mais mon tpe refuse de répondre
dans la phase de dialogue avec le tpe.
J'envoie une demande d'ouverture de session (ENQ) au tpe. La demande est partie sans erreur.
Par contre j'attends la réponse ACK ou NAK du tpe, il n'y a ni ACK ni NACK. Il y a rien du tout.
Qu'est ce qui peut faire que le TPE ne réponde pas ?
Merci de votre aide.
Txoovlis
Posté le 05 janvier 2011 - 14:23
Bonjour,

Je suis également en train de travailler sur le racordement d'un tpe sagem à un système de caisse. Où puis-je me procurer le driver USB qui simule un port COM.
Par avance merci.

Séb.
Posté le 05 janvier 2011 - 15:37
Il s'agit d'un driver TELIUM-USB.INF, fourni par le fournisseur de TPE.
On doit pouvoir le télécharger.
Sur http://driversfinder.net/drivers/sagem-monetel-usb-telium-com6 par exemple
Posté le 10 janvier 2011 - 00:42
Bonsoir,

Merci pour votre réponse, mais je ne le trouve pas. Je n'ai pas pu l'obtenir par le fournisseur, car l'appareil est loué auprès d'une banque. Vous serez t-il possible de me le transmettre sur le mail ci dessous.
Par avance merci de votre aide.
choucas05@free.fr
Posté le 30 mai 2011 - 18:46
Salut philippe,
saurais - tu où l'on peut trouver le pilote usb pour le tpe?
j'ai chercher en vain et je n'ai rien trouvé!
Merci
Posté le 30 mai 2011 - 19:43
Je n'ai pas d'autre info que :
Sur http://driversfinder.net/drivers/sagem-monetel-usb-telium-com6 par exemple
Posté le 31 mai 2011 - 13:00
Si quelqu'un a réussi à trouver le pilote,
n'hésitez pas à me l'envoyer.
@: durjeau.thomas@hotmail.fr

Merci
Posté le 12 août 2011 - 08:56
Bonjour,

Aurais tu un example de message STX + ECR + MNT + IND + MRG + TYPE + DEV + PRIV [+ DELAI + AUTO] + ETX + LRC

en hexadecimal (je crois) avec le lrc pour que je puisse vérifier si je n'ai pas un pb de checksumm ou autre chose car mon TPS m'indique a chaque fois fontion impossible....

Merci beaucoup par avance
Posté le 12 août 2011 - 10:34
Non, je n'ai pas d'autre exemple que le code affiché précédement. Désolé ...
Membre enregistré
1 message
Posté le 29 août 2011 - 13:17
Bonjour

Merci pour ce moreceau de code

quelles sont les valeurs à utiliser pour :

gnTPETailBuffEntr est un entier
gnTPETailBuffSort est un entier
Membre enregistré
22 messages
Posté le 03 avril 2012 - 11:54
bonjour,

je teste ton programme mais la liaison ne veux vraiement pas se faire.

j'ai un appareil ict250 que je racorde avec un série/rj6.

pourrais tu m'aider stp?
Membre enregistré
22 messages
Posté le 04 avril 2012 - 15:59
Bonjour,

J'ai un soucis avec un terminal ICT250.
Je lui envoi le ENQ mais je n'ai aucun ACK en retour... Mon câble est bon car je recois un NAK (ascii 21). on dirait que ma tpe ne veut pas communiquer avec mon logiciel. Serait tu m'aider?
Membre enregistré
22 messages
Posté le 04 avril 2012 - 16:11
J'ai exactement le meme probleme, que faire?

Txoovlis wrote in news message <b94f77abbb2424637917a548ed58470c@news.pcsoft>:
J'ai suivi à la lettre la procédure écrite par Philippe MAUGIN mais mon tpe refuse de répondre
dans la phase de dialogue avec le tpe.
J'envoie une demande d'ouverture de session (ENQ) au tpe. La demande est partie sans erreur.
Par contre j'attends la réponse ACK ou NAK du tpe, il n'y a ni ACK ni NACK. Il y a rien du tout.
Qu'est ce qui peut faire que le TPE ne réponde pas ?
Merci de votre aide.
Txoovlis
Posté le 04 avril 2012 - 16:58
Bonjour,
Devant le trou noir sans fond et aucune aide trouvée, j'ai abandonné.
Désolé de ne pas pouvoir t'aider.
Cdlt
Txooblis
Membre enregistré
22 messages
Posté le 04 avril 2012 - 17:18
Tout ce que je voulais pas lire lol.
Juste une question, tu utilisais quoi comme câble?

Merci de ta réponse en tout cas.
Membre enregistré
22 messages
Posté le 05 avril 2012 - 11:58
Tout ce que je voulais pas lire lol.
Juste une question, tu utilisais quoi comme câble?
et quel type de tpe??
Merci de ta réponse en tout cas.

txoovlis a écrit dans le message de news <14ab10f5cd56c1695e115e1601d6a813@news.pcsoft> :
Bonjour,
Devant le trou noir sans fond et aucune aide trouvée, j'ai abandonné.
Désolé de ne pas pouvoir t'aider.
Cdlt
Txooblis
Membre enregistré
22 messages
Posté le 05 avril 2012 - 12:21
Tout ce que je voulais pas lire lol.
Juste une question, tu utilisais quoi comme câble?
et quel type de tpe??
Merci de ta réponse en tout cas.

txoovlis a écrit dans le message de news <14ab10f5cd56c1695e115e1601d6a813@news.pcsoft> :
Bonjour,
Devant le trou noir sans fond et aucune aide trouvée, j'ai abandonné.
Désolé de ne pas pouvoir t'aider.
Cdlt
Txooblis
Posté le 12 mars 2013 - 23:37
bravo pour cette source
c'est le protocole 'concert' et il marche parfaitement
Posté le 20 mars 2013 - 15:40
Bonjour,

J'ai utilisé votre code source mais je me trouve confrontée à un problème lors de la réponse du TPE dans la phase d'attente d'accord de la banque.
Mon TPE me renvoit bien ENQ, j'envoie ACK, mais ensuite je suis censée recevoir un texte contenant la réponse de la banque et ce que je reçois est complètement incohérent :
‚0±000000±00±9·¸²00±00300±5
ou
‚0±000000±00±9·¸²0±·00²00±3
...

Avez-vous déjà rencontré ce phénomène ?

Merci pour votre aide.

Cordialement,

Delphine PIN
Posté le 25 avril 2013 - 11:07
Salut tout le monde :)

J'ai trouvé cette page sur Google. Je ne développe pas sur le même langage, mais la problématique semble être exactement la même.

Je suis en train de me battre avec un TPE ingenico ICT250. Et j'ai quelques soucis.

1/ Le premier souci est la configuration de ce TPE : visiblement les codes postés sur Internet font part d'une configuration différente de celle indiquée par le constructeur.

Ingénico dit :
9600 , 7 bits , partity even, , start 1 , end 1 , flow control &#8594; rien

C'est bien cela ?

2 / Le deuxième souci est que je n'arrive pas a communiquer correctement avec ce TPE. Quand je lui envoie 05H , il me répond bien 06H mais en même temps il affiche « opération impossible » , se réinitialise, et refuse ensuite de communiquer. Il faut débrancher et rebrancher le câble USB pour qu'il recommence a répondre (mais de manière identique, avec le reset visible sur l’écran).


3/ Enfin, dans la doc sur le protocole Concert, il y a un scénario d'échange d'informations entre la caisse et le TPE. Et suite a la chaîne hexadécimale, il y a écris LRC.

02 30 31 30 30 30 30 35 36 30 30 31 31 30 39 37 38 20 20 20 20 20 20 20 20 20 20 03 LRC

Afin de pouvoir valider mon mode de calcul., qu'elle est la valeur de ce LRC dans cette chaîne d'exemple ?

Je vous remercie beaucoup de votre aide, car la je suis un peu bloqué.
Posté le 17 juin 2014 - 17:08
Rives a écrit :
Bonjour,
j'essaye moi aussi de programmer la liaison
très difficile de trouver une doc sur le protocole concert
j ai réussi a en trouver une si cela vous intéresse laisser moi votre mail
pour vous la transmettre

Cordialement,
Posté le 17 juin 2014 - 17:10
Bonjour,

Je serais TRES interessé par cette documentation.

D'avance Merci.
Posté le 25 juin 2014 - 17:47
Je suis ennuyé avec une connexion TPE via Citix : Pb aléatoires ... Pb Time out ???

Merci pour la documentation.

Michel
Posté le 25 juin 2014 - 18:05
Bonjour,
Je rencontre également des Pb de connexion et traitement TPE via Citrix.

Merci de me transmettre votre documentation.

Michel
Posté le 25 août 2014 - 11:41
Rives a écrit :
Bonjour,
j'essaye moi aussi de programmer la liaison
très difficile de trouver une doc sur le protocole concert
j ai réussi a en trouver une si cela vous intéresse laisser moi votre mail
pour vous la transmettre

Cordialement,
Membre enregistré
2 messages
Posté le 03 octobre 2014 - 10:13
Bonjour,

Si l'un d'entre vous pouvez me faire passer la doc, je serais un homme heureux :D

Merci

Cordialement,
Membre enregistré
6 messages
Posté le 21 octobre 2014 - 13:21
Pour ma part, j'ai beau faire j'ai toujours le message "FONCTION IMPOSSIBLE" et aucun retour de l'ICT250

Suis en port série.

--
Concepteur du logiciel Gesticlean
Membre enregistré
6 messages
Posté le 22 octobre 2014 - 16:48
Enfin réussi avec un ict250
le mode opératoire fourni est totalement obsolète au niveau du protocole (document en date du 11/08/2011 en provenance de ingenico... grrrr)

Voici un code qui fonctionne

// Résumé : <indiquez ici ce que fait la procédure>
// Syntaxe :
//[ <Résultat> = ] Paiement ( [<ValAPayer> est numérique])
//
// Paramètres :
// ValAPayer (numérique - valeur par défaut=0) : <indiquez ici le rôle de ValAPayer>
// Valeur de retour :
// booléen : // Aucune
//
// Exemple :
// Indiquez ici un exemple d'utilisation.
//
PROCEDURE Paiement(ValAPayer est un numérique=0)
// chaine contenant la valeur à transmettre
sEnvoi est une chaîne
// constitution de la chaine
// N° de caisse 2 car > id poste
sEnvoi=NumériqueVersChaîne(ini_poste,"02d")
// Montant 8 car sans les virgules complété à 0
sEnvoi+=NumériqueVersChaîne(Arrondi(ValAPayer,2)*100,"08d")
// IND 1 car > 1
sEnvoi+="1"
// mode 1 car > 1
sEnvoi+="1"
// Type 1 car > 0 pour achat > 1 pour remboursement
SI ValAPayer<0 ALORS
sEnvoi+="1"
SINON
sEnvoi+="0"
FIN
// dev 3 car > 978 pour euro
sEnvoi+="978"
// priv 10 car à 0
sEnvoi+=Complète("",10,"0")

bValRetour est un booléen=Faux
ChaineLRC est un entier
j est un entier
TailleAsc est un entier=Taille(sEnvoi)
nNBEssai est un entier=0
ucCaratere est un entier
sEnvoiParam est une chaîne

sMessageAttente est une chaîne=ChargeParam("T_MessageAttenteCb","Attente de réponse du tpv")
sMessageEnvoi est une chaîne=ChargeParam("T_MessageEnvoiCb","Transaction en cours")
sMessageValide est une chaîne=ChargeParam("T_MessageValideCb","Transaction valide")
sMessageEchec est une chaîne=ChargeParam("T_MessageEchecCb","Transaction échouée")
sMessageTempo est une chaîne=ChargeParam("T_MessageTempoCb","..................")
// a voir en fonction des premiers tests
nTempo est un entier = ChargeParamètre("TempoCB",10)
nTempoMessage est un entier
nTTempo est un entier=ChargeParamètre("TempoCBBoucle",10)

A_STX est une chaîne=Caract(2)
A_ETX est une chaîne=Caract(3)
A_EOT est une chaîne=Caract(4)
A_ENQ est une chaîne=Caract(5)
A_ACK est une chaîne=Caract(6)
sA_NAK est une chaîne=Caract(15)

TraceDébut(trFichier,ini_repertoire+"\tracecb"+DateSys()+".txt")

// Ouverture de COM1
nPORT_cb est un entier = ouvre_port_param(Val(ini_cb_port),i_tpv_baud,i_tpv_parite,i_tpv_bit,i_tpv_stop,i_tpv_dtr,i_tpv_rts,i_tpv_Xon,i_tpv_Bufe,i_tpv_Bufs,i_tpv_Tap)
SI nPORT_cb ALORS

//Calcul du LRC
ChaineLRC=0
POUR j =1 A TailleAsc
ucCaratere = Asc(Milieu(sEnvoi,j,1))
ChaineLRC=OUExclusifBinaire(ChaineLRC,ucCaratere)
FIN
ChaineLRC=OUExclusifBinaire(ChaineLRC,3)
RetChaine est une chaîne=""
// Vide le port Serie
SI sDansFileEntrée(1) >0 ALORS
RetChaine=sLit(ini_cb_port,sDansFileEntrée(ini_cb_port))
FIN
//Construction Trame
sEnvoiParam=A_STX
sEnvoiParam+=sEnvoi
sEnvoiParam+=A_ETX
sEnvoiParam+=Caract(ChaineLRC)
//Envoi Trame
sEcrit(nPORT_cb,A_ENQ+sEnvoiParam)
Trace(sEnvoiParam)
ToastAffiche(sMessageEnvoi,toastCourt,cvHaut,chCentre,iVertFoncé)

// attente de l'accusé de réception
nTempoMessage=0
BOUCLE
Multitâche(nTTempo)
SI ToucheEnfoncée(teEchap) ALORS
SI OuiNon(ChargeParam("T_IntrerruptionDuTraitement","Interruption du traitement")) ALORS
bValRetour=Faux
GOTO fintraitement
FIN
FIN
nTempoMessage++
SI nTempoMessage=nTempo
ToastAffiche(sMessageTempo,toastCourt,cvHaut,chCentre,iBleuFoncé)
nTempoMessage=0
FIN
RetChaine=sLit(nPORT_cb,sDansFileEntrée(nPORT_cb))
A FAIRE TANTQUE RetChaine=""

//Réponse > si présence d'un ack alors on continue
SI Position(RetChaine,A_ACK,1)>0 ALORS
//Attente Réponse TPE
nTempoMessage=0

DebutBoucle:
SI sDansFileEntrée(1) >0 ALORS
RetChaine=sLit(ini_cb_port,sDansFileEntrée(ini_cb_port))
FIN
// première boucle de lecture > on attends un message du terminal
BOUCLE
Multitâche(nTTempo)
SI ToucheEnfoncée(teEchap) ALORS
SI OuiNon(ChargeParam("T_IntrerruptionDuTraitement","Interruption du traitement")) ALORS
bValRetour=Faux
GOTO fintraitement
FIN
FIN
nTempoMessage++
SI nTempoMessage=nTempo
ToastAffiche(sMessageTempo,toastCourt,cvHaut,chCentre,iBleuFoncé)
nTempoMessage=0
FIN
RetChaine=sLit(nPORT_cb,sDansFileEntrée(nPORT_cb))
A FAIRE TANTQUE RetChaine=""


// nous avons reçu un message

// premier cas c'est un enq cela signifie que le terminal veut nous parler il faut lui transmettre un ack et reprendre l'écoute
SI RetChaine[[1]]=A_ENQ ALORS
//le terminal veut nous envoyer un message il faut ack et attendre un retour
Trace("TPV réception ENQ : début dialogue")
sEnvoiParam=A_ACK
sEcrit(nPORT_cb,sEnvoiParam)
GOTO DebutBoucle // reprise de la boucle de lecture
FIN

//Réponse OK
SI RetChaine[[5]]="0" ALORS
//Fin de Transmission
sEnvoiParam=A_EOT
sEcrit(nPORT_cb,sEnvoiParam)
Trace("Ok")
bValRetour=Vrai
ToastAffiche(sMessageValide,toastCourt,cvMilieu,chCentre,iVertFoncé)
SINON
//Fin de Transmission
sEnvoiParam=A_EOT
sEcrit(nPORT_cb,sEnvoiParam)
Trace("KO")
bValRetour=Faux
ToastAffiche(sMessageEchec,toastLong,cvMilieu,chCentre,iRougeFoncé)
FIN
SINON
Trace("NO REPONSE")
bValRetour=Faux
ToastAffiche(sMessageEchec,toastLong,cvMilieu,chCentre,iRougeFoncé)
FIN
SINON
Trace("NO CONNECTION")
Erreur("Erreur d'ouverture de COM1")
bValRetour=Faux
ToastAffiche(sMessageEchec,toastLong,cvMilieu,chCentre,iRougeFoncé)
FIN


fintraitement:

Trace("FIN")
//Fermeture du port
sFerme(nPORT_cb)

RENVOYER bValRetour

--
Concepteur du logiciel Gesticlean
Posté le 12 novembre 2014 - 15:41
Bonjour a tous,

Pas que je veuille faire ma pub ici (je ne développe pas sous WinDev), mais j'ai développé un KIT pour ce protocole. Il comprend :
- 1 DLL classique
- 1 ActiveX pour VB, ou Internet Explorer
- 1 Plug'in pour FireFox


Il permet d'envoyer le montant sans attendre la réponse du terminal ou d'attendre la réponse de ce dernier.

voici un lien ou vous pourrez télécharger une demo

http://www.deventik.com/download.htm
Membre enregistré
6 messages
Posté le 12 novembre 2014 - 16:12
Bon à savoir.

En attendant voici la dernière version de notre code permettant un dialogue opérationnel

// Résumé : <indiquez ici ce que fait la procédure>
// Syntaxe :
//[ <Résultat> = ] Paiement ( [<ValAPayer> est numérique])
//
// Paramètres :
// ValAPayer (numérique - valeur par défaut=0) : <indiquez ici le rôle de ValAPayer>
// Valeur de retour :
// booléen : // Aucune
//
// Exemple :
// Indiquez ici un exemple d'utilisation.
//
PROCEDURE Paiement(ValAPayer est un numérique=0)
// chaine contenant la valeur à transmettre
sEnvoi est une chaîne
// constitution de la chaine
// N° de caisse 2 car > id poste
sEnvoi=NumériqueVersChaîne(ini_poste,"02d")
// Montant 8 car sans les virgules complété à 0
sEnvoi+=NumériqueVersChaîne(Arrondi(ValAPayer,2)*100,"08d")
// IND 1 car > 1
sEnvoi+="1"
// mode 1 car > 1
sEnvoi+="1"
// Type 1 car > 0 pour achat > 1 pour remboursement
SI ValAPayer<0 ALORS
sEnvoi+="1"
SINON
sEnvoi+="0"
FIN
// dev 3 car > 978 pour euro
sEnvoi+="978"
// priv 10 car à 0
sEnvoi+=Complète("",10,"0")

bValRetour est un booléen=Faux
ChaineLRC est un entier
j est un entier
TailleAsc est un entier=Taille(sEnvoi)
nNBEssai est un entier=0
ucCaratere est un entier
sEnvoiParam est une chaîne

sMessageAttente est une chaîne=ChargeParam("T_MessageAttenteCb","Attente de réponse du tpv")
sMessageEnvoi est une chaîne=ChargeParam("T_MessageEnvoiCb","Transaction en cours")
sMessageValide est une chaîne=ChargeParam("T_MessageValideCb","Transaction valide")
sMessageEchec est une chaîne=ChargeParam("T_MessageEchecCb","Transaction échouée")
sMessageTempo est une chaîne=ChargeParam("T_MessageTempoCb","..................")
// a voir en fonction des premiers tests
nTempo est un entier = ChargeParamètre("TempoCB",10)
nTempoMessage est un entier
nTTempo est un entier=ChargeParamètre("TempoCBBoucle",10)
nBoucleMax est un entier = ChargeParamètre("NbIterationsAttenteMax",1200) // 300 par minute
i est un entier


A_STX est une chaîne=Caract(2)
A_ETX est une chaîne=Caract(3)
A_EOT est une chaîne=Caract(4)
A_ENQ est une chaîne=Caract(5)
A_ACK est une chaîne=Caract(6)
sA_NAK est une chaîne=Caract(15)

TraceDébut(trFichier,ini_repertoire+"\tracecb"+DateSys()+".txt")

// Ouverture de COM1
nPORT_cb est un entier = ouvre_port_param(Val(ini_cb_port),i_tpv_baud,i_tpv_parite,i_tpv_bit,i_tpv_stop,i_tpv_dtr,i_tpv_rts,i_tpv_Xon,i_tpv_Bufe,i_tpv_Bufs,i_tpv_Tap)
SI nPORT_cb ALORS

//Calcul du LRC
ChaineLRC=0
POUR j =1 A TailleAsc
ucCaratere = Asc(Milieu(sEnvoi,j,1))
ChaineLRC=OUExclusifBinaire(ChaineLRC,ucCaratere)
FIN
ChaineLRC=OUExclusifBinaire(ChaineLRC,3)
RetChaine est une chaîne=""
// Vide le port Serie
SI sDansFileEntrée(1) >0 ALORS
RetChaine=sLit(ini_cb_port,sDansFileEntrée(ini_cb_port))
FIN
//Construction Trame
sEnvoiParam=A_STX
sEnvoiParam+=sEnvoi
sEnvoiParam+=A_ETX
sEnvoiParam+=Caract(ChaineLRC)
//Envoi Trame
sEcrit(nPORT_cb,A_ENQ+sEnvoiParam)
Trace(sEnvoiParam)
ToastAffiche(sMessageEnvoi,toastCourt,cvHaut,chCentre,iVertFoncé)

// attente de l'accusé de réception
// cette boucle peut être interompue automatiquement si rtien ne se passe avant un laps de temps paramétrable
// terminal pas prêt
// client non décidé et terminal tactile sans clavier
nTempoMessage=0
BOUCLE
Multitâche(nTTempo)
SI ToucheEnfoncée(teEchap) ALORS
SI OuiNon(ChargeParam("T_IntrerruptionDuTraitement","Interruption du traitement")) ALORS
bValRetour=Faux
GOTO fintraitement
FIN
FIN
i++
nTempoMessage++
SI nTempoMessage=nTempo
ToastAffiche(sMessageTempo,toastCourt,cvHaut,chCentre,iBleuFoncé)
nTempoMessage=0
FIN
RetChaine=sLit(nPORT_cb,sDansFileEntrée(nPORT_cb))
//si i>nBoucleMax alors sortir
A FAIRE TANTQUE RetChaine=""
i=1
Trace("Réponse 1> "+RetChaine)

//Réponse > si présence d'un ack alors on continue
SI Position(RetChaine,A_ACK,1)>0 ALORS
//Attente Réponse TPE
nTempoMessage=0

DebutBoucle:
SI sDansFileEntrée(1) >0 ALORS
RetChaine=sLit(ini_cb_port,sDansFileEntrée(ini_cb_port))
FIN
// première boucle de lecture > on attends un message du terminal
BOUCLE
Multitâche(nTTempo)
SI ToucheEnfoncée(teEchap) ALORS
SI OuiNon(ChargeParam("T_IntrerruptionDuTraitement","Interruption du traitement")) ALORS
bValRetour=Faux
GOTO fintraitement
FIN
FIN
i++
//trace(i,nBoucleMax)
nTempoMessage++
SI nTempoMessage=nTempo
ToastAffiche(sMessageTempo,toastCourt,cvHaut,chCentre,iBleuFoncé)
nTempoMessage=0
FIN
SI i>nBoucleMax ALORS SORTIR
RetChaine=sLit(nPORT_cb,sDansFileEntrée(nPORT_cb))
A FAIRE TANTQUE RetChaine=""

Trace("Réponse2 > "+RetChaine)
// nous avons reçu un message

// premier cas c'est un enq cela signifie que le terminal veut nous parler il faut lui transmettre un ack et reprendre l'écoute
SI RetChaine[[1]]=A_ENQ ALORS
//le terminal veut nous envoyer un message il faut ack et attendre un retour
Trace("TPV réception ENQ : début dialogue")
sEnvoiParam=A_ACK
sEcrit(nPORT_cb,sEnvoiParam)
Trace("Relance boucle 1")
GOTO DebutBoucle // reprise de la boucle de lecture
FIN

// on nettoye la valeur retournée pour ne prendre que les éléments présents après le stx
RetChaine=ExtraitChaîne(RetChaine,2,A_STX)

//Réponse OK
SI RetChaine[[3]]="0" ALORS
//Fin de Transmission
sEnvoiParam=A_EOT
sEcrit(nPORT_cb,sEnvoiParam)
Trace("Ok")
bValRetour=Vrai
ToastAffiche(sMessageValide,toastCourt,cvMilieu,chCentre,iVertFoncé)
SINON
//Fin de Transmission
sEnvoiParam=A_EOT
sEcrit(nPORT_cb,sEnvoiParam)
Trace("KO")
bValRetour=Faux
ToastAffiche(sMessageEchec,toastLong,cvMilieu,chCentre,iRougeFoncé)
FIN
SINON
Trace("NO REPONSE")
bValRetour=Faux
ToastAffiche(sMessageEchec,toastLong,cvMilieu,chCentre,iRougeFoncé)
FIN
SINON
Trace("NO CONNECTION")
Erreur("Erreur d'ouverture de COM1")
bValRetour=Faux
ToastAffiche(sMessageEchec,toastLong,cvMilieu,chCentre,iRougeFoncé)
FIN


fintraitement:

Trace("FIN")
//Fermeture du port
sFerme(nPORT_cb)
// il faut traiter le fait que l'appareil peut être tomber en panne donc si le retour est négatif on pose la question du forçage éventuel du paiement
SI bValRetour=Faux ALORS
SI Ouvre(question,ChargeParamT("T_QuestionErreurCB","Le paiement via le TPE à échoué, Forçage du paiement en CB malgré tout ?"),ChargeParam("T_Forcage","Forçage"),ChargeParam("T_Annulation","Annulation")) ALORS
bValRetour=Vrai
FIN
FIN
RENVOYER bValRetour

--
Concepteur du logiciel Gesticlean
Posté le 06 février 2015 - 10:31
Bonjour,
j'ai vraiment besoin d'une doc sur le protocole concert, je développe en C# une liaison, j'arrive même pas envoyer le ENQ car j'ai fonction impossible.

Merci pour votre aide
Membre enregistré
6 messages
Posté le 06 février 2015 - 16:37
Voilà le document que mon partenaire bancaire m'a communiqué.

Malheureusement, il ne faut pas s'y fier intégralement et il à été impossible d'avoir une version plus récente.

Si vous analysez mon code plus haut vous verrez les ajustements.

https://drive.google.com/file/d/0BxHrqP3clMhxN1dxQV9BbUpnRUNpTWNLVXNPQ1lNYkFGRUY0/view…

--
Concepteur du logiciel Gesticlean
Posté le 13 juillet 2015 - 10:00
Merci pour ce lien très utiles.
Membre enregistré
1 287 messages
Popularité : +20 (72 votes)
Posté le 25 février 2016 - 12:50
Bonjour M Bererdozzi

je souhaite prendre contacte avec vous

bertin.carriere@ gmail . com

--
Bertin CARRIERE
Consultant & Formateur
bertin.carriere@gmail.com
http://www.zen-project.be http://www.linkedin.com/in/bertincarriere

Belgique +32(0)2/318.02.67
France +33(0)3/66.722.542
Espagne +34.5/12.702.266

Membre de http://www.be-dev.be
Posté le 26 février 2016 - 14:58
OGER a écrit :
Bonjour David

voila mon pb si tu peux m'aider

Nous devons intégrer dans notre logiciel de Magasin
la liaison série ou USB avec le TPE pour l'envoi du montant.
Nous avons fait des tests sur les Sagem, mais cela ne marche pas, erreur
79 à la transmission des datas (STX+DATA+ETX+LRC).
Sagem semble être out et ne sait pas.

Aurais tu une idée (DLL) et un document sur les codes erreur


Réalisé:

On envoi ENQ
Réponse ACK ok du TPE

On envoi (STX+DATA+ETX+LRC).
et le sagem nous répond 79 et affiche "Fonction impossible"


Merci


Salutations, PY OGER 06 86 42 22 91


Bonjour,

Avez-vous pu trouver une solution car nous avons essayé tous les codes possibles et rien ne fonctionne, nous avons également fonction impossible sur le tpe dès le début.

Merci

Marlène
Membre enregistré
24 messages
Posté le 04 mars 2016 - 11:00
Bonjour,

J'aurai dû lire ce poste avant de me lancer dans l'affaire, j'aurais gagné du temps. Merci à ceux qui ont partagé leur code.


Malèle, voici quelques pistes.

As tu testé ton câble de connexion et ton TPE avec une caisse en place ?

As tu bien programmé ton port com : 1 start, 7bits de données, parité paire, 1 stop , half duplex.

Vérifie aussi que tes délais d'attente de remplissage des buffer sont suffisants. (le temps d'émission d'un EOT peut aller jusqu'à 700ms d'après la doc Ingénico).

Le LRC ne concerne que la trame d'envoi des données, et n'inclut pas le STX

--
----------------
www.florys.com
Développement de solutions de fidélisation client
Membre enregistré
1 287 messages
Popularité : +20 (72 votes)
Posté le 04 mars 2016 - 12:16
@ Marlène

Ingenico, Benelux, France ou Allemagne, car les protocole sur les ICT ne sont pas les mêmes en fonction du Pays ...

--
Bertin CARRIERE
Consultant & Formateur
bertin.carriere@gmail.com
http://www.zen-project.be http://www.linkedin.com/in/bertincarriere

Belgique +32(0)2/318.02.67
France +33(0)3/66.722.542
Espagne +34.5/12.702.266

Membre de http://www.be-dev.be
Posté le 12 mai 2016 - 13:45
Bonjour,

Je tiens à remercier les différentes intervenants sur ce sujet, particulièrement ceux qui ont partagés leur code source.
Merci à vous.

Lilian
Membre enregistré
1 287 messages
Popularité : +20 (72 votes)
Posté le 12 mai 2016 - 20:50
Pour les TPE ICT-250 de INGENICO en protocole ZVT-700 ZVT700 , nous avons développé un composant que nous mettrons en démo sur le site de dépot de PCSoft

--
Bertin CARRIERE
Consultant & Formateur
bertin.carriere@gmail.com
http://www.zen-project.be http://www.linkedin.com/in/bertincarriere

Belgique +32(0)2/318.02.67
France +33(0)3/66.722.542
Espagne +34.5/12.702.266

Membre de http://www.be-dev.be
Posté le 09 septembre 2016 - 10:02
Bonjour Merci pour le Code TPE à Philippe MAUGIN ! Cela marche super bien.

Vous m'avez fait économise des jour de DEV et recherche
Posté le 04 octobre 2016 - 12:26
Bonjour,

Je programme actuellement l'envoi vers un tpe ingenico eft930b, seulement malgré tous mes essais cela ne fonctionne pas.
Aussi je souhaitais savoir si vous aviez bien un cable RS232 vers un COM. De plus, je n'ai pas de driver, et ne sais pas s'il le faut vraiement et où le trouver, je n'ai que ce cable et l'alimentation électrique est-ce que cela peut suffir pour les tests.
Pouvez-vous m'apporter des précisions à ce sujet.
Merci pour votre aide.
Posté le 04 janvier 2017 - 11:09
Bonjour,

Pouvez vous me faire parvenir la doc sur le protocole Concert.

Merci d'avance.

Cordialement,

y.auderset@hotmail.fr
Posté le 02 mai 2017 - 18:07
Bonjour,

Je développe en vb.net et j'ai le même problème que certains d'entre vous : j'envoie au TPE une requète ENQ, il me renvoie bien ACK mais en même temps le terminal m'affiche 'fonction impossible'.

Je m'arrache les cheveux depuis 2 semaines, je n'arrive pas à trouver la solution.

Ceux parmi vous qui ont eu ce problème, avez-vous pu le résoudre ? Est-ce un problème de configuration du port série ?

Je vous remercie d'avance !!!!!

Cordialement
Posté le 04 mai 2017 - 10:59
Bonjour,

J'ai fianlement résolu mon problème. Au cas où d'autres personnes le rencontrent, voici ma solution :

En fait, Le TPE récupérait bien mon ENQ, mais m'affichait fonction impossible parce que je n'envoyait pas assez tôt la requète suivante qaund je mettais un point d'arret, et sans point d'arret, le calcul du checksum n'était pas bon.

Voici mon code en VB.NET :

Private Sub SimpleButton1_Click(sender As Object, e As EventArgs) Handles SimpleButton1.Click
        Try
            With SerialPort1
                .PortName = "COM5"
                .Handshake = IO.Ports.Handshake.XOnXOff
                .BaudRate = 9600
                .DataBits = 7
                .Parity = IO.Ports.Parity.Even
                .StopBits = IO.Ports.StopBits.One
                .ReadTimeout = 1000000
                .Encoding = Encoding.ASCII
                .Open()
            End With

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        Etat = 1
        SerialPort1.Write(Chr(5))

    End Sub


 Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        Dim Buffer(SerialPort1.BytesToRead - 1) As Byte
        SerialPort1.Read(Buffer, 0, SerialPort1.BytesToRead)
        If SerialPort1.Encoding.GetString(Buffer) = Chr(vbACK) Then
            If Etat = 1 Then
                Dim checksum As Integer = 0
                Dim St_MontantCent As String = CInt(Montant * 100).ToString.PadLeft(8, "0")

                'Dans la partie "constante : 1 indique que le champ REP sera dans la réponse du TPE, et le 0 indique un traitmeent de débit
                Dim ChaineEvoi As String = Nocaisse & St_MontantCent & "1" & If(PaiementCheque, "C", "1") & "0978          " & Chr(3)
                Dim byteChecksum As Byte
                Dim strChar As Char
                For Each strChar In ChaineEvoi
                    byteChecksum = byteChecksum Xor Convert.ToByte(strChar)
                Next
                ChaineEvoi = Chr(2) & ChaineEvoi & Convert.ToChar(byteChecksum)
                SerialPort1.Write(ChaineEvoi)
                Etat = 2
            Else
                Dim tot As String = ""
            End If
        Else
            If SerialPort1.Encoding.GetString(Buffer) = Chr(15) Then

            End If
        End If
        SerialPort1.Close()
    End Sub


Bon courage !
Posté le 11 mai 2017 - 10:34
Rives a écrit :
Bonjour,
j'essaye moi aussi de programmer la liaison
très difficile de trouver une doc sur le protocole concert
j ai réussi a en trouver une si cela vous intéresse laisser moi votre mail
pour vous la transmettre

Cordialement,


avec plaisir : idlog@wanadoo.fr et merci d'avance
Membre enregistré
26 messages
Popularité : +1 (1 vote)
Posté le 12 mai 2017 - 11:53
Merci Pascal pour ton code, il fonctionne parfaitement avec un iCT220 !!!! :merci:
Des jours et des jours de labeur économisés :D

Pour ceux qui galèrent comme moi à trouver les drivers pour un ICT220/250 par USB :

https://esqa.moneris.com/connect/en/download/feb05/feb05/misc/iCT250USBDriver.zip
Posté le 15 novembre 2017 - 12:25
Pascal BERARDOZZI wrote:
Bon à savoir.

En attendant voici la dernière version de notre code permettant un dialogue opérationnel

// Résumé : <indiquez ici ce que fait la procédure>
// Syntaxe :
//[ <Résultat> = ] Paiement ( [<ValAPayer> est numérique])
//
// Paramètres :
// ValAPayer (numérique - valeur par défaut=0) : <indiquez ici le rôle de ValAPayer>
// Valeur de retour :
// booléen : // Aucune
//
// Exemple :
// Indiquez ici un exemple d'utilisation.
//
PROCEDURE Paiement(ValAPayer est un numérique=0)
// chaine contenant la valeur à transmettre
sEnvoi est une chaîne
// constitution de la chaine
// N° de caisse 2 car > id poste
sEnvoi=NumériqueVersChaîne(ini_poste,"02d")
// Montant 8 car sans les virgules complété à 0
sEnvoi+=NumériqueVersChaîne(Arrondi(ValAPayer,2)*100,"08d")
// IND 1 car > 1
sEnvoi+="1"
// mode 1 car > 1
sEnvoi+="1"
// Type 1 car > 0 pour achat > 1 pour remboursement
SI ValAPayer<0 ALORS
sEnvoi+="1"
SINON
sEnvoi+="0"
FIN
// dev 3 car > 978 pour euro
sEnvoi+="978"
// priv 10 car à 0
sEnvoi+=Complète("",10,"0")

bValRetour est un booléen=Faux
ChaineLRC est un entier
j est un entier
TailleAsc est un entier=Taille(sEnvoi)
nNBEssai est un entier=0
ucCaratere est un entier
sEnvoiParam est une chaîne

sMessageAttente est une chaîne=ChargeParam("T_MessageAttenteCb","Attente de réponse du tpv")
sMessageEnvoi est une chaîne=ChargeParam("T_MessageEnvoiCb","Transaction en cours")
sMessageValide est une chaîne=ChargeParam("T_MessageValideCb","Transaction valide")
sMessageEchec est une chaîne=ChargeParam("T_MessageEchecCb","Transaction échouée")
sMessageTempo est une chaîne=ChargeParam("T_MessageTempoCb","..................")
// a voir en fonction des premiers tests
nTempo est un entier = ChargeParamètre("TempoCB",10)
nTempoMessage est un entier
nTTempo est un entier=ChargeParamètre("TempoCBBoucle",10)
nBoucleMax est un entier = ChargeParamètre("NbIterationsAttenteMax",1200) // 300 par minute
i est un entier


A_STX est une chaîne=Caract(2)
A_ETX est une chaîne=Caract(3)
A_EOT est une chaîne=Caract(4)
A_ENQ est une chaîne=Caract(5)
A_ACK est une chaîne=Caract(6)
sA_NAK est une chaîne=Caract(15)

TraceDébut(trFichier,ini_repertoire+"\tracecb"+DateSys()+".txt")

// Ouverture de COM1
nPORT_cb est un entier = ouvre_port_param(Val(ini_cb_port),i_tpv_baud,i_tpv_parite,i_tpv_bit,i_tpv_stop,i_tpv_dtr,i_tpv_rts,i_tpv_Xon,i_tpv_Bufe,i_tpv_Bufs,i_tpv_Tap)
SI nPORT_cb ALORS

//Calcul du LRC
ChaineLRC=0
POUR j =1 A TailleAsc
ucCaratere = Asc(Milieu(sEnvoi,j,1))
ChaineLRC=OUExclusifBinaire(ChaineLRC,ucCaratere)
FIN
ChaineLRC=OUExclusifBinaire(ChaineLRC,3)
RetChaine est une chaîne=""
// Vide le port Serie
SI sDansFileEntrée(1) >0 ALORS
RetChaine=sLit(ini_cb_port,sDansFileEntrée(ini_cb_port))
FIN
//Construction Trame
sEnvoiParam=A_STX
sEnvoiParam+=sEnvoi
sEnvoiParam+=A_ETX
sEnvoiParam+=Caract(ChaineLRC)
//Envoi Trame
sEcrit(nPORT_cb,A_ENQ+sEnvoiParam)
Trace(sEnvoiParam)
ToastAffiche(sMessageEnvoi,toastCourt,cvHaut,chCentre,iVertFoncé)

// attente de l'accusé de réception
// cette boucle peut être interompue automatiquement si rtien ne se passe avant un laps de temps paramétrable
// terminal pas prêt
// client non décidé et terminal tactile sans clavier
nTempoMessage=0
BOUCLE
Multitâche(nTTempo)
SI ToucheEnfoncée(teEchap) ALORS
SI OuiNon(ChargeParam("T_IntrerruptionDuTraitement","Interruption du traitement")) ALORS
bValRetour=Faux
GOTO fintraitement
FIN
FIN
i++
nTempoMessage++
SI nTempoMessage=nTempo
ToastAffiche(sMessageTempo,toastCourt,cvHaut,chCentre,iBleuFoncé)
nTempoMessage=0
FIN
RetChaine=sLit(nPORT_cb,sDansFileEntrée(nPORT_cb))
//si i>nBoucleMax alors sortir
A FAIRE TANTQUE RetChaine=""
i=1
Trace("Réponse 1> "+RetChaine)

//Réponse > si présence d'un ack alors on continue
SI Position(RetChaine,A_ACK,1)>0 ALORS
//Attente Réponse TPE
nTempoMessage=0

DebutBoucle:
SI sDansFileEntrée(1) >0 ALORS
RetChaine=sLit(ini_cb_port,sDansFileEntrée(ini_cb_port))
FIN
// première boucle de lecture > on attends un message du terminal
BOUCLE
Multitâche(nTTempo)
SI ToucheEnfoncée(teEchap) ALORS
SI OuiNon(ChargeParam("T_IntrerruptionDuTraitement","Interruption du traitement")) ALORS
bValRetour=Faux
GOTO fintraitement
FIN
FIN
i++
//trace(i,nBoucleMax)
nTempoMessage++
SI nTempoMessage=nTempo
ToastAffiche(sMessageTempo,toastCourt,cvHaut,chCentre,iBleuFoncé)
nTempoMessage=0
FIN
SI i>nBoucleMax ALORS SORTIR
RetChaine=sLit(nPORT_cb,sDansFileEntrée(nPORT_cb))
A FAIRE TANTQUE RetChaine=""

Trace("Réponse2 > "+RetChaine)
// nous avons reçu un message

// premier cas c'est un enq cela signifie que le terminal veut nous parler il faut lui transmettre un ack et reprendre l'écoute
SI RetChaine[[1]]=A_ENQ ALORS
//le terminal veut nous envoyer un message il faut ack et attendre un retour
Trace("TPV réception ENQ : début dialogue")
sEnvoiParam=A_ACK
sEcrit(nPORT_cb,sEnvoiParam)
Trace("Relance boucle 1")
GOTO DebutBoucle // reprise de la boucle de lecture
FIN

// on nettoye la valeur retournée pour ne prendre que les éléments présents après le stx
RetChaine=ExtraitChaîne(RetChaine,2,A_STX)

//Réponse OK
SI RetChaine[[3]]="0" ALORS
//Fin de Transmission
sEnvoiParam=A_EOT
sEcrit(nPORT_cb,sEnvoiParam)
Trace("Ok")
bValRetour=Vrai
ToastAffiche(sMessageValide,toastCourt,cvMilieu,chCentre,iVertFoncé)
SINON
//Fin de Transmission
sEnvoiParam=A_EOT
sEcrit(nPORT_cb,sEnvoiParam)
Trace("KO")
bValRetour=Faux
ToastAffiche(sMessageEchec,toastLong,cvMilieu,chCentre,iRougeFoncé)
FIN
SINON
Trace("NO REPONSE")
bValRetour=Faux
ToastAffiche(sMessageEchec,toastLong,cvMilieu,chCentre,iRougeFoncé)
FIN
SINON
Trace("NO CONNECTION")
Erreur("Erreur d'ouverture de COM1")
bValRetour=Faux
ToastAffiche(sMessageEchec,toastLong,cvMilieu,chCentre,iRougeFoncé)
FIN


fintraitement:

Trace("FIN")
//Fermeture du port
sFerme(nPORT_cb)
// il faut traiter le fait que l'appareil peut être tomber en panne donc si le retour est négatif on pose la question du forçage éventuel du paiement
SI bValRetour=Faux ALORS
SI Ouvre(question,ChargeParamT("T_QuestionErreurCB","Le paiement via le TPE à échoué, Forçage du paiement en CB malgré tout ?"),ChargeParam("T_Forcage","Forçage"),ChargeParam("T_Annulation","Annulation")) ALORS
bValRetour=Vrai
FIN
FIN
RENVOYER bValRetour

--
Concepteur du logiciel Gesticlean


Bonjour,

Pourriez-vous rajouter le code des procédures :
ChargeParam
Ouvre_Port_Param

Merci par avance.
Membre enregistré
19 messages
Posté le 15 novembre 2017 - 16:09
Quels sont les paramètre à indiquer pour :
i_tpv_baud
i_tpv_parite
i_tpv_bit
i_tpv_stop
i_tpv_dtr
i_tpv_rts
i_tpv_Xon
i_tpv_Bufe
i_tpv_Bufs
i_tpv_Tap

Je suppose que ouvre_port_param utilise souvre et sfixeparametre ...

Merci de votre aide.
Posté le 15 novembre 2017 - 17:16
Bonjour,

pour ma part j'ai simplifié le code, nos clients utilisent cet interface depuis 6 mois sans problème :

// Résumé : <indiquez ici ce que fait la procédure>
// Syntaxe :
//[ <Résultat> = ] Paiement_ICT220_250 (<ValAPayer>)
//
// Paramètres :
// ValAPayer : <indiquez ici le rôle de ValAPayer>
// Valeur de retour :
// booléen : // Aucune
//
// Exemple :
// Indiquez ici un exemple d'utilisation.
//
Procedure Paiement_ICT220_250(ValAPayer)
//
// chaine contenant la valeur à transmettre
sEnvoi est une chaîne
// constitution de la chaine
// N° de caisse 2 car > id poste
sEnvoi = NumériqueVersChaîne(Val(NumCaisseOpen),"02d")
// Montant 8 car sans les virgules complété à 0
sEnvoi += NumériqueVersChaîne(Arrondi(ValAPayer,2)*100,"08d")
// IND 1 car > 1
sEnvoi += "1"
// mode 1 car > 1
sEnvoi += "1"
// Type 1 car > 0 pour achat > 1 pour remboursement
SI ValAPayer < 0 ALORS
sEnvoi += "1"
SINON
sEnvoi += "0"
FIN
// dev 3 car > 978 pour euro
sEnvoi += "978"
// priv 10 car à 0
sEnvoi += Complete("",10,"0")

bValRetour est un booléen=Faux
ChaineLRC est un entier
j est un entier
TailleAsc est un entier=Taille(sEnvoi)
nNBEssai est un entier=0
ucCaratere est un entier
sEnvoiParam est une chaîne

sMessageAttente est une chaîne = "Initialisation TPE"
LIB_ETAT = sMessageAttente
LIB_ETAT..CouleurFond = RVB(255, 215, 215)

sMessageEnvoi est une chaîne = "Transaction en cours"
sMessageValide est une chaîne = "Transaction valide"
sMessageEchec est une chaîne = "Transaction échouée"
sMessageTempo est une chaîne = ".................."
// a voir en fonction des premiers tests
nTempo est un entier = 10
nTempoMessage est un entier
// permet de maitriser l'interruption de l'attente
nTTempo est un entier = Val(INILit("TPE", "TEMPO", "10", ComplèteRep(RepFichier) + "WDCaisse.ini"))
nBoucleMax est un entier = 600 // nTTempo * 600, si 0,1 x 600 = 60s
i est un entier

A_STX est une chaîne = Caract(2)
A_ETX est une chaîne = Caract(3)
A_EOT est une chaîne = Caract(4)
A_ENQ est une chaîne = Caract(5)
A_ACK est une chaîne = Caract(6)
sA_NAK est une chaîne= Caract(15)

RetChaine est une chaîne=""
nPORT_cb est un entier = nTPE_Port // Variable contenant le numéro du port COM (voir gestionnaire de périphériques)
// Ouverture de COMxx
SI PAS sOuvre(nPORT_cb, 9600, 9600, sTimeoutDéfaut, Faux) ALORS
Erreur("Connexion au TPE impossible !", "Veuillez vérifier s'il est sous tension et bien connecté à la caisse.", "", ErreurInfo(errMessage))
LIB_ETAT = ""
bValRetour=Faux
GOTO FinTraitement
FIN
SI nPORT_cb > 0 ALORS
// saisiecaisse_TPE_valider..visible = vrai
SI gbFinForcée ALORS
bValRetour = Vrai
GOTO FinTraitement
FIN
//Calcul du LRC
ChaineLRC=0
POUR j =1 A TailleAsc
ucCaratere = Asc(Milieu(sEnvoi,j,1))
ChaineLRC=OUExclusifBinaire(ChaineLRC,ucCaratere)
FIN
ChaineLRC=OUExclusifBinaire(ChaineLRC,3)
// Vide le port Serie
SI sDansFileEntrée(1) >0 ALORS
RetChaine=sLit(nPORT_cb, sDansFileEntrée(nPORT_cb))
FIN
//Construction Trame
sEnvoiParam=A_STX
sEnvoiParam+=sEnvoi
sEnvoiParam+=A_ETX
sEnvoiParam+=Caract(ChaineLRC)
//Envoi Trame
sEcrit(nPORT_cb,A_ENQ+sEnvoiParam)
//
LIB_ETAT = "Attente paiement client"
LIB_ETAT..CouleurFond = RVB(252, 224, 91)
SI gbFinForcée ALORS
bValRetour = Vrai
GOTO FinTraitement
FIN
//
// attente de l'accusé de réception
// cette boucle peut être interrompue automatiquement si rien ne se passe avant un laps de temps paramétrable
// terminal pas prêt
// client non décidé et terminal tactile sans clavier
nTempoMessage=0
BOUCLE
Multitâche(nTTempo)
SI ToucheEnfoncée(teEchap) ALORS
SI OuiNon("Interruption du traitement ?") = Oui ALORS
bValRetour=Faux
GOTO FinTraitement
FIN
FIN
SI gbFinForcée ALORS
bValRetour = Vrai
GOTO FinTraitement
FIN
i++
nTempoMessage++
RetChaine=sLit(nPORT_cb,sDansFileEntrée(nPORT_cb))
SI i>nBoucleMax ALORS SORTIR
A FAIRE TANTQUE RetChaine=""
//
i=1
//Réponse > si présence d'un ack alors on continue
SI Position(RetChaine,A_ACK,1)>0 ALORS
//Attente Réponse TPE
nTempoMessage=0

DebutBoucle:
SI sDansFileEntrée(1) >0 ALORS
RetChaine=sLit(nPORT_cb, sDansFileEntrée(nPORT_cb))
FIN
// première boucle de lecture > on attends un message du terminal
BOUCLE
Multitâche(nTTempo)
SI ToucheEnfoncée(teEchap) ALORS
SI OuiNon("Interruption du traitement ?") = Oui ALORS
bValRetour=Faux
GOTO FinTraitement
FIN
FIN
SI gbFinForcée ALORS
bValRetour = Vrai
GOTO FinTraitement
FIN
i++
nTempoMessage++
SI i>nBoucleMax ALORS SORTIR
RetChaine=sLit(nPORT_cb,sDansFileEntrée(nPORT_cb))
A FAIRE TANTQUE RetChaine=""

// nous avons reçu un message

// premier cas c'est un enq cela signifie que le terminal veut nous parler il faut lui transmettre un ack et reprendre l'écoute
SI RetChaine[[1]]=A_ENQ ALORS
//le terminal veut nous envoyer un message il faut ack et attendre un retour
sEnvoiParam=A_ACK
sEcrit(nPORT_cb,sEnvoiParam)
GOTO DebutBoucle // reprise de la boucle de lecture
FIN

// on nettoye la valeur retournée pour ne prendre que les éléments présents après le stx
RetChaine=ExtraitChaîne(RetChaine,2,A_STX)
//Réponse OK
SI RetChaine[[3]]="0" ALORS
//Fin de Transmission
sEnvoiParam=A_EOT
sEcrit(nPORT_cb,sEnvoiParam)
LIB_ETAT = "Paiement client effectué !"
LIB_ETAT..CouleurFond = VertFoncé
bValRetour=Vrai
SINON
//Fin de Transmission
sEnvoiParam=A_EOT
sEcrit(nPORT_cb,sEnvoiParam)
LIB_ETAT = "Echec paiement client !"
LIB_ETAT..CouleurFond = RougeClair
bValRetour=Faux
FIN
SINON
bValRetour=Faux
LIB_ETAT = "Echec paiement client !"
LIB_ETAT..CouleurFond = RougeClair
FIN
SINON
LIB_ETAT = ""
LIB_ETAT..CouleurFond = Transparent
Erreur("Erreur d'ouverture de COM" + nPORT_cb)
bValRetour=Faux
FIN

FinTraitement:

//Fermeture du port
sFerme(nPORT_cb)
// il faut traiter le fait que l'appareil peut être tomber en panne donc si le retour est négatif on pose la question du forçage éventuel du paiement
SI bValRetour=Faux ALORS
//1 : Enregistrer le paiement
//2 : Ne pas enregistrer le paiement
SI Dialogue("Le paiement via le TPE a échoué !") = 1
bValRetour=Vrai
FIN
SINON
// Temporisation(10)
FIN
//
RENVOYER bValRetour
Membre enregistré
19 messages
Posté le 17 novembre 2017 - 17:36
Je vais tester les deux procédures
Mais dans celle proposé par J. Fernandez,je ne comprends pas gbFinForcée ...
Quelle valeur a-t-il et quelle est son utilité exact ?

Merci du retour.
Posté le 20 novembre 2017 - 08:19
Bonjour,

j'ai oublié de supprimer le code utilisant cette variable, cette variable et son code n'ont plus lieu d'être n'en tenez pas compte :)
Posté le 22 novembre 2017 - 11:52
Bonjour à tous,

Je recherche un ninja de la monétique pour integrer une superbe boite ( psp ) . Si quelqu'un est intéressé !!!

Merci
Posté le 11 janvier 2018 - 13:52
Bonjour à tous,

J'ai implémenté et testé plusieurs procédures fournies sur le forum dans mon logiciel (celle de Eric et J. FERNANDEZ), mais je suis confronté au même problème...

En postulat, le sfixeparamètre place bien le paramétrage du port COM comme requis par le protocole CONCERT.

Le montant est bien envoyé au TPE.
Si la transaction est annulée ou refusée, j'obtiens bien le code de retour du TPE.

En revanche, je n'arrive pas à récupérer l'acceptation du TPE.

Auriez-vous quelques suggestions, voire solutions ?

Merci par avance,
Thierry
Posté le 14 janvier 2018 - 17:23
Bonjour,

Je rencontre le même problème et ne trouve pas de solution.
Cordialement,
Eric
Posté le 15 janvier 2018 - 11:45
Désolé pour le retard dans ma réponse. Un peu surchargé avec la mise au norme des logiciels d'encaissement.

Voici le code de ouvre_port_param


PROCEDURE ouvre_port_param(Ppport,Pbaud,Pparite,Pbit,Pstop,PDTR,PRTS,Pxon,Pbufe,Pbufs,Ptap)
resultat est un booléen
sFerme(Ppport)
resultat=sOuvre ( Ppport , Pbufe , Pbufs , Ptap )
SI resultat ALORS
resultat=sFixeParamètre ( Ppport , Val(Pbaud) , Val(Pparite) , Val(Pbit) , Val(Pstop) , PDTR , PRTS , Pxon )
SI resultat=Faux ALORS
//info("erreur sur les paramètres!")
FIN
SINON
Ppport=0
FIN

RENVOYER Ppport
Posté le 18 avril 2018 - 11:53
Posté le 25 mai 2010 - 13:25
Bonjour,

Je suis également intéressé par votre documentation sur le protocole concert. Ça serait très sympa si vous pouvez me l'envoyer par mail.

Merci d'avance,

Salutations

data.object@yahoo.fr
Posté le 06 juin 2018 - 10:51
Bonjour,

J'arrive bien à envoyer le montant mais le tpe ne me donne pas de réponse sur le paiement ou non par le client.
Je reçois le ENQ puis j'envoie le ACK mais je n'ai aucun retour du tpe ict220. (j'ai testé les codes publiés sur le forum sans succès)
Est ce quelqu'un a eu le même genre de problème ?
Merci de votre aide.
Membre enregistré
1 message
Posté le 17 juillet 2018 - 14:24
Bonour à tous,

J'ai personnellement réussi à envoyer la transaction et à réceptionner la réponse mais ma question est la suivante :
Comment annuler la transaction en cours ?
Quel message envoyer ?

merci d'avance
Membre enregistré
3 messages
Posté le 23 octobre 2018 - 08:50
Cancel request : AN
Response : An


01
Posté le 28 novembre 2018 - 09:09
Bonjour,

Est ce que le fonctionnement est le même sur les TPE de la gamme Tetra comme le desk 5000 ?

Merci d'avance.
Posté le 23 mai 2019 - 23:29
Bonjour
Si tu as trouvé une doc sur le protocol concert, je suis preneur, car je n'ai pas encore trouvé
Merci d'avance
Michel
Posté le 24 mai 2019 - 09:26
Voici le seul document que nous avons pu trouvé. Il date de 2011

https://drive.google.com/open…

Nos développements sont basés sur ce document et dans le fil de la discussion il y a des codes utilisables et fonctionnels
Posté le 24 mai 2019 - 09:54
Bonjour,

Je suis également intéressé par votre documentation sur le protocole concert. Ça serait très sympa si vous pouvez me l'envoyer par mail.

Merci d'avance,

go24 at yopmail.com
Posté le 25 mai 2019 - 08:21
Dans ma réponse précédente il y a un lien de téléchargement
Posté le 29 octobre 2019 - 12:16
Bonjour,
Je rejoins Franck pour sa question concernant les nouveaux modèles utilisant Telium TETRA (et CONCERT 3.1 si on en croit ce lien: https://www.ingenico.fr/media/avis-experts/ingenico-insights-11.html)

J'ai réussi a mettre en place une solution pour les TPE iCT 250 mais certains problèmes persistent:
- Est-il possible de remplacer un montant déjà présent sur le TPE (ex: le client a tapé 5.00€ et le logiciel de caisse essaye d'envoyer 25.00€)

De plus quand on communique avec le MOVE 5000 un autre problème émerge:
- Le TPE semble se mettre en veille après X temps sans utilisation et si notre logiciel de caisse essaye d'envoyer un montant à ce moment là le TPE se bloque et un redémarrage de celui-ci est nécessaire (cela prend 3 à 5 minutes, pas top pour le client)

Quelqu'un aurait-il rencontré les mêmes problèmes ?
Merci d'avance
Posté le 16 novembre 2019 - 07:19
Bonjour,
Christopher RICHARD est-ce-que vous pouvez partager la code pour ceci " J'ai réussi a mettre en place une solution pour les TPE iCT 250 mais certains problèmes persistent " svp.

Merci d'avance
Membre enregistré
487 messages
Popularité : +24 (30 votes)
Posté le 30 novembre 2019 - 13:26
Salut, je vais devoir m'attaquer aussi aux TPE, mais ils sont tous en reseau.
comment communiquer avec tel ou tel?
sachant qu'il y en a au moins 7.

merci d'avance

--
José
Posté le 30 juillet 2020 - 07:44
Bonjour

Si il y'a des ames charitables qui ont développé le protocole concert 3.1, elles pourront surement répondre à mes questions. Nous avons la doc, cette doc parle du format des messages d'envoi et de reception avec les tag TLV. Le format n'est pas compliqué en lui même. Par contre la documentation ne parle plus du tout de la partie encapsulation avec STX...LRC ni du dialogue ACK, ENQ.... Qu'en est il ? C'est toujours le même principe ?

Nous n'avons pas encore développé de dialogue en réseau non plus ; je suppose que je vais utiliser les fonctions de dialogue socket que j'utilise deja sur mes imprimantes ticket en reseau. Mais comment fonctionne le dialogue ? On continue avec ACk, ENQ etc etc ou on a juste a faire un envoi et lire le contenu de la reception.
Posté le 20 juin 2023 - 07:19
Bonjour,

@werewolf7160 (ou quelqu'un d'autre), as-tu trouvé la solution pour annuler la transaction en cours ?

Sur la doc du protocole je ne trouve aucune commande pour faire cette annulation...
Exemple :
-> Envoi du montant 10€ sur le TPE
-> le client paye finalement en espèce
=> QUELLE COMMANDE ENVOYER POUR ANNULER L'ENVOI DES 10€

Merci
Posté le 20 juin 2023 - 11:15
bonjour
si l'envoi est effectif, pourquoi ne pas envoyer -10 € ?
titou44
Posté le 20 juin 2023 - 14:51
@Titou44 : Je me suis peut être mal exprimé..

Je souhaite annuler le montant que je viens d'envoyer et qui est toujours affiché sur mon TPE.
Le client n'a pas sa carte donc la transaction n'a pas été validée sur le TPE et ne le sera pas.
Pour éviter d'avoir à annuler le montant en pressant le bouton rouge du TPE, je souhaiterais connaitre la commande qui me permet de faire une "initialisation" du TPE et annulation du dialogue en cours.

C'est la même problématique également de @Christopher Richard, qui souhaite remplacer le montant affiché sur le TPE.

Espérant être plus clair....


Merci
Posté le 31 août 2023 - 14:51
Bonjour,
j'essaye moi aussi de programmer la liaison
très difficile de trouver une doc sur le protocole concert, je me permets donc de vous contacter, car il semble que vous l'ayez
Pouvez-vous me le transmettre svp.
D'avance merci pour votre aide.

Cordialement,