PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → URGENT! TPE INGENICO ENVOI DE MONTANT !!!!!!!!!!!!!!!!!!!!!!
URGENT! TPE INGENICO ENVOI DE MONTANT !!!!!!!!!!!!!!!!!!!!!!
Iniciado por jer_mest, 20,ago. 2004 16:47 - 4 respuestas
Publicado el 20,agosto 2004 - 16:47
Bonjour,

Malgré l'aide de certaines personnes, je n'arrive toujours pas à envoyer
le montant au TPE, toujours NACK en réponse apres l'envoi du message. Je
ne c pas d'ou peut venir le probleme, dois je envoyer le message en chaine,
en numerique je ne c pas ... AIDEZ MOI ENVOYE MOI UN BOUT DE CODE QUI FONCTIONNE
!!!!

Code //

Nombre est un entier
MessageLu est une chaîne
resultat est un entier
LRC est un entier
n est un entier sur 1 octet
i est un entier

//-------
//n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12 sont des entier sur 1 octet

//------- Initialisation du Tableau qui sera remplie du montant à valider
!
//Tabn est un tableau de 12 entiers sur 1 octet
//Tabn[1]=0
//Tabn[2]=1
//Tabn[3]=0
//Tabn[4]=0
//Tabn[5]=0
//Tabn[6]=0
//Tabn[7]=0
//Tabn[8]=5
//Tabn[9]=0
//Tabn[10]=0
//Tabn[11]=null
//Tabn[12]=3
////------------------------------------

// Calcul de la LRC (Octet de contrôle du message)
//lrc=SmartNet(Caract(48)+Caract(49)+Caract(48)+Caract(48)+Caract(48)+Caract(48)+Caract(48)+caract(53)+Caract(48)+Caract(48))
LRC=SmartNet("0100000500")
Info("LRC = "+LRC)

// Pause avant de commencer à dialoguer
Multitache(60)

// Ouverture du port spécifié
SI PAS sOuvre(1, 5000, 5000) ALORS Erreur("Erreur ouverture port Com")

// Initialise les paramètres du port série
SI PAS sFixeParamètre(...
1, ... // Port
1200, ... // Taux
1, ... // Parité : 0=aucune, 1=paire, 2=impaire
7, ... // Nb bit de données
0) ALORS//, ... // Nb bit de stop
// 0=1 bit de stop, 1=1,5 bits de stop, 2=2 bits de stop
Erreur("Erreur a la fixation des parametres !", ErreurInfo(errInfo))
FIN

// Envoi d'un message au buffer de sortie de COM1
// Envoie ENQ = 05
sEcrit(1,Caract(NumériqueVersChaine(5, "X")))
// Pause
Multitache(6)

// Lit Réponse ACK ou NAK
MessageLu=sLit(1, 1)
SI Asc(MessageLu)<>6 ALORS
Erreur("Erreur Réception ACK apres ENQ : ","Réponse du TPE : "+Asc(MessageLu))
sFerme(1)
RETOUR
FIN

// Pause
Multitache(6)

// Envoi d'un message au buffer de sortie de COM1
// Envoie STX = 02
sEcrit(1,Caract(NumériqueVersChaine(2, "X")))

// Pause
Multitache(6)

// Envoie Message Type Caisse Normal (ECR#+MNT+IND)
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[1], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[2], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[3], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[4], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[5], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[6], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[7], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[8], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[9], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[10], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[11], "X"))) // Si =
1 le TPE renvoi N° Carte Bancaire

// ECR#
//resultat=secrit(1,Caract(48)+Caract(49))
//Multitache(6) // Pause

// Message
resultat=sEcrit(1,Caract(48)+Caract(49)+Caract(48)+Caract(48)+Caract(48)+Caract(48)+Caract(48)+Caract(53)+Caract(48)+Caract(48))
Multitache(6) // Pause
Info("Message écrit #ECR+MNT : "+resultat)

// Envoi ETX (End of Text) = 03
resultat=sEcrit(1,Caract(NumériqueVersChaine(3, "X")))
Multitache(6) // Pause

// Envoi LRC (OuExclusif tt les Octects du message)
resultat=sEcrit(1,LRC)
Multitache(6) // Pause


// Lit Réponse ACK ou NACK
MessageLu=sLit(1,1)
TANTQUE Asc(MessageLu)=0
MessageLu=sLit(1,1)
FIN

SI Asc(MessageLu)<>6 ALORS
Erreur("Erreur Réception ACK apres LRC : ","Réponse du TPE : "+Asc(MessageLu))
sFerme(1)
RETOUR
FIN


