public async Task <IActionResult> addShippingAddress(int userId, [FromBody] AddShippingDto newShipping)
        {
            var shippingToAdd = new Card();

            shippingToAdd.MainCardId = userId;
            shippingToAdd.Name       = newShipping.name;
            shippingToAdd.Company    = newShipping.company;
            shippingToAdd.Address1   = newShipping.address1;
            shippingToAdd.Address2   = newShipping.address2;
            shippingToAdd.Address3   = newShipping.address3;
            shippingToAdd.City       = newShipping.city;
            shippingToAdd.Country    = newShipping.country;
            shippingToAdd.Phone      = newShipping.phone;
            shippingToAdd.Contact    = newShipping.contact;
            shippingToAdd.Zip        = newShipping.zip;
            shippingToAdd.Note       = newShipping.note;
            shippingToAdd.Email      = DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString();
            try
            {
                await _context.AddAsync(shippingToAdd);

                await _context.SaveChangesAsync();
            }
            catch (Exception e)
            {
                throw e;
            }
            return(Ok());
        }
Example #2
0
        public async Task <IActionResult> updateDetail(int?userId, [FromBody] JsonPatchDocument <UserDto> patchDocUser)
        {
            if (userId == null)
            {
                return(NotFound());
            }
            if (patchDocUser == null)
            {
                return(BadRequest());
            }
            var SenderToUpdate = _context.Cards.Where(c => c.Id == userId).FirstOrDefault();

            if (SenderToUpdate == null)
            {
                return(NotFound());
            }

            var senderToPatch = new UserDto()
            {
                name     = SenderToUpdate.Name,
                address1 = SenderToUpdate.Address1,
                address2 = SenderToUpdate.Address2,
                address3 = SenderToUpdate.Address3,
                city     = SenderToUpdate.City,
                country  = SenderToUpdate.Country,
                phone    = SenderToUpdate.Phone
            };

            patchDocUser.ApplyTo(senderToPatch, ModelState);
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            SenderToUpdate.Name     = senderToPatch.name;
            SenderToUpdate.Address1 = senderToPatch.address1;
            SenderToUpdate.Address2 = senderToPatch.address2;
            SenderToUpdate.Address3 = senderToPatch.address3;
            SenderToUpdate.City     = senderToPatch.city;
            SenderToUpdate.Country  = senderToPatch.country;
            SenderToUpdate.Phone    = senderToPatch.phone;

            try
            {
                await _context.SaveChangesAsync();

                return(NoContent());
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Example #3
0
        public async Task <IActionResult> updateOrderShipping(int?orderId)
        {
            var orderToUpdate = _context.Orders.Where(o => o.Id == orderId).FirstOrDefault();

            if (orderToUpdate == null)
            {
                return(NotFound());
            }
            var shippingStatus = orderToUpdate.Status;

            if (shippingStatus == 5)
            {
                orderToUpdate.Status = 6;                    //from shipping to received
            }
            else if (shippingStatus == 6)
            {
                orderToUpdate.Status = 5;                    //from received to shipping
            }
            try
            {
                _context.Update(orderToUpdate);
                await _context.SaveChangesAsync();
            }
            catch (Exception e)
            {
                throw e;
            }
            return(NoContent());
        }
Example #4
0
        public async Task <IActionResult> Register([FromBody] RegisterDto newUser)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            Card newCard = new Card();

            //check email exists or not!
            var  email    = newUser.email;
            bool hasemail = _context.Cards.Any(e => e.Email == email);
            var  errorMsg = new { error = "Sorry, this email exists already!!!" };

            if (hasemail)
            {
                return(BadRequest(errorMsg.error));
            }
            var password = newUser.password;
            MD5 md5Hash  = MD5.Create();

            byte[]        data     = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(password));
            StringBuilder sBuilder = new StringBuilder();

            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }
            string md5password = sBuilder.ToString().ToUpper();

            newCard.Name        = newUser.name;
            newCard.Email       = newUser.email;
            newCard.Password    = md5password; //newUser.password;
            newCard.Type        = 6;           // newUser.type;
            newCard.AccessLevel = 10;          // newUser.accesslevel;

            await _context.Cards.AddAsync(newCard);

            await _context.SaveChangesAsync();

            return(Ok(
                       new { newCard.Name, newCard.Email, newCard.Password, newCard.Type, newCard.AccessLevel }
                       ));
        }
        public async Task <IActionResult> sendMessage([FromBody] MessageDto message)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(JsonConvert.SerializeObject(ModelState.Values.Select(e => e.Errors).ToList())));
            }
            try
            {
                var receiverEmail = _config["ContactEmail"];
                /* add to messageboard table*/
                var messageboard = new MessageBoard()
                {
                    Name    = message.Name,
                    Subject = message.Subject,
                    Content = message.Content,
                    Email   = message.Email
                };
                await _context.MessageBoards.AddAsync(messageboard);

                //update database
                await _context.SaveChangesAsync();

                /* send email to supplier */
                var subject = message.Subject;
                var content = "Name :" + message.Name + "<br/>";
                content += "Contact Email : " + message.Email + "<br/><br/>";
                content += message.Content;
                await _mail.sendEmail(receiverEmail, subject, content, null);

                return(Ok());
            }
            catch (Exception)
            {
                throw;
            }
        }
