Exemplo n.º 1
0
        private async void DoWork(object state)
        {
            if (sessionId != null)
            {
                var url = apiClient.BaseAddress + $"sessions/{sessionId}/transaction";

                apiClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                apiClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

                try
                {
                    var response = await apiClient.GetAsync(url);

                    if (response != null && response.IsSuccessStatusCode)
                    {
                        var apiResponse = await response.Content.ReadAsAsync <ApiResponse <EFTTransactionResponse> >();

                        if (apiResponse?.Response != null)
                        {
                            transaction = apiResponse.Response;
                        }
                    }
                }
                catch
                {
                }
            }
            else
            {
                await StopAsync((CancellationToken)state);
            }
        }
Exemplo n.º 2
0
        // async void PurchaseToken_Click() // NOT WORKING DELETE
        // {
        //     // Get an auth token
        //     await RefreshTokenAsync();
        //
        //     ShowNotification("TRANSACTION IN PROGRESS", "", "CHECK PIN PAD FOR STATUS", NotificationType.Normal, false);
        //
        //     // TxnType is required
        //     string txnType = GetTxnType().ToString();
        //     // Set ReferenceNumber to something unique
        //     string txnRef = DateTime.Now.ToString("YYMMddHHmmssfff");
        //     // Set AmountCash for cash out, and AmountPurchase for purchase/refund
        //     int amtPurchase = (txnType == "C") ? 0 : (int)(decimal.Parse(txtAmount.Text) * 100);
        //     int amtCash = (txnType == "C") ? (int)(decimal.Parse(txtAmount.Text) * 100) : 0;
        //
        //     var requestContent = new { Request = new { txnType, amtPurchase, amtCash, txnRef } };
        //     var currentSessionId = Guid.NewGuid().ToString();
        //
        //
        //     var request = new HttpRequestMessage(HttpMethod.Post, $"{basePosApiUri}/sessions/{currentSessionId}/transaction?async=false")
        //     {
        //         Content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestContent), System.Text.Encoding.UTF8, "application/json")
        //     };
        //     request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
        //     HttpResponseMessage httpResponse = await client.SendAsync(request);
        //     httpResponse.EnsureSuccessStatusCode();
        //
        //     var apiResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<ApiResponse<TransactionResponse>>(await httpResponse.Content.ReadAsStringAsync());
        //     var r = apiResponse.Response;
        //
        //     HideDialog();
        //
        //     ShowNotification(
        //         $"TRANSACTION {(r.Success ? "OK" : "FAILED")}",
        //         $"{r.ResponseCode} {r.ResponseText}",
        //         "",
        //         r.Success ? NotificationType.Success : NotificationType.Error,
        //         true
        //         );
        // }

        #region PC-EFTPOS EVENTS
        void OnTransaction(EFTTransactionResponse r)
        {
            HideDialog();

            ShowNotification(
                $"TRANSACTION {(r.Success ? "OK" : "FAILED")}",
                $"{r.ResponseCode} {r.ResponseText}",
                "",
                r.Success ? NotificationType.Success : NotificationType.Error,
                true
                );
        }
Exemplo n.º 3
0
        public Task StopAsync(CancellationToken cancellationToken)
        {
            if (transaction == null)
            {
                transaction = new EFTTransactionResponse()
                {
                    Success = false
                };
            }

            timer?.Change(Timeout.Infinite, 0);

            return(Task.CompletedTask);
        }
