PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → DIALOGUER PAR SOCKET AVEC UN TPE VERIFONE VX 520C
DIALOGUER PAR SOCKET AVEC UN TPE VERIFONE VX 520C
Iniciado por CHRISTIAN DURIX, 09,nov. 2015 12:29 - 18 respuestas
Miembro registrado
25 mensajes
Publicado el 09,noviembre 2015 - 12:29
Bonjour à tous,

Je dialogue avec ce TPE en série (avec ce tpe ou les tpe Sagem Monetel)
J'ai besoin de dialoguer par Socket, sachant que le tpe est bien configurer avec le logiciel CAISSE sur PORT ETHERNET
Verifone m'a envoyé un petit programme qui test la liaison par SOCKET et ca fonctionne bien.
Ils m'ont expliqué que c'est la même chose que lorsqu'on travaille en série, sauf qu'on travaille par Socket
MAIS CA NE MARCHE PAS.
La connexion fonctionne, l'écriture aussi (a priori) mais pas de lecture (partie //attente réponse du code ci dessous) ????
Quelqu'un a t'il une idée car je tourne en rond

Merci pour votre aide,
Christian

Voici le code :

ligne est une chaîne
lemontant est une chaîne
ChaineLRC est un entier
j est un entier
TailleAsc est un entier
NBEssai est un entier=0
sEnvoiParam est une chaîne
ucCaratere est un entier
LigneCom1 est un booléen
compteur 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)
A_NAK est une chaîne=Caract(15)

// protocole E
ligne="01" // numero de caisse
lemontant=NumériqueVersChaîne(Montant,"10,2f")
lemontant=Remplace(lemontant,",","")
lemontant=Remplace(lemontant," ","")
lemontant=Droite("00000000"+lemontant,8)
ligne=ligne+lemontant
//ligne=ligne+"00001000" // montant
ligne=ligne+"1" // champ reponse 2 = pas de retour 1 - une reponse
ligne=ligne+"0" // cheque (1 pour CB) (C cheque) (autre = terminal demande)
ligne=ligne+"0" // traitement du debit
ligne=ligne+"978" // devise = EURO
//ligne=ligne+"0000000000" // priv ?????
ligne=ligne+Complète(" ",10) // privé

TailleAsc=Taille(ligne)
SI SocketConnecte("TPE",portip,adresseip) = Faux ALORS
Erreur("Erreur de connexion " + ErreurInfo(errMessage))
RETOUR
FIN
// MODIFICATION MODE COMMUNICATION
SI SocketChangeModeTransmission("TPE", SocketSansMarqueurFin) = Faux ALORS
Info("Impossible de modifier le mode de transmission")
FIN

// LA CHAINE A ENVOYER AU TERMINAL SAGEM MONETEL EFTSMART est de la forme
// 1 caractere STX puis le chaine LIGNE puis un caractere ETX puis un carctere LRC
//
//Calcul du LRC
// LRC = octet de controle, c'est un ou exclusif sur 7 bits de tous les octetes du message (sans prendre le stx mais en prenant le etx

ChaineLRC=0
POUR j =1 A TailleAsc
ucCaratere = Asc(Milieu(ligne,j,1))
ChaineLRC=OUExclusifBinaire(ChaineLRC,ucCaratere)
FIN
ChaineLRC=OUExclusifBinaire(ChaineLRC,3)

//Réveil TPE
sEnvoiParam=A_ENQ
SI PAS SocketEcrit("TPE",sEnvoiParam) ALORS
Erreur(ErreurInfo(errComplet))
SocketFerme("TPE")
RETOUR
FIN

//Attente Réponse TPE
compteur=0
RetChaine est une chaîne=""
RetChaine=SocketLit("TPE",Faux,delaireponseip)
IF RetChaine="" OU RetChaine<>A_ACK ALORS
Info("Le terminal n'est pas disponible")
SocketFerme("TPE")
RETOUR
FIN

