|
Home → WINDEV 2024 → URGENT! TPE INGENICO ENVOI DE MONTANT !!!!!!!!!!!!!!!!!!!!!! |
URGENT! TPE INGENICO ENVOI DE MONTANT !!!!!!!!!!!!!!!!!!!!!! |
Started by jer_mest, Aug., 20 2004 4:47 PM - 4 replies |
| |
| | | |
|
| |
Posted on August, 20 2004 - 4:47 PM |
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) |
| |
| |
| | | |
|
| | |
| |
Posted on August, 20 2004 - 5:23 PM |
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 ! |
| |
| |
| | | |
|
| | |
| |
Posted on August, 20 2004 - 6:01 PM |
| |
| |
| | | |
|
| | |
| |
Posted on August, 22 2004 - 12:15 PM |
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)
|
| |
| |
| | | |
|
| | |
| |
Posted on August, 23 2004 - 10:44 AM |
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 |
| |
| |
| | | |
|
| | | | |
| | |
|