Exemplo n.º 4
0
        public async Task <ActionResult <EFTTransactionResponse> > PostTransactionAsync([FromBody] float amount)
        {
            var sessionId = Guid.NewGuid();

            var url = appSettings.Server + $"sessions/{sessionId}/transaction";

            var request = new ApiRequest <EFTTransactionRequest>()
            {
                Request = new EFTTransactionRequest()
                {
                    TxnType     = "P",
                    TxnRef      = RandomStr.RandomString(TRX_RND_STR_LENGTH),
                    AmtPurchase = Convert.ToInt32(amount * DOLLAR_TO_CENT),
                    Merchant    = appSettings.Merchant,
                    Application = appSettings.Application
                },
                Notification = new Notification
                {
                    Uri = appSettings.NotificationUri
                }
            };

            if (string.IsNullOrEmpty(token))
            {
                token = (await GetTokenAsync())?.Token;
            }

            apiClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            apiClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

            HttpContent content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");

            try
            {
                var response = await apiClient.PostAsync(url, content);

                if (response != null && response.IsSuccessStatusCode)
                {
                    var apiResponse = await response.Content.ReadAsAsync <ApiResponse <EFTTransactionResponse> >();

                    if (apiResponse != null && apiResponse.Response != null)
                    {
                        return(apiResponse.Response);
                    }
                }
            }
            catch
            {
                using (var s = new TimedHostedService(sessionId, apiClient, token))
                {
                    using (var cts = new CancellationTokenSource(TRX_EXPIRATION_MINS))
                    {
                        await s.StartAsync(cts.Token);

                        EFTTransactionResponse txn = null;

                        while (txn == null)
                        {
                            txn = s.GetTransaction();
                            await Task.Delay(WAIT_PERIOD_SEC);

                            if (cts.IsCancellationRequested)
                            {
                                await s.StopAsync(cts.Token);
                            }
                        }

                        await s.StopAsync(cts.Token);

                        if (txn == null || !txn.Success)
                        {
                            return(BadRequest());
                        }

                        return(txn);
                    }
                }
            }

            return(BadRequest());
        }
Exemplo n.º 5
0
        public async Task <ActionResult <EFTTransactionResponse> > PostTransactionAsync([FromBody] TransactionRequest transaction)
        {
            if (transaction == null || transaction.Amount <= 0 || string.IsNullOrEmpty(transaction.TxnType))
            {
                return(BadRequest());
            }

            var sessionId = Guid.NewGuid();

            var url = appSettings.Server + $"sessions/{sessionId}/transaction";

            var request = new ApiRequest <EFTTransactionRequest>();

            var application = "00";

            if (!string.IsNullOrEmpty(transaction.Merchant) && transaction.Merchant != "00")
            {
                application = "02";
            }
            request.Request = new EFTTransactionRequest()
            {
                TxnType          = string.IsNullOrEmpty(transaction.TxnType) ? "P" : transaction.TxnType,
                ReceiptAutoPrint = "0",
                TxnRef           = RandomStr.RandomString(TRX_RND_STR_LENGTH),
                AmtPurchase      = Convert.ToInt32(transaction.Amount * DOLLAR_TO_CENT),
                Merchant         = string.IsNullOrEmpty(transaction.Merchant) ? appSettings.Merchant : transaction.Merchant,
                Application      = application
            };

            request.Notification = new Notification
            {
                Uri = appSettings.NotificationUri
            };

            // if refund
            if (string.Equals(transaction.TxnType, "R"))
            {
                int.TryParse(transaction.Merchant, out int merchant);

                if (merchant > 0) // Means the refund is going through TPP extension
                {
                    if (!string.IsNullOrEmpty(transaction.RefundReference))
                    {
                        dynamic purchaseData = new Newtonsoft.Json.Linq.JObject();
                        purchaseData.REF = transaction.RefundReference;
                        request.Request.PurchaseAnalysisData = purchaseData;
                    }
                    else
                    {
                        return(BadRequest());
                    }
                }
            }

            if (string.IsNullOrEmpty(token))
            {
                token = (await GetTokenAsync())?.Token;
            }

            if (string.IsNullOrEmpty(token))
            {
                return(Unauthorized());
            }

            apiClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            apiClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

            HttpContent content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");

            try
            {
                var response = await apiClient.PostAsync(url, content);

                if (response.IsSuccessStatusCode)
                {
                    var apiResponse = await response.Content.ReadAsAsync <ApiResponse <EFTTransactionResponse> >();

                    if (apiResponse?.Response != null)
                    {
                        return(apiResponse.Response);
                    }
                }
            }
            catch
            {
                //Start timer for background service
                using (var s = new TimedHostedService(sessionId, apiClient, token))
                {
                    using (var cts = new CancellationTokenSource(TimeSpan.FromMinutes(3)))
                    {
                        await s.StartAsync(cts.Token);

                        EFTTransactionResponse txn = null;

                        while (txn == null)
                        {
                            txn = s.GetTransaction();
                            await Task.Delay(TimeSpan.FromSeconds(WAIT_PERIOD_SEC));

                            if (cts.IsCancellationRequested)
                            {
                                await s.StopAsync(cts.Token);
                            }
                        }

                        await s.StopAsync(cts.Token);

                        if (txn == null || !txn.Success)
                        {
                            return(BadRequest());
                        }

                        return(txn);
                    }
                }
            }

            return(BadRequest());
        }