// Fermeture du port spécifié
sFerme(1)
Publicado el 20,agosto 2004 - 17:23
Ca ve on a lu le message vous l'avez posté 3 ou 4 fois.
Si vous n'avez pas de réponses c'est que personne n'a de solution pour
le moment !
Publicado el 20,agosto 2004 - 18:01
J'avais compris merci !
Publicado el 22,agosto 2004 - 12:15
Bonjour
Voici un bout de code écrit en 1999 avant le passage à l'euro en windev 5.5

Il fonctionne toujours aujourd'hui sur TPE Ingenico et d'autres marques

Avant d'envoyer les montants
Demander si le TPE est prêt
les valeurs envoyées sont sous forme caractères et non numeriqueverschaine
sEcrit(Com,caract(05))
-----
Fonction DemandeAutorisation()

bResultat est un booleen = VRai
nCompteur est un entier =0
nOctet est un entier
pRc est un entier

Buffer est une chaine

//Message("Demande d'autorisation de transfert")
gNbErreur=0
gNbTimeOut=0
gnNumBloc=0
bTimeOut=faux

boucle
// Incrémente le nombre d'essai
nCompteur++

// Envoie demande de début de transfert
bTimeOut=Faux

sEcrit(Com,caract(05))
timer("TIMEOUT",90,2)

reack=ret_ack()

Fintimer(2)
si reack="ACK" alors
bResultat=vrai
renvoyer bResultat
fin
sEcrit(Com,"EOT")
gNbTimeOut++
si nCompteur=3 alors
bResultat=Faux
sortir
fin
fin
renvoyer bResultat

//////////////////////////

fonction ret_ack()
bResultat est un booleen
nOctet est un entier
pRc est un entier
bResultat=Faux
tantque bTimeOut=faux
// Lecture sur le port com
nOctet=SDansFileEntree(COM)
si nOctet<>0 alors
Buffer=Buffer+Slit(COM,nOctet)
fin
pRc=position(Buffer,caract(15))
si pRc<>0 alors
Fintimer(2)
bTimeOut=faux
bResultat=Faux
renvoyer "NAK"
sinon
pRc=position(Buffer,caract(6))
si pRc<>0 alors
Fintimer(2)
bTimeOut=faux
bResultat=vrai
renvoyer "ACK"
fin
FIN
MULTITACHE(-1)
fin
renvoyer "NAK"
///////////////////////////////////
Procédure TIMEOUT
bTimeOut=vrai

/////////

Pour le lrc

BufferEntree,i11 est un entier
BufferSortie,TailledesDonnee est un entier
BufferEntreeP
BufferSortieP
NumPort est un entier
src est un entier
tex1 est une chaine
MONTRECU=0

si select1=1 dev="250"
si select1=2 dev="978"
lrc=0
gTexteAEnvoyer="00"
gTexteAEnvoyer=gTexteAEnvoyer+mnt+"000"
gTexteAEnvoyer=gTexteAEnvoyer+dev+repete(" ",10)
lrc=0
lrc=OUEXBinaire(0,Asc("0"))
lrc=OUEXBinaire(lrc,Asc("0"))
pour i11=1 à 8
lrc=OUEXBinaire(lrc,Asc(mnt[[i11]]))
fin
lrc=OUEXBinaire(lrc,Asc("0"))
lrc=OUEXBinaire(lrc,Asc("0"))
lrc=OUEXBinaire(lrc,Asc("0"))
pour i11=1 à 3
lrc=OUEXBinaire(lrc,Asc(dev[[i11]]))
fin
pour i11=1 à 10
lrc=OUEXBinaire(lrc,Asc(" "))
fin
lrc=OUEXBinaire(lrc,3)

/////
Bon courage

Mireille Epoudry

---------------
"Jérémie" <jer_mest@hotmail.com> wrote:


Bonjour,

Malgré l'aide de certaines personnes, je n'arrive toujours pas à envoyer
le montant au TPE, toujours NACK en réponse apres l'envoi du message. Je
ne c pas d'ou peut venir le probleme, dois je envoyer le message en chaine,
en numerique je ne c pas ... AIDEZ MOI ENVOYE MOI UN BOUT DE CODE QUI FONCTIONNE
!!!!

Code //

Nombre est un entier
MessageLu est une chaîne
resultat est un entier
LRC est un entier
n est un entier sur 1 octet
i est un entier

//-------
//n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12 sont des entier sur 1 octet

//------- Initialisation du Tableau qui sera remplie du montant à valider
!
//Tabn est un tableau de 12 entiers sur 1 octet
//Tabn[1]=0
//Tabn[2]=1
//Tabn[3]=0
//Tabn[4]=0
//Tabn[5]=0
//Tabn[6]=0
//Tabn[7]=0
//Tabn[8]=5
//Tabn[9]=0
//Tabn[10]=0
//Tabn[11]=null
//Tabn[12]=3
////------------------------------------