SI RetChaine=A_ACK ALORS
//Construction DE LA CHAINE A ENVOYER
sEnvoiParam=A_STX
sEnvoiParam+=ligne
sEnvoiParam+=A_ETX
sEnvoiParam+=Caract(ChaineLRC)

//Envoi DE LA LIGNE
SI PAS SocketEcrit("TPE",sEnvoiParam) ALORS
Erreur(ErreurInfo(errComplet))
SocketFerme("TPE")
RETOUR
FIN
//Attente Réponse TPE
RetChaine=SocketLit("TPE",Faux,delaireponseip)
IF RetChaine="" OU RetChaine<>A_ACK ALORS
Info("Le terminal n'est pas disponible")
SocketFerme("TPE")
RETOUR
FIN

//Réponse OK
SI RetChaine=A_ACK ALORS
//Fin de Transmission
sEnvoiParam=A_EOT
SocketEcrit("TPE",sEnvoiParam)
SINON
//Fin de Transmission
sEnvoiParam=A_EOT
SocketEcrit("TPE",sEnvoiParam)
Erreur("Impossible d'ecrire sur le terminal bancaire.")
FIN
SINON
Erreur("Impossible d'ecrire sur le terminal bancaire.")
FIN

//Fermeture du port
SocketFerme("TPE")
Miembro registrado
25 mensajes
Publicado el 16,noviembre 2015 - 11:42
Bonjour à tous,

J'ai trouvé la solution que je transmets à ceux qui en ont besoin :

Contrairement aux informations transmises par le service informatique de Verifone, on n'applique pas le protocole CONCERT dans son intégralité. Il n'y a aucun caractère de contrôle à envoyer au TPE. le programme se résume à se connecter sur le TPE, à modifier le dialogue, à envoyer le montant sous la forme prescrite dans le protocole concert (n° de caisse,....) et de fermer le socket

Pour voir le dialogue SOCKET avec le TPE, j'ai utilisé le petit programme CAISSE fourni par Verifone et j'ai utilisé le programme WD TRACE SOCKET dans les exemples de PCSOFT qui m'a permis de voir les échanges....très simple.

