private void ProcessTransaction()
        {
            long userId = Util.UserId;
            long prodId = 0L;
            string country = "NL";
            string currency = "EUR";
            string culture = "nl-NL";
            decimal amount = 0m;
            if (Session["pid"] != null)
                prodId = Convert.ToInt64(Session["pid"]);
            if (Session["amt"] != null)
                amount = Convert.ToDecimal(Session["amt"]);
            if (Session["culture"] != null)
                culture = Session["culture"] as string;
            country = culture.Substring(3);
            currency = Util.GetCurrencyIsoNameByCountryIso2(country);

            Logger.Instance.Write(LogLevel.Info, "Process successful transaction: {0}", Request.RawUrl);

            string res = Request.Params["res"] ?? string.Empty;
            string status = Request.Params["Status"] ?? string.Empty;
            string statusCode = Request.Params["StatusCode"] ?? string.Empty;
            string merchant = Request.Params["Merchant"] ?? string.Empty;
            string orderId = Request.Params["OrderID"] ?? string.Empty;
            string paymentId = Request.Params["PaymentID"] ?? string.Empty;
            string reference = Request.Params["Reference"] ?? string.Empty;
            string transid = Request.Params["TransactionID"] ?? string.Empty;
            string paymentMethod = Request.Params["PaymentMethod"] ?? string.Empty;
            if (!string.IsNullOrEmpty(statusCode))
                statusCode = Uri.UnescapeDataString(statusCode);
            using (Database db = new MySqlDatabase())
            {
                StringBuilder sb = new StringBuilder();
                ProductInfo pi = db.GetProductById(prodId);
                switch (db.UpdateTransaction(orderId, res, status, statusCode, merchant, paymentId, reference,
                                 transid, paymentMethod, amount, pi, currency, country))
                {
                    case TransactionResult.Success:
                        {
                            long Transaction_id = 0;
                            long.TryParse(orderId, out Transaction_id);

                            db.UpdateUserCredits(userId, prodId, pi.Credits);
                            db.AddCreditHistory(userId, prodId, pi.Credits, Transaction_id);

                            sb.Append("<div>");
                            sb.AppendFormat("<p><strong>{0}</strong></p>", Resources.Resource.TransactionSuccessful);
                            sb.AppendFormat(Resources.Resource.HasCreditsNow, Util.GetUserCredits(userId));
                            sb.Append("</div>");
                        }
                        break;

                    case TransactionResult.NotFound:
                        {
                            sb.Append("<div>");
                            sb.AppendFormat("<p><strong>{0}</strong></p>", Resources.Resource.TransactionFailed);
                            sb.AppendFormat(Resources.Resource.HasCreditsNow, Util.GetUserCredits(userId));
                            sb.Append("</div>");
                        }
                        break;

                    case TransactionResult.AlreadyCompleted:
                        {
                            sb.Append("<div>");
                            sb.AppendFormat("<p><strong>{0}</strong></p>", Resources.Resource.TransactionAlreadyCompleted);
                            sb.AppendFormat(Resources.Resource.HasCreditsNow, Util.GetUserCredits(userId));
                            sb.Append("</div>");
                        }
                        break;
                }

                ResultLiteral.Text = sb.ToString();
            }

            sendMail(orderId, Resources.Resource.CreditPurchaseSuccessSubject, Resources.Resource.CreditPurchaseSuccessBody);
        }