// Calcul de la LRC (Octet de contrôle du message)
//lrc=SmartNet(Caract(48)+Caract(49)+Caract(48)+Caract(48)+Caract(48)+Caract(48)+Caract(48)+caract(53)+Caract(48)+Caract(48))
LRC=SmartNet("0100000500")
Info("LRC = "+LRC)

// Pause avant de commencer à dialoguer
Multitache(60)

// Ouverture du port spécifié
SI PAS sOuvre(1, 5000, 5000) ALORS Erreur("Erreur ouverture port Com")

// Initialise les paramètres du port série
SI PAS sFixeParamètre(...
1, ... // Port
1200, ... // Taux
1, ... // Parité : 0=aucune, 1=paire, 2=impaire
7, ... // Nb bit de données
0) ALORS//, ... // Nb bit de stop
// 0=1 bit de stop, 1=1,5 bits de stop, 2=2 bits de stop
Erreur("Erreur a la fixation des parametres !", ErreurInfo(errInfo))
FIN

// Envoi d'un message au buffer de sortie de COM1
// Envoie ENQ = 05
sEcrit(1,Caract(NumériqueVersChaine(5, "X")))
// Pause
Multitache(6)

// Lit Réponse ACK ou NAK
MessageLu=sLit(1, 1)
SI Asc(MessageLu)<>6 ALORS
Erreur("Erreur Réception ACK apres ENQ : ","Réponse du TPE : "+Asc(MessageLu))
sFerme(1)
RETOUR
FIN

// Pause
Multitache(6)

// Envoi d'un message au buffer de sortie de COM1
// Envoie STX = 02
sEcrit(1,Caract(NumériqueVersChaine(2, "X")))

// Pause
Multitache(6)

// Envoie Message Type Caisse Normal (ECR#+MNT+IND)
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[1], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[2], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[3], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[4], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[5], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[6], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[7], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[8], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[9], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[10], "X")))
//resultat = sEcrit(1,Caract(NumériqueVersChaine(Tabn[11], "X"))) // Si

=
1 le TPE renvoi N° Carte Bancaire

// ECR#
//resultat=secrit(1,Caract(48)+Caract(49))
//Multitache(6) // Pause

// Message
resultat=sEcrit(1,Caract(48)+Caract(49)+Caract(48)+Caract(48)+Caract(48)+Caract(48)+Caract(48)+Caract(53)+Caract(48)+Caract(48))
Multitache(6) // Pause
Info("Message écrit #ECR+MNT : "+resultat)

// Envoi ETX (End of Text) = 03
resultat=sEcrit(1,Caract(NumériqueVersChaine(3, "X")))
Multitache(6) // Pause

// Envoi LRC (OuExclusif tt les Octects du message)
resultat=sEcrit(1,LRC)
Multitache(6) // Pause


// Lit Réponse ACK ou NACK
MessageLu=sLit(1,1)
TANTQUE Asc(MessageLu)=0
MessageLu=sLit(1,1)
FIN

SI Asc(MessageLu)<>6 ALORS
Erreur("Erreur Réception ACK apres LRC : ","Réponse du TPE : "+Asc(MessageLu))
sFerme(1)
RETOUR
FIN


// Fermeture du port spécifié
sFerme(1)

Publicado el 23,agosto 2004 - 10:44
bonjour,

voici le bout de code qui envoie le montant vers le TPE
(nous utilisons une classe)
Le montant a préalablement été formaté pour être une chaine sur 8 caractères
sans virgule avec des zéro devant.
(ex 00012532 pour 125,32 euros)

SI sLit(:Port,sDansFileEntrée(:Port))=Caract(6) ALORS
strEcr="01" //N° de caisse.
strMnt=strMontantAEnvoyer //Montant en plus petite unité de fractionnement.
strInd="1"
strMode="0" //Mode de paiement.
strType="0" //Type de transaction.
strDev="978" //Code monnaie en Euro.
strPriv=" " //Pas utilisé.

strMessage=strEcr+strMnt+strInd+strMode+strType+strDev+strPriv


//Création du LRC***********************************
POUR intI=1 A Taille(strMessage)
intOctet=Val(Milieu(strMessage,intI,1))
intLRC=OuExclusifBinaire(intLRC,intOctet)
FIN
//Ou exclusif avec le ETX (03 en octal)
intLRC=OuExclusifBinaire(intLRC,3)
//**************************************************


//Envoi du STX + Message + ETX + LRC au Tpe*******
:ECRIRE(Caract(2)+strMessage+Caract(3)+Caract(intLRC)) (// :ECRIRE = méthode
qui envoie sur le port)

.... suite du traitement