Voici le code (que j'ai simplifié pour ici) :

ligne est une chaîne
lemontant est une chaîne

// protocole E
ligne="01" // numero de caisse
lemontant=NumériqueVersChaîne(Montant,"10,2f")
lemontant=Remplace(lemontant,",","")
lemontant=Remplace(lemontant," ","")
lemontant=Droite("00000000"+lemontant,8)
ligne=ligne+lemontant
ligne=ligne+"0" // champ reponse 0 = pas de retour 1 - une reponse
ligne=ligne+"0" // cheque (1 pour CB) (C cheque) (autre = terminal demande)
ligne=ligne+"0" // traitement du debit
ligne=ligne+"978" // devise = EURO
ligne=ligne+Complète(" ",10) // privé

// CONNECTION AU TPE
SI SocketConnecte("TPE", portip, adresseip) = Faux ALORS
Erreur("Erreur de connexion " + ErreurInfo(errMessage))
RETOUR
FIN
// MODIFICATION MODE COMMUNICATION
SI SocketChangeModeTransmission("TPE", SocketSansMarqueurFin) = Faux ALORS
Info("Impossible de modifier le mode de transmission")
FIN

//Envoi DE LA LIGNE
SI PAS SocketEcrit("TPE",ligne) ALORS
Erreur(ErreurInfo(errComplet))
SocketFerme("TPE")
RETOUR
FIN

//Fermeture du port
SocketFerme("TPE")
Publicado el 07,marzo 2018 - 09:07
Bonjour Christian,

Vu la date des messages j'ai peu d'espoir d'obtenir une réponse mais je tente le coup tout de même.

Je suis dans le même cas que vous, à savoir dialoguer avec un TPE vx520 par socket afin d'afficher le montant de la transaction directement sur le TPE depuis la caisse.

Ma problématique est la suivante, je n'arrive pas à ouvrir le socket sur le tpe...

J'obtiens une erreur 53 en retour, je suppose que le problème vient de l'IP ou du port.

J'utilise l'IP du TPE sur mon réseau local et un port que j'ai ouvert sur le routeur. Est ce la bonne démarche ?

Merci
Miembro registrado
25 mensajes
Publicado el 07,marzo 2018 - 11:51
Bonjour Etienne

Effectivement, ca fait un bout de temps que j'ai pas touché à cela.
Avez vous configurer correctement le numéro de port sur le TPE. la manip est un peu special car il faut désactiver le logiciel "Caisse" du TPE, configurer l'adresse IP et le numéro de port du TPE puis relancer le programme CAISSE.
J'ai une documentation concernant la config du TPE. Si ca vous intéresse, je peux vous l'envoyer par Mail ?
Je peux également vous envoyer notre petite fenêtre WinDev qui gère cela (c'est en WinDev 22).

Cordialement,
Christian
Publicado el 07,marzo 2018 - 14:04
Bonjour Christian,

Merci beaucoup pour votre retour, oui je veux bien la petite doc mais si je laisse mon mail sur le forum y'a un gros risque que je me retrouve spamer par tout et n'importe quoi lol :)
Publicado el 20,julio 2018 - 11:48
Bonjour,

Ingenico et Verifone implémente le protocole Caisse Concert de la même manière.
J'ai une documentation officielle de chez Ingenico qui explique comment implémenter le protocole.

Vous pouvez m'envoyer un mail et je vous envérrai en pièce jointe le PDF.
Bonne continuation.
Publicado el 12,octubre 2018 - 17:48
bonjou, je serais tres interessé par la doc du protocole également ...
si vous pouviez me l'envoyer, ca serait super
en vous remerciant
bon we !
Publicado el 07,diciembre 2018 - 01:27
Bonjour,

Effectivement, c'est vraiment impossible de communiquer avec un VERIFONE VX520, même avec le protocole CONCERT.

Je parvient bien à afficher le montant sur un INGENICO ICT250 en connexion USB (Emulation série).

Le VERIFONE ne bronche pas !!!
Aucune documentation trouvée à ce jour…

Y aurait il une âme charitable possédant un vrai bout de code qui fonctionne ou une documentation sur ce fameux VERIFONE ?
Publicado el 28,marzo 2019 - 12:26
Bonjour,

Je suis tombé sur ce sujet car je cherche à utiliser le Concert 3.0.
Et du coup je viens répondre aux problèmes sur le Verifone 520.
Honnêtement, je ne sais pas quelle version ils utilisent, mais voila comment je le fais fonctionner :
1. Il y a une chose très importante par laquelle vous devez commencer : il faut changer un paramètre sur le TPE.
Pour le Verifone 520 : 3. Système > 1.Réglages > 4. Caisse > 8. Mode réponse > OUI

2.Ensuite vérifier l'ip et le port :
- IP : 3. Système > 1.Réglages > 2.Communication > 1.Acces principal > 2.Ethernet > 4. Imprimer Config
- PORT : 3. Système > 1.Réglages > 2.Communication > 4. Caisse > 2.Afficher Config

3. Enfin le code :
- Ouverture de socket
- Envoyer la commande de montant :
En java, c'est un simple string construit de la manière suivante (et qui est convertit ensuite en tableau de byte) :
<n°caisse> + <montant> + "10" + <mode> + <devise> + "0000000000"
Avec :
- n°caisse : un nombre entre 01 et 99 ( 2 digits)
- montant : le montant en centimes sur 8 digits. Exemple : 25,99€ : "00002599"
- mode : "0" pour un débit, "1" pour un crédit
- devise : "978" pour Euros, la liste est facilement trouvable sur le net (3 digits)

- Lire le résultat :
En java, je reçois un tableau de byte. J'ai réussi à définir qu'il faut lire le 3ème byte et le traiter de la manière suivante :
- Si b == 48, la transaction est un succès
- Si b == 55, la transaction est un échec

J'espère que j'ai rien oublié.
Bon courage parce que franchement il y en a aucun qui fonctionne pareil entre les Ingenico, Verifone, Nepting ... 1 protocole et chacun le fait a sa sauce..
Publicado el 24,abril 2019 - 16:44
Bonjour,

Dans la lignée des échanges précédents, je souhaiterais obtenir le pdf d'Ingenico... pourriez-vous svp me l'envoyer?

Je vous dis un grand merci par avance.

Alexandre
Miembro registrado
1 mensaje
Publicado el 29,abril 2019 - 16:41
Bruno S. a écrit :
Bonjour,

Effectivement, c'est vraiment impossible de communiquer avec un VERIFONE VX520, même avec le protocole CONCERT.

Je parvient bien à afficher le montant sur un INGENICO ICT250 en connexion USB (Emulation série).

Le VERIFONE ne bronche pas !!!
Aucune documentation trouvée à ce jour…

Y aurait il une âme charitable possédant un vrai bout de code qui fonctionne ou une documentation sur ce fameux VERIFONE ?


Bonjour

Pouvez-vous me transmettre la documentation d'ingenico svp car je n'arrive pas à faire communiqué mon logiciel et le TPE ICT250 en USB.

Pouvez-vous sinon me dire où est le problème?
je n'ai aucun message d'erreur mais rien n’apparaît sur le TPE
sEnvoi est une chaîne
nTPE_Port est un entier = numportcomtpe
// constitution de la chaine
// N° de caisse 2 car > id poste
NumCaisseOpen est un numérique = 1
sEnvoi = NumériqueVersChaîne(Val(NumCaisseOpen),"02d")
// Montant 8 car sans les virgules complété à 0
sEnvoi += NumériqueVersChaîne(Arrondi(montanttpe,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 montanttpe < 0 ALORS
sEnvoi += "1"
SINON
sEnvoi += "0"
FIN
// dev 3 car > 978 pour euro
sEnvoi += "978"
// priv 10 car à 0
sEnvoi += Complete("",10,"0")

strMessage est une chaîne = sEnvoi
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
repfichier est une chaîne = MonDisk+"Test\"
sMessageAttente est une chaîne = "Initialisation TPE"
Texte = sMessageAttente
Texte..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))
Texte = ""
bValRetour=Faux
GOTO FinTraitement
FIN
SI PAS sFixeParamètre(nPORT_cb,9600,1,8,0) ALORS
Erreur("Impossible fixer paramètres du port COM"+nPORT_cb)
Ferme
FIN
SI nPORT_cb > 0 ALORS
// saisiecaisse_TPE_valider..visible = vrai

//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)
//
Texte = "Attente paiement client"
Texte..CouleurFond = RVB(252, 224, 91)

//
// 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

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

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)
Texte = "Paiement client effectué !"
Texte..CouleurFond = VertFoncé
bValRetour=Vrai
SINON
//Fin de Transmission
sEnvoiParam=A_EOT
sEcrit(nPORT_cb,sEnvoiParam)
Texte = "Echec paiement client !"
Texte..CouleurFond = RougeClair
bValRetour=Faux
FIN
SINON
bValRetour=Faux
Texte = "Echec paiement client !"
Texte..CouleurFond = RougeClair
FIN
SINON
Texte = ""
Texte..CouleurFond = Transparent
Erreur("Erreur d'ouverture de COM" + nPORT_cb)
bValRetour=Faux
FIN

FinTraitement:

//Fermeture du port
sFerme(nPORT_cb)
Publicado el 24,mayo 2019 - 05:41
Bonjour Christian
Effectivement, le post date un petit peu, mais je suis confronté au problème aujourd'hui.
Avez vous la doc du verifone ? et si vous avez la fenêtre, ce serait un gros gain de temps.
mon email: bacchus@mail.pf
Merci d'avance
Michel
Publicado el 03,agosto 2020 - 19:48
Bonjour Olivier,

Je serai très intéressé par le fichier pdf sur l'implémentation du protocole Caisse Concert par Ingenico. J'ai besoin de développer sous Windev un accès aux TPE de la marque.

Je vous remercie d'avance.

Rida HAKIM
Publicado el 04,agosto 2020 - 12:09
Bonjour,

j'avais lancé le sujet il y a maintenant plusieurs années mais il semble impossible aujourd'hui de se procurer le protocole CONCERT qui est passé en version 3, sauf de payer 950 € pour la licence d'utilisation + 475€ pour obtenir les modifications éventuelles du protocole.

La normalisation du protocole CONCERT est maintenant géré par une association qui s'appelle ASSOCIATION DU PAIEMENT. Tous les TPE qui utilisent ce protocole doivent se déclarer à cette association. Tous ceux qui veulent utiliser ce protocole dans leur logiciel doivent acheter la licence d'utilisation et se référencer auprès de cette association.