Example #6
0
        public async Task <IActionResult> addToCart(int userId, [FromBody] AddItemToCartDto itemToCart)
        {
            if (itemToCart == null)
            {
                return(NotFound());
            }
            if (_context.Carts.Any(c => c.Code == itemToCart.code &&
                                   c.Name == itemToCart.name &&
                                   c.SupplierCode == itemToCart.supplier_code &&
                                   c.CardId == userId &&
                                   c.SalesPrice == itemToCart.sales_price.ToString()))
            {
                //Add new qty to this item
                var existingItem = _context.Carts.Where(c => c.Code == itemToCart.code && c.Name == itemToCart.name && c.SupplierCode == itemToCart.supplier_code && c.CardId == userId && c.SalesPrice == itemToCart.sales_price.ToString()).FirstOrDefault();

                var dQuantity = Convert.ToDouble(existingItem.Quantity);
                if ((dQuantity + itemToCart.quantity) < 0)
                {
                    return(BadRequest("qty < 0"));
                }
                dQuantity            += itemToCart.quantity;
                existingItem.Quantity = dQuantity.ToString();

                //if new qty == 0, remove this item from cart
                if (dQuantity == 0)
                {
                    //                   await deleteFromCart(cardid, existingItem.Id);
                    var itemToRemoveFromCart = new Cart();
                    itemToRemoveFromCart = _context.Carts.Where(c => c.Id == existingItem.Id && c.CardId == userId).FirstOrDefault();

                    if (itemToRemoveFromCart == null)
                    {
                        return(NotFound());
                    }

                    _context.Remove(itemToRemoveFromCart);
                }
                await _context.SaveChangesAsync(); //async

                return(NoContent());
            }
            else
            {
                if (itemToCart.quantity <= 0)
                {
                    return(BadRequest("quantity <= 0"));
                }
                var newItem = new Cart();
                newItem.CardId       = itemToCart.card_id;
                newItem.Code         = itemToCart.code;
                newItem.Name         = itemToCart.name;
                newItem.Barcode      = itemToCart.barcode;
                newItem.SalesPrice   = itemToCart.sales_price.ToString();
                newItem.Quantity     = itemToCart.quantity.ToString();
                newItem.SupplierCode = itemToCart.supplier_code;
                newItem.Points       = itemToCart.points.ToString();

                await _context.AddAsync(newItem);

                await _context.SaveChangesAsync();

                return(Ok(newItem));
            }
        }
        //   [Consumes("application/x-www-form-urlencoded")]
        public async Task <IActionResult> GetPaymentResult([FromQuery] string result, [FromQuery] string action, [FromQuery] string orderId)
        {
            PxPay          WS        = new PxPay(sServiceUrl, PxPayUserId, PxPayKey);
            ResponseOutput outputQs  = WS.ProcessResponse(result);
            string         DpsTxnRef = outputQs.DpsTxnRef;
            string         sSuccess  = outputQs.Success;
            string         returnUrl = outputQs.TxnData1;

            if (returnUrl == "")
            {
                returnUrl = "www.google.com";
            }

            if (result == null)
            {
                return(NotFound());
            }
            if (action != "paymentSuccess")
            {
                return(BadRequest("Sorry, payment unsuccessful. Please try later. "));
            }


            //1. Check if payment info record
            if (await _context.DpsOutput.AnyAsync(d => d.OrderId.ToString() == orderId)) //&& d.TxnId == outputQs.TxnId))
            {
                //if info recorded
            }
            else
            {
                //Record dps payment status
                var connectionString = _config.GetConnectionString("appContext");//_context.Database.GetDbConnection().ConnectionString;
                var conn             = new SqlConnection(connectionString);
                conn.Open();
                var comm = new SqlCommand("insert into DpsOutput(Order_Id, valid, Amount_Settlement, Auth_Code,Card_Name,CardNumber,Date_Expiry,Dps_Txn_Ref,Success," +
                                          "Response_Text,Dps_Billing_Id,Card_Holder_Name,Currency_Settlement,Txn_Data1,Txn_Data2,Txn_Data3,Txn_Type, Currency_Input,Merchant_Reference," +
                                          "Client_Info,Txn_Id, Email_Address,Billing_Id,Txn_Mac )values('" + orderId + "','" + outputQs.valid + "', " +
                                          "                                                                                   '" + outputQs.AmountSettlement + "', " +
                                          "                                                                                   '" + outputQs.AuthCode + "'," +
                                          "                                                                                   '" + outputQs.CardName + "'," +
                                          "                                                                                   '" + outputQs.CardNumber + "', " +
                                          "                                                                   '" + outputQs.DateExpiry + "', " +
                                          "                                                   '" + outputQs.DpsTxnRef + "', " +
                                          "                                   '" + outputQs.Success + "', " +
                                          "                   '" + outputQs.ResponseText + "', " +
                                          "                                                                                   '" + outputQs.DpsBillingId + "', " +
                                          "                                                                                   '" + outputQs.CardHolderName + "', " +
                                          "                                                                                   '" + outputQs.CurrencySettlement + "', " +
                                          "                                                                                   '" + outputQs.TxnData1 + "', " +
                                          "                                                                                   '" + outputQs.TxnData2 + "', " +
                                          "                                                                                   '" + outputQs.TxnData3 + "', " +
                                          "                                                                                   '" + outputQs.TxnType + "', " +
                                          "                                                                                   '" + outputQs.CurrencyInput + "', " +
                                          "                                                                                   '" + outputQs.MerchantReference + "', " +
                                          "                                                                                   '" + outputQs.ClientInfo + "', " +
                                          "                                                                                   '" + outputQs.TxnId + "', " +
                                          "                                                                                   '" + outputQs.EmailAddress + "', " +
                                          "                                                                                   '" + outputQs.BillingId + "', " +
                                          "                                                                                   '" + outputQs.TxnMac + "'" +
                                          "                                                                                        )");

                try
                {
                    comm.Connection = conn;
                    comm.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex.Message + "\r\n" + $"Record dps payment info error, order id: {orderId}.");
                    return(BadRequest(ex.Message));
                }
                finally
                {
                    conn.Close();
                }
            }


            var isProcessed = _context.TranDetail.Any(td => td.Note == DpsTxnRef || td.PaymentRef == DpsTxnRef);

            if (isProcessed)
            {
                // return BadRequest("Order " + orderId + " has been processed!");
                return(Ok(returnUrl));
            }

            PropertyInfo[] properties = outputQs.GetType().GetProperties();
            foreach (PropertyInfo oPropertyInfo in properties)
            {
                if (oPropertyInfo.CanRead)
                {
                    string name  = oPropertyInfo.Name;
                    string value = (string)oPropertyInfo.GetValue(outputQs, null);
                }
            }

            var order = _context.Orders.Where(o => o.Id == Convert.ToInt32(orderId))
                        .Join(_context.Invoices,
                              o => o.InvoiceNumber,
                              i => i.InvoiceNumber,
                              (o, i) => new { o.InvoiceNumber, o.Id, o.CardId, Total = i.Total ?? 0 }).FirstOrDefault();
            int     cardId        = 0;
            decimal orderAmount   = 0;
            string  customerEmail = "";

            var customer = await _context.Cards.FirstOrDefaultAsync(c => c.Id == order.CardId);

            if (customer != null)
            {
                customerEmail = customer.Email;
            }
            if (order != null)
            {
                cardId      = order.CardId;
                orderAmount = order.Total;
            }

            int paymentmethod = _isettings.getIdByPaymentMethod("dps");// 14; // paymentMethodCast(paymentInfo.payment_method);

            if (sSuccess == "1")
            {
                var invoiceExists = await _context.TranInvoices.AnyAsync(ti => ti.InvoiceNumber == order.InvoiceNumber);

                if (invoiceExists)
                {
                    return(BadRequest($"This order {orderId} has already been processed!"));
                }
                var connect       = _context.Database.GetDbConnection();
                var connectstring = _context.Database.GetDbConnection().ConnectionString;
                connect.Open();
                System.Data.Common.DbCommand dbCommand = connect.CreateCommand();

                //              using (var dbContextTransaction = connect.BeginTransaction())
                {
                    //input payment info
                    try
                    {
                        var note = dbCommand.CreateParameter();
                        note.ParameterName = "@note";
                        note.DbType        = System.Data.DbType.String;
                        note.Value         = DpsTxnRef;     //insert dps ref to tran_detail tables

                        var Payment_Ref = dbCommand.CreateParameter();
                        Payment_Ref.ParameterName = "@payment_ref";
                        Payment_Ref.DbType        = System.Data.DbType.String;
                        Payment_Ref.Value         = DpsTxnRef;

                        var shop_branch = dbCommand.CreateParameter();
                        shop_branch.ParameterName = "@shop_branch";
                        shop_branch.DbType        = System.Data.DbType.Int32;
                        shop_branch.Value         = _isettings.getOnlineShopId();

                        var Amount = dbCommand.CreateParameter();
                        Amount.ParameterName = "@Amount";
                        Amount.DbType        = System.Data.DbType.String;
                        Amount.Value         = order.Total;


                        var nDest = dbCommand.CreateParameter();
                        nDest.ParameterName = "@nDest";
                        nDest.DbType        = System.Data.DbType.Int32;
                        nDest.Value         = "1116";

                        var staff_id = dbCommand.CreateParameter();
                        staff_id.ParameterName = "@staff_id";
                        staff_id.DbType        = System.Data.DbType.Int32;
                        staff_id.Value         = order.CardId.ToString();

                        var card_id = dbCommand.CreateParameter();
                        card_id.ParameterName = "@card_id";
                        card_id.DbType        = System.Data.DbType.Int32;
                        card_id.Value         = order.CardId.ToString();

                        var payment_method = dbCommand.CreateParameter();
                        payment_method.ParameterName = "@payment_method";
                        payment_method.DbType        = System.Data.DbType.Int32;
                        payment_method.Value         = paymentmethod;

                        var invoice_number = dbCommand.CreateParameter();
                        invoice_number.ParameterName = "@invoice_number";
                        invoice_number.DbType        = System.Data.DbType.Int32;
                        invoice_number.Value         = Convert.ToInt32(order.InvoiceNumber);

                        var amountList = dbCommand.CreateParameter();
                        amountList.ParameterName = "@amountList";
                        amountList.DbType        = System.Data.DbType.String;
                        amountList.Value         = orderAmount;


                        var return_tran_id = dbCommand.CreateParameter();
                        return_tran_id.ParameterName = "@return_tran_id";
                        return_tran_id.Direction     = System.Data.ParameterDirection.Output;
                        return_tran_id.DbType        = System.Data.DbType.Int32;

                        var return_exist_trans = dbCommand.CreateParameter();
                        return_exist_trans.ParameterName = "@return_exist_trans";
                        return_exist_trans.Direction     = System.Data.ParameterDirection.Output;
                        return_exist_trans.DbType        = System.Data.DbType.Boolean;

                        dbCommand.Parameters.Add(note);
                        dbCommand.Parameters.Add(Payment_Ref);
                        dbCommand.Parameters.Add(shop_branch);
                        dbCommand.Parameters.Add(Amount);
                        dbCommand.Parameters.Add(staff_id);
                        dbCommand.Parameters.Add(card_id);
                        dbCommand.Parameters.Add(payment_method);
                        dbCommand.Parameters.Add(invoice_number);
                        dbCommand.Parameters.Add(amountList);
                        dbCommand.Parameters.Add(return_tran_id);
                        dbCommand.Parameters.Add(return_exist_trans);
                        dbCommand.CommandText = "eznz_payment";
                        dbCommand.CommandType = System.Data.CommandType.StoredProcedure;
                        var obj = await dbCommand.ExecuteNonQueryAsync();


                        //if trans exists, do not send invoice and order
                        string sExist_trans = return_exist_trans.Value.ToString();//dbCommand.Parameters["@return_exist_trans"].Value.ToString();
                        if (sExist_trans == null || sExist_trans == "0" || sExist_trans == "")
                        {
                            try
                            {
                                //create invoice pdf
                                var    host        = "http://" + HttpContext.Request.Host;
                                string host1       = _config["ApiUrl"]; // "http://api171.gpos.nz";
                                var    currentSite = _config["CurrentSite"];
                                var    PdfUrl      = _config["PdfUrl"];
                                try
                                {
                                    //ConversionOptions options = new ConversionOptions(PageSize.A4, PageOrientation.Portrait, 5.0f);
                                    //var directory = _config["PdfPath"] + "//invoice//" + order.InvoiceNumber + ".pdf";
                                    //try
                                    //{
                                    //    // Set Metadata for the PDF
                                    //    options.Author = "Myself";
                                    //    options.Title = "My Webpage";
                                    //    // Set Header and Footer text
                                    //    options.Header = "";
                                    //    options.Footer = "";
                                    //    Converter.Convert(new Uri(_config["PdfUrl"] + order.InvoiceNumber), directory, options);
                                    //    //send pdf to customer
                                    //    var myAttachment = new Attachment(_config["PdfPath"] + "//invoice//" + order.InvoiceNumber + ".pdf");
                                    //    await _mail.sendEmail(customerEmail, "Invoice", "DoNotReply! <br><br> Dear customer: <br>Thank you for your order.</a><br> Your order invoice is in attachment.", myAttachment);
                                    //}
                                    //catch (Exception ex)
                                    //{
                                    //    _logger.LogError(ex.Message + "\r\n" + $"Send pdf to customer order unsuccessful, order id: {orderId}.");
                                    //    return BadRequest(ex.Message);
                                    //}

                                    using (var client = new HttpClient())
                                    {
                                        var data = new PdfDto()
                                        {
                                            InvoiceNumber = order.InvoiceNumber ?? 0,
                                            Url           = PdfUrl + order.InvoiceNumber
                                        };
                                        var myContent   = JsonConvert.SerializeObject(data);
                                        var buffer      = System.Text.Encoding.UTF8.GetBytes(myContent);
                                        var byteContent = new ByteArrayContent(buffer);
                                        byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

                                        client.BaseAddress = new Uri(host1);
//										var responseTask = client.GetAsync(currentSite + "/api/invoice/pdf/" + orderId);
                                        var responseTask = client.PostAsync(currentSite + "/api/invoice/pdf", byteContent);
                                        responseTask.Wait();

                                        var getResult = responseTask.Result;
                                        if (getResult.IsSuccessStatusCode)
                                        {
                                            //send order to customer by email
                                            var myAttachment = new Attachment(_config["PdfPath"] + "//invoice//" + order.InvoiceNumber + ".pdf");
                                            await _mail.sendEmail(customerEmail, "Invoice", "DoNotReply! <br><br> Dear customer: <br>Thank you for your order from<a href='http://dollaritems.co.nz/ecom'> dollaritems.co.nz</a><br> Your order invoice is in attachment.", myAttachment);
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    _logger.LogError(ex.Message + "\r\n" + $"Send pdf to customer order unsuccessful, order id: {orderId}.");
                                    return(BadRequest(ex.Message));
                                }

                                var manage = _config["Management"];
                                if (manage == "true")
                                {
                                    //if payment susseed, send order to supplier
                                    try
                                    {
                                        using (var client = new HttpClient())
                                        {
                                            client.BaseAddress = new Uri(host1);

                                            var responseTask = client.GetAsync(currentSite + "/api/order/SendOrderToSupplier/" + orderId);
                                            responseTask.Wait();
                                            var getResult = responseTask.Result;
                                            if (getResult.IsSuccessStatusCode)
                                            {
                                                //set a key, if order send to supplier successfully
                                                var currentOrderDpsOutput = await _context.DpsOutput.FirstOrDefaultAsync(d => d.OrderId.ToString() == orderId);

                                                if (currentOrderDpsOutput == null)
                                                {
                                                    _logger.LogError($"Cannot find this order, when send order to supplier, order id: {orderId}.");
                                                    return(NotFound());
                                                }
                                                currentOrderDpsOutput.OrderSent = true;
                                                _context.DpsOutput.Update(currentOrderDpsOutput);
                                                await _context.SaveChangesAsync();
                                            }
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        _logger.LogError(ex.Message + "\r\n" + $"Send order to supplier unsuccessful, order id: {orderId}.");
                                        BadRequest(ex);
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                _logger.LogError(ex.Message + "\r\n" + $"Send order to supplier unsuccessful, order id: {orderId}.");
                                BadRequest(ex.Message);
                            }
                        }
                        else
                        {
                            _logger.LogError($"Transcation for this order exists, order id: {orderId}.");
                        }
                    }
                    catch (Exception ex)
                    {
                        //                    dbContextTransaction.Rollback();
                        _logger.LogError(ex.Message + "\r\n" + $"Insert transaction into Db unsuccessful, order id: {orderId}.");
                        return(BadRequest(ex));
                    }
                    finally
                    {
                        connect.Close();
                        connect.Dispose();
                    }
                }
            }
            else
            {
                _logger.LogError($"Payment for order {orderId} unsuccessful.");
            }
            return(Ok(returnUrl));
        }
Example #8
0
        public async Task <IActionResult> updatePayment([FromForm] LatipayPaymentDto paymentInfo)
        {
            //         data = "merchant_reference=10110&order_id=2017232323345678&amount=12.50&currency=NZD&payment_method=alipay&pay_time=2017-07-07%2010%3A53%3A50&status=paid&signature=840151e0dc39496e22b410b83058b4ddd633b786936c505ae978fae029a1e0f1";
            if (paymentInfo == null)
            {
                return(BadRequest("model is null"));
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            //string ObjInStr = "{ \r\n";
            //string[] newstr = data.Split("&");
            //foreach (string ns in newstr)
            //{
            //    var index = newstr.ToList().IndexOf(ns);
            //    if (index < newstr.Length - 1)
            //    {
            //        string[] key = ns.Split("=");
            //        ObjInStr += "\"";
            //        ObjInStr += key[0] + "\" : ";
            //        ObjInStr += "\"";
            //        ObjInStr += key[1] + "\", \r\n";
            //    }
            //    else
            //    {
            //        string[] key = ns.Split("=");
            //        ObjInStr += "\"";
            //        ObjInStr += key[0] + "\" : ";
            //        ObjInStr += "\"";
            //        ObjInStr += key[1] + "\" \r\n";
            //    }
            //}
            //ObjInStr += "}";

            //LatipayPaymentDto paymentInfo = JsonConvert.DeserializeObject<LatipayPaymentDto>(ObjInStr);

            var merchant_reference = paymentInfo.merchant_reference;

            var  order           = _context.Orders.Where(o => o.InvoiceNumber == Convert.ToInt32(merchant_reference)).FirstOrDefault();
            bool isTran_invoiced = await _context.TranInvoices.AnyAsync(i => i.InvoiceNumber == Convert.ToInt32(merchant_reference));

            if (order == null)
            {
                return(BadRequest("Can not find this order!"));
            }
            var paid = order.WebOrderStatus;

            if (paid > 1 && isTran_invoiced)
            {
                return(Ok("This order is paid!"));
            }
            //int latiinvoice_number = Convert.ToInt32(merchant_reference);

            var latipayment_method = paymentInfo.payment_method;
            var status             = paymentInfo.status;
            var currenty           = paymentInfo.currency;
            var amount             = paymentInfo.amount;
            var signature          = paymentInfo.signature;
            var order_id           = paymentInfo.order_id;

            string myCheckingString = merchant_reference + latipayment_method + status + currenty + amount;

            var apikey = Startup.Configuration["Latipay_apiKey"];

            byte[] secret     = Encoding.UTF8.GetBytes(apikey);
            byte[] msg        = Encoding.UTF8.GetBytes(myCheckingString);
            Common hmacsha256 = new Common();

            byte[] SHA256HMACSignature = hmacsha256.HashHMAC(secret, msg);
            string mysignature         = BitConverter.ToString(SHA256HMACSignature).Replace("-", "").ToLower();

            // return Ok(paymentInfo.signature + "////" + mysignature);

            if (signature != mysignature)
            {
                _logger.LogCritical($"error occur when update payment!");
                return(BadRequest("error occur when update payment!"));
            }

            if (paymentInfo == null)
            {
                return(NotFound());
            }
            var connect       = _context.Database.GetDbConnection();
            var connectstring = _context.Database.GetDbConnection().ConnectionString;

            connect.Open();
            System.Data.Common.DbCommand dbCommand = connect.CreateCommand();

            var cardid        = _context.Invoices.Where(i => i.InvoiceNumber.ToString() == paymentInfo.merchant_reference).FirstOrDefault().CardId;
            int paymentmethod = paymentMethodCast(paymentInfo.payment_method);

            try
            {
                var note = dbCommand.CreateParameter();

                note.ParameterName = "@note";
                note.DbType        = System.Data.DbType.String;
                note.Value         = order_id;

                var shop_branch = dbCommand.CreateParameter();
                shop_branch.ParameterName = "@shop_branch";
                shop_branch.DbType        = System.Data.DbType.Int32;
                shop_branch.Value         = 1032;

                var Amount = dbCommand.CreateParameter();
                Amount.ParameterName = "@Amount";
                Amount.DbType        = System.Data.DbType.String;
                Amount.Value         = paymentInfo.amount;

                var nDest = dbCommand.CreateParameter();
                nDest.ParameterName = "@nDest";
                nDest.DbType        = System.Data.DbType.Int32;
                nDest.Value         = "1116";

                var staff_id = dbCommand.CreateParameter();
                staff_id.ParameterName = "@staff_id";
                staff_id.DbType        = System.Data.DbType.Int32;
                staff_id.Value         = cardid.ToString();

                var card_id = dbCommand.CreateParameter();
                card_id.ParameterName = "@card_id";
                card_id.DbType        = System.Data.DbType.Int32;
                card_id.Value         = cardid.ToString();

                var payment_method = dbCommand.CreateParameter();
                payment_method.ParameterName = "@payment_method";
                payment_method.DbType        = System.Data.DbType.Int32;
                payment_method.Value         = paymentmethod;

                var invoice_number = dbCommand.CreateParameter();
                invoice_number.ParameterName = "@invoice_number";
                invoice_number.DbType        = System.Data.DbType.Int32;
                invoice_number.Value         = Convert.ToInt32(merchant_reference);

                var amountList = dbCommand.CreateParameter();
                amountList.ParameterName = "@amountList";
                amountList.DbType        = System.Data.DbType.String;
                amountList.Value         = paymentInfo.amount;


                var return_tran_id = dbCommand.CreateParameter();
                return_tran_id.ParameterName = "@return_tran_id";
                return_tran_id.Direction     = System.Data.ParameterDirection.Output;
                return_tran_id.DbType        = System.Data.DbType.Int32;

                dbCommand.Parameters.Add(note);
                dbCommand.Parameters.Add(shop_branch);
                dbCommand.Parameters.Add(Amount);
                dbCommand.Parameters.Add(staff_id);
                dbCommand.Parameters.Add(card_id);
                dbCommand.Parameters.Add(payment_method);
                dbCommand.Parameters.Add(invoice_number);
                dbCommand.Parameters.Add(amountList);
                dbCommand.Parameters.Add(return_tran_id);
                dbCommand.CommandText = "eznz_payment";
                dbCommand.CommandType = System.Data.CommandType.StoredProcedure;

                var obj = await dbCommand.ExecuteNonQueryAsync();

                //       return Ok(return_tran_id.Value);

                order.WebOrderStatus = 4;
                _context.Update(order);
                await _context.SaveChangesAsync();

                return(Ok("sent"));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex));
            }
            finally
            {
                connect.Close();
                connect.Dispose();
            }
        }