-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathecr_message.go
107 lines (98 loc) · 3.15 KB
/
ecr_message.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package ingenico
import (
"fmt"
"math/rand"
)
const (
SALE = "01"
)
type ECRMessage struct {
TerminalID IntFormat
NextTransactionNo IntFormat
CashierID IntFormat
CurrencyISO IntFormat
TransactionAmount IntFormat
TransactionAmountCash IntFormat
TransactionType string
AuthorizationCode string
InputLabel string
InsurancePolicyNumber string
InstallmentsNumber string
LanguageID string
PrintData string
PayservicesData string
TransactionActivationCode string
InstantPaymentRef string
QRCodeData string
POSPrints bool
}
func NewSale(TransactionAmount IntFormat) ECRMessage {
NextTransactionNo := rand.Intn(9999)
fmt.Printf("NextTransactionNo: %d\n", NextTransactionNo)
return ECRMessage{
NextTransactionNo: IntFormat(NextTransactionNo),
CurrencyISO: 946,
POSPrints: true,
CashierID: 0,
LanguageID: "00",
TransactionType: SALE,
TransactionAmount: TransactionAmount,
}
}
func (msg ECRMessage) BuildMessage() []byte {
message := []byte("00")
message = append(message, msg.TerminalID.ToByte(2)...)
message = append(message, []byte("00")...)
message = append(message, msg.NextTransactionNo.ToByte(4)...)
message = append(message, []byte(msg.TransactionType)...)
if msg.POSPrints {
message = append(message, []byte("1")...)
} else {
message = append(message, []byte("0")...)
}
message = append(message, msg.CashierID.ToByte(2)...)
message = append(message, FS)
if msg.TransactionAmount != 0 {
message = append(message, msg.TransactionAmount.ToByte(1)...)
}
message = append(message, FS)
message = append(message, FS)
message = append(message, []byte("+0")...) // Amount Exponent
message = append(message, FS)
if msg.CurrencyISO > 0 {
message = append(message, msg.CurrencyISO.ToByte(3)...)
}
message = append(message, FS)
message = append(message, FS)
message = append(message, FS)
message = append(message, FS)
message = append(message, []byte(msg.AuthorizationCode)...)
message = append(message, FS)
message = append(message, FS)
message = append(message, FS)
message = append(message, []byte(msg.InputLabel)...)
message = append(message, FS)
message = append(message, []byte(msg.InsurancePolicyNumber)...)
message = append(message, FS)
message = append(message, []byte(msg.InstallmentsNumber)...)
message = append(message, FS)
message = append(message, FS)
message = append(message, []byte(msg.LanguageID)...)
message = append(message, FS)
message = append(message, []byte(msg.PrintData)...)
message = append(message, FS)
message = append(message, FS)
if msg.TransactionAmountCash != 0 {
message = append(message, msg.TransactionAmountCash.ToByte(1)...)
}
message = append(message, FS)
message = append(message, []byte(msg.PayservicesData)...)
message = append(message, FS)
message = append(message, []byte(msg.TransactionActivationCode)...)
message = append(message, FS)
message = append(message, []byte(msg.InstantPaymentRef)...)
message = append(message, FS)
message = append(message, []byte(msg.QRCodeData)...)
message = append(message, FS)
return message
}