Nous avons personnellement refusé ce "vole". Imaginez que quand vous achetez une imprimante, on vous demande 950 € pour installer le driver de cette imprimante sur votre Pc.

Nous avons signalé à nos clients que nous ne pouvons plus pour l'instant envoyer le montant à régler sur le TPE.
Nous avons demandé a nos clients de manifester leur mécontentement auprès des banques.

Christian Durix
Publicado el 19,agosto 2020 - 11:28
Bonjour Christian,
je suis confronté au problème que vous connaissez depuis longtemps (la communication avec un TPE). Je dois communiquer sur le port Ethernet, y a t-il une adresse IP en particulier à utiliser ? Le terminal a déjà une adresse en 91.237.xx.xx, est-ce cette adresse que je dois changer ? Il indique en passerelle un protocole RFC 1086 + SSL, faut-il se connecter avec SocketConnecteSSL ?
Merci de votre retour.
JP
Publicado el 19,agosto 2020 - 13:56
Votre TPE comporte un menu permettant de vérifier/configurer la connexion Ethernet.
Vous pouvez donc trouver l'adresse IP du TPE.
Par contre, il vous faut également le numéro de port. Pour trouver le n° de port du dernier TPE que nous avons utilisé, nous avons installé sur un PC le petit programme gratuit Advanced_Port_Scanner_2.5.3869.exe qui est vraiment génial. Il faut connecter le TPE sur le réseau et lancer ce programme sur un PC également connecté au réseau. Ce programme va détecter toutes les machines connectées sur le réseau et vous donner le n° de port de chaque machine. (pour nous c'était le port 8000)

Donc une fois que vous avez l'adresse Ip et le n° de port, vous pouvez utiliser les SOCKET de WinDev.
Mais il faut également envoyer les infos au format CONCERT 3.
Et la je ne peux plus vous aider puisque pour obtenir ce protocole, il faut payer 950 € (voir mon post précèdent)

Cordialement,
Christian
Publicado el 28,agosto 2020 - 09:53
Bonjour Olivier,

Je serai très intéressé par le fichier pdf sur l'implémentation du protocole Caisse Concert par Ingenico. J'ai besoin de développer un accès aux TPE de la marque (DESK5000) .

Je vous remercie d'avance.

TERRIEN Arnaud
Publicado el 01,octubre 2021 - 22:09
Bonjour,
pouvez vous m'envoyer l'implantation de protocole concert

merci d'avance

Cordialement
Miembro registrado
1 mensaje
Publicado el 27,octubre 2021 - 14:39
Bonjour, Pourriez-vous également m'envoyer ce pdf d'Ingenico s'il vous plait? merci!