-
Notifications
You must be signed in to change notification settings - Fork 0
/
GuardianApi.cs
151 lines (111 loc) · 6.14 KB
/
GuardianApi.cs
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
using System;
using Integral.Library.GuardianClient;
using static SagePayPEDTest.Utils;
namespace SagePayPEDTest
{
public class GuardianApi : IDisposable
{
TransactionInfo transactionInfo;
VoidTransactionHook voidTransactionHook;
TillInformation tillInformation;
NonGuiTransactionHook nonGuiTransactionHook;
TransactionHook.TRANSACTIONHOOK_TRANSACTIONTYPE transactiontype;
NonGuiTransactionHook.NONGUITRANSACTION_CONFIRMTYPE confirmationType;
/// <summary>
/// construtor
/// </summary>
public GuardianApi()
{
Console.WriteLine("SagePay Driver Transaction Started.....");
voidTransactionHook = new VoidTransactionHook();
transactionInfo = new TransactionInfo();
tillInformation = new TillInformation();
nonGuiTransactionHook = new NonGuiTransactionHook();
//default confirmation type
confirmationType = NonGuiTransactionHook.NONGUITRANSACTION_CONFIRMTYPE.CONFIRMTYPE_AUTHORISED;
}
public void Dispose()
{
}
/// <summary>
/// Payment
/// </summary>
public DiagnosticErrMsg Pay(int amount )
{
int intAmount;
DiagnosticErrMsg isSuccessful = DiagnosticErrMsg.OK;
//we only do sales
transactiontype = TransactionHook.TRANSACTIONHOOK_TRANSACTIONTYPE.INT_TT_SALE;
//check amount is valid
intAmount = Utils.GetNumericAmountValue(amount);
if (intAmount == 0)
{
throw new Exception("Error in Amount value");
}
Console.WriteLine($"Valid payment amount: {intAmount}");
//add the address of the store for the reciept
AddAddress();
//Use a non GUI transaction - if transaction is true proceed to the CardEnquiry stage.
if (nonGuiTransactionHook.StartTransaction(ref tillInformation) == true)
{
Console.WriteLine("Transaction Started....");
//check the card enquiry returns: RETURNCODE_SUCCESS or RETURNCODE_CASHBACKALLOWED
if (nonGuiTransactionHook.CardEnquiry(transactiontype,
intAmount,
NonGuiTransactionHook.NONGUITRANSACTION_DATAENTRY.DATAENTRY_CHIPORSWIPEORTAP) == NonGuiTransactionHook.NONGUITRANSACTION_RETURNCODE.RETURNCODE_SUCCESS)
{
//authorise the transaction
Console.WriteLine("Transaction Authorisation Started....");
if (nonGuiTransactionHook.AuthoriseTransaction(TransactionHook.TRANSACTIONHOOK_TRANSACTIONTYPE.INT_TT_SALE, intAmount, 0, "SALE", ref transactionInfo) == NonGuiTransactionHook.NONGUITRANSACTION_RETURNCODE.RETURNCODE_SUCCESS)
{
if (transactionInfo.DataEntryMethod == TransactionInfo.TRANSINFO_DATAENTRYMETHOD.TRANSINFO_DE_SWIPED)
{
Console.WriteLine("Swipe transaction - CANCEL the transaction.");
confirmationType = NonGuiTransactionHook.NONGUITRANSACTION_CONFIRMTYPE.CONFIRMTYPE_CANCELLED;
isSuccessful = DiagnosticErrMsg.NOTOK;
}
// confirm the transaction
if (nonGuiTransactionHook.ConfirmTransaction(confirmationType,
nonGuiTransactionHook.TransactionReference,
transactionInfo.AuthorisationCode,
ref transactionInfo) == true)
{
//display transactionInfo
Console.WriteLine("\nTransaction Information");
Console.WriteLine("-----------------------\n");
Console.WriteLine($" AuthCode: {transactionInfo.AuthorisationCode}");
Console.WriteLine($" CardHolder Name: {transactionInfo.CardHolderName}");
Console.WriteLine($" Currency Code: {transactionInfo.CurrencyCode}");
Console.WriteLine($" Data Entry Method: {transactionInfo.DataEntryMethod}");
Console.WriteLine($" Merchant Number: {transactionInfo.MerchantNo}");
Console.WriteLine($" Response Code: {transactionInfo.ResponseCode}");
Console.WriteLine($" Scheme Number.: {transactionInfo.SchemeName}");
Console.WriteLine($" Transaction Amount: {transactionInfo.TransactionAmount}");
Console.WriteLine($" Transaction Ref Number: {transactionInfo.TransactionRefNo.ToString()}");
Console.WriteLine($" TerminalId: {transactionInfo.TerminalId}");
//customer receipt
Console.WriteLine("\n\nCustomer Receipt");
Console.WriteLine("===================\n");
Console.WriteLine($" Customer Reciept: {transactionInfo.CustomerReceipt}");
}
}
}
}
//end the transaction
nonGuiTransactionHook.EndTransaction();
Console.WriteLine("SagePay Driver Transaction Finished.....");
return isSuccessful;
}
private void AddAddress()
{
// Populate the till information object
tillInformation.MerchantName = "Acrelec";
tillInformation.Address1 = "East Wing , Focus 31";
tillInformation.Address2 = "Mark Road";
tillInformation.Address3 = "Hemel Hempstead";
tillInformation.Address4 = "HP2 7BW";
tillInformation.PhoneNumber = "1234567890";
}
private void Populate
}
}