示例#1
0
    public string readRFQsByUser(string user)
    {
        GatewayResponse response = new GatewayResponse();

        List <RFQ> result = new List <RFQ>();

        if (user.ToUpper() == "ALL")
        {
            result = (List <RFQ>)rfq_CRUD.readAll();
        }
        else
        {
            result = rfq_CRUD.readByUser(user);
        }

        response.ErrorThrown         = false;
        response.ResponseDescription = "";
        response.Result = result;
        return(JsonConvert.SerializeObject(response));
    }
示例#2
0
        public void SendTest_PriorAuthCapture_Approved()
        {
            //check login / password
            string sError = CheckLoginPassword();

            Assert.IsTrue(sError == "", sError);

            //setup
            decimal amount  = (decimal)20.13;
            string  transID = SendAuthOnly(amount + 1, true);

            Assert.IsTrue(transID.Trim().Length > 0);
            Assert.IsTrue(long.Parse(transID) > 0);

            //start testing
            string responseString = "1|1|1|This transaction has been approved.|P9A0ET|P|2207700131||PriorAuthCapture transaction approved testing|20.13|CC|prior_auth_capture||||||||||||||||||||||||||4C66E6649DF48EDEBBD917A1656CD68C|||||||||||||XXXX1111|Visa||||||||||||||||";

            LocalRequestObject.ResponseString = responseString;
            IGatewayResponse expected = new GatewayResponse(responseString.Split('|'));

            Gateway target = new Gateway(ApiLogin, TransactionKey, true);

            IGatewayRequest request = new PriorAuthCaptureRequest(amount, transID);

            request.DuplicateWindow = "0";
            string description = "PriorAuthCapture transaction approved testing";

            IGatewayResponse actual = target.Send(request, description);

            Assert.AreEqual(expected.Amount, actual.Amount);
            Assert.AreEqual(expected.Approved, actual.Approved);
            Assert.AreEqual(expected.CardNumber, actual.CardNumber);
            Assert.AreEqual(expected.Message, actual.Message);
            Assert.AreEqual(expected.ResponseCode, actual.ResponseCode);

            Assert.IsTrue(actual.AuthorizationCode.Trim().Length > 0);
            Assert.IsTrue(actual.TransactionID.Trim().Length > 0);
            Assert.IsTrue(long.Parse(actual.TransactionID) > 0);
        }
示例#3
0
 private async Task ProcessResponse(GatewayResponse response)
 {
     try
     {
         using (var serviceScope = Services.CreateScope())
         {
             {
                 var commandQueues = serviceScope.ServiceProvider.GetRequiredService <CommandQueues>();
                 commandQueues.TryPostResponse(gatewayId, response);
             }
             if (!response.HasError())
             {
                 var responseProcessor = serviceScope.ServiceProvider.GetRequiredService <GatewayResponseProcessor>();
                 await responseProcessor.ProcessResponse(response.GetMessage());
             }
         }
     }
     catch (Exception e)
     {
         Console.WriteLine($"Unknown exception during message processing. {e.Message}");
     }
 }
示例#4
0
文件: RFQ.aspx.cs 项目: Capsonic/APQM
    private string getRFQ()
    {
        GatewayResponse response = new GatewayResponse();
        long            id       = -1;

        try
        {
            id = long.Parse(Request["id"]);
        }
        catch (Exception ex)
        {
            response.ErrorThrown         = true;
            response.ResponseDescription = "Bad request.";
            return(JsonConvert.SerializeObject(response));
        }

        RFQ rfq = rfq_CRUD.readById(id);

        rfq.User = user_CRUD.readById(rfq.CreatedBy);

        rfq.RfqAcr = rfqACR_CRUD.readByParentID(rfq.Id);

        rfq.RfqEAV = rfqEAV_CRUD.readByParentID(rfq.Id);

        foreach (RFQEAV rfqEAV in rfq.RfqEAV)
        {
            List <RFQDetail> rfqDetail = rfqDetail_CRUD.readByParentID(rfqEAV.Id);
            rfqEAV.RfqDetail = rfqDetail;
        }

        updateAttachmentsToBuyer(ref rfq);
        updateAttachmentsToVendor(ref rfq);

        response.ErrorThrown         = false;
        response.ResponseDescription = "OK";
        response.Result = rfq;

        return(JsonConvert.SerializeObject(response));
    }
示例#5
0
文件: BOM.aspx.cs 项目: Capsonic/APQM
    public String createBOM(long sif_id)
    {
        GatewayResponse response = new GatewayResponse();

        BOM bom = new BOM();

        bom.SifId = sif_id;
        string idGenerated = bom_CRUD.createAndReturnIdGenerated(bom);

        if (!bom_CRUD.ErrorOccur)
        {
            response.ErrorThrown         = false;
            response.ResponseDescription = "BOM created successfully.";
            response.Result = idGenerated;
        }
        else
        {
            response.ErrorThrown         = true;
            response.ResponseDescription = bom_CRUD.ErrorMessage;
        }
        return(JsonConvert.SerializeObject(response));
    }
示例#6
0
        public async Task <GatewayStatus> GetStatus()
        {
            GatewayResponse r = await _endPointInfo
                                .GetRequest(RequestRoot.Gateway)
                                .AppendPath(TradfriAttribute.GatewayInfo)
                                .Get <GatewayResponse>();

            return(new GatewayStatus(
                       r.NetworkTimeProtocol,
                       r.GatewayTimeSource,
                       r.CurrentTime,
                       r.CommissioningMode,
                       r.Firmware,
                       r.GatewayId,
                       r.GoogleHomePairStatus,
                       r.AlexaPairStatus,
                       r.HomekitId,
                       r.OtaUpdateState,
                       r.GatewayUpdateProgress,
                       r.OtaType,
                       r.FirstSetup,
                       r.CertificateProvider));
        }
示例#7
0
        public byte[] Send(IDeviceMessage message)
        {
            OnMessageSent?.Invoke(message.ToString());

            try {
                return(Task.Run(async() => {
                    GatewayResponse serviceResponse = await StageTransactionAsync(message);
                    if (serviceResponse.StatusCode == HttpStatusCode.OK)
                    {
                        var root = ElementTree.Parse(serviceResponse.RawResponse).Get("CreateTransactionResponse");

                        var errors = root.GetAll("Message");
                        if (errors.Length > 0)
                        {
                            var sb = new StringBuilder();
                            foreach (var error in root.GetAll("Message"))
                            {
                                sb.AppendLine(error.GetValue <string>("Information"));
                            }
                            throw new MessageException(sb.ToString());
                        }

                        string transportKey = root.GetValue <string>("TransportKey");
                        string validationKey = root.GetValue <string>("ValidationKey");

                        return await InitializeTransactionAsync(transportKey);
                    }
                    else
                    {
                        throw new MessageException(serviceResponse.StatusCode.ToString());
                    }
                }).Result);
            }
            catch (Exception exc) {
                throw new MessageException("Failed to send message. Check inner exception for more details.", exc);
            }
        }
示例#8
0
        public void SendTest_Capture_Approved()
        {
            //check login / password
            string sError = CheckLoginPassword();

            Assert.IsTrue(sError == "", sError);

            //setup
            decimal amount   = (decimal)20.12;
            string  authCode = SendAuthOnly(amount + 1, false);

            Assert.IsTrue(authCode.Trim().Length > 0);

            //start testing
            string responseString = "1|1|1|This transaction has been approved.|X297JA|P|2207700989||Capture transaction approved testing|20.12|CC|capture_only||||||||||||||||||||||||||13E5B43A154FFEDF556537BEA77BAB80|||||||||||||XXXX1111|Visa||||||||||||||||";

            LocalRequestObject.ResponseString = responseString;
            IGatewayResponse expected = new GatewayResponse(responseString.Split('|'));

            Gateway target = new Gateway(ApiLogin, TransactionKey, true);

            IGatewayRequest request     = new CaptureRequest(authCode, "4111111111111111", "0224", amount);
            string          description = "Capture transaction approved testing";

            IGatewayResponse actual = target.Send(request, description);

            Assert.AreEqual(expected.Amount, actual.Amount);
            Assert.AreEqual(expected.Approved, actual.Approved);
            Assert.AreEqual(expected.CardNumber, actual.CardNumber);
            Assert.AreEqual(expected.Message, actual.Message);
            Assert.AreEqual(expected.ResponseCode, actual.ResponseCode);

            Assert.IsTrue(actual.AuthorizationCode.Trim().Length > 0);
            Assert.IsTrue(actual.TransactionID.Trim().Length > 0);
            Assert.IsTrue(long.Parse(actual.TransactionID) > 0);
        }
示例#9
0
            public void TryPostResponse(GatewayResponse response)
            {
                if (response.SequenceNumber == 0)
                {
                    return;
                }

                try
                {
                    PendingRequests[response.SequenceNumber].SetResult(response.GetMessage());
                }
                catch (KeyNotFoundException)
                {
                    // no such response.SequenceNumber -> probably timeouted and already deleted
                }
                catch (GatewayResponseError e)
                {
                    PendingRequests[response.SequenceNumber].SetException(e);
                }
                finally
                {
                    PendingRequests.TryRemove(response.SequenceNumber, out _);
                }
            }
示例#10
0
    public string sendRFQ()
    {
        List <RFQ>      resultRFQs = new List <RFQ>();
        GatewayResponse response   = new GatewayResponse();
        String          s;
        NewRFQScreen    newRFQScreen;

        try
        {
            s            = new StreamReader(Request.InputStream).ReadToEnd();
            newRFQScreen = JsonConvert.DeserializeObject <NewRFQScreen>(s);
        }
        catch (Exception ex)
        {
            response.ErrorThrown         = true;
            response.ResponseDescription = "ERROR: When trying to parse JSON in server. " + ex.Message;
            return(JsonConvert.SerializeObject(response));
        }

        RFQNumberCRUD rfqNumberCRUD  = new RFQNumberCRUD();
        bomDetailCRUD bomDetail_CRUD = new bomDetailCRUD();
        UserCRUD      user_CRUD      = new UserCRUD();

        string baseBOMAttachmentsPath = ConfigurationManager.AppSettings["BOMLineAttachments"];
        string baseRFQAttachmentsPath = ConfigurationManager.AppSettings["RFQAttachmentsSent"];

        string strAuthUser = HttpContext.Current.User.Identity.Name;
        User   user        = user_CRUD.readById(strAuthUser);

        List <SIFDetail> EAUsList = newRFQScreen.SIFVolumesList;

        if (EAUsList.Count == 0)
        {
            response.ErrorThrown         = true;
            response.ResponseDescription = "ERROR: Cannot create RFQ without EAU specified.";
            return(JsonConvert.SerializeObject(response));
        }

        List <RFQEAV> newEAUList = new List <RFQEAV>();

        foreach (SIFDetail eau in EAUsList)
        {
            RFQEAV eauParsed = new RFQEAV();
            eauParsed.Volume = eau.ProjectedAnnualVolume;
            eauParsed.Year   = eau.ProgramYear;
            RFQEAV alreadyExists = newEAUList.Find(eauInternal => eauInternal.Volume == eauParsed.Volume);
            if (alreadyExists == null)
            {
                newEAUList.Add(eauParsed);
            }
            else
            {
                alreadyExists.Year = alreadyExists.Year.Trim() + ", " + eauParsed.Year.Trim();
            }
        }

        List <BOMDetail> bomDetailList = newRFQScreen.BomDetailList;


        ConnectionManager CM = new ConnectionManager();

        Data_Base_MNG.SQL DM = CM.getDataManager();

        if (newRFQScreen.SupplierList.Count > 0)
        {
            foreach (Supplier supplier in newRFQScreen.SupplierList)
            {
                foreach (BOMDetail component in bomDetailList)
                {
                    RFQNumberEntity rfqNumber = new RFQNumberEntity();

                    rfqNumber.BOMDetailKey = component.Id;
                    rfqNumber.SifHeaderKey = newRFQScreen.SIFHeaderID;
                    rfqNumber.RFQNumber    = rfqNumberCRUD.generateNewRFQNumber(rfqNumber.SifHeaderKey);

                    if (rfqNumber.RFQNumber == -1)
                    {
                        response.ErrorThrown         = true;
                        response.ResponseDescription = "ERROR: There was an error generating a new RFQ number.";
                        return(JsonConvert.SerializeObject(response));
                    }

                    CM = new ConnectionManager();
                    DM = CM.getDataManager();

                    /*Begin Transaction*/
                    DM.Open_Connection("Send New RFQ");

                    RFQ             rfq = new RFQ();
                    RFQNumberEntity rfqNumberGenereated = rfqNumberCRUD.create_return_object(rfqNumber, ref DM);
                    if (rfqNumberCRUD.ErrorOccur)
                    {
                        response.ErrorThrown         = true;
                        response.ResponseDescription = "ERROR:" + rfqNumberCRUD.ErrorMessage;
                        return(JsonConvert.SerializeObject(response));
                    }
                    else
                    {
                        //rfq.SentAttachmentsFolder = newRFQScreen.FolderAttachments;

                        newRFQScreen.FolderAttachments = newRFQScreen.FolderAttachments.Trim();
                        if (newRFQScreen.FolderAttachments != "")
                        {
                            if (System.IO.Directory.Exists((baseRFQAttachmentsPath + newRFQScreen.FolderAttachments)))
                            {
                                DirectoryInfo directory = new DirectoryInfo((baseRFQAttachmentsPath + newRFQScreen.FolderAttachments));
                                if (directory.GetFiles().Length > 0)
                                {
                                    string folderName = "";
                                    do
                                    {
                                        DateTime date = DateTime.Now;
                                        folderName = date.Year.ToString() + date.Month.ToString() +
                                                     date.Day.ToString() + "_" + MD5HashGenerator.GenerateKey(date);
                                    } while (Directory.Exists((baseRFQAttachmentsPath + folderName)));
                                    Directory.CreateDirectory((baseRFQAttachmentsPath + folderName));
                                    rfq.SentAttachmentsFolder = folderName;


                                    foreach (FileInfo file in directory.GetFiles())
                                    {
                                        try
                                        {
                                            File.Copy(file.FullName, (baseRFQAttachmentsPath + rfq.SentAttachmentsFolder + @"\" + file.Name), true);
                                        }
                                        catch (Exception ex)
                                        {
                                            response.ErrorThrown         = true;
                                            response.ResponseDescription = "ERROR:" + ex.Message;
                                            return(JsonConvert.SerializeObject(response));
                                        }
                                    }
                                }
                            }
                        }

                        foreach (Attachment bomAttachment in component.AttachmentsList)
                        {
                            if (rfq.SentAttachmentsFolder.Trim() == "")
                            {
                                string folderName = "";
                                do
                                {
                                    DateTime date = DateTime.Now;
                                    folderName = date.Year.ToString() + date.Month.ToString() +
                                                 date.Day.ToString() + "_" + MD5HashGenerator.GenerateKey(date);
                                } while (Directory.Exists((baseRFQAttachmentsPath + folderName)));
                                Directory.CreateDirectory((baseRFQAttachmentsPath + folderName));
                                rfq.SentAttachmentsFolder = folderName;
                            }
                            string currentPathAttachmentSource = baseBOMAttachmentsPath + bomAttachment.Directory + @"\" + bomAttachment.FileName;
                            string currentPathAttachmentTarget = baseRFQAttachmentsPath + rfq.SentAttachmentsFolder + @"\" + bomAttachment.FileName;
                            try
                            {
                                File.Copy(currentPathAttachmentSource, currentPathAttachmentTarget, true);
                            }
                            catch (Exception e)
                            {
                                response.ErrorThrown         = true;
                                response.ResponseDescription = "ERROR:" + e.Message;
                                return(JsonConvert.SerializeObject(response));
                            }
                        }


                        RfqCRUD rfqCRUD = new RfqCRUD();

                        rfq.SupplierId       = supplier.Id;
                        rfq.SupplierName     = supplier.SupplierName;
                        rfq.SentToVendor     = DateTime.Now;
                        rfq.LastEmail        = supplier.ContactEmail;
                        rfq.Status           = "PENDING";
                        rfq.BomDetailId      = component.Id;
                        rfq.Um               = component.Um;
                        rfq.RfqNumberKey     = rfqNumberGenereated.Id;
                        rfq.RfqGenerated     = rfqNumberGenereated.RfqGenerated;
                        rfq.DueDate          = newRFQScreen.DueDate;
                        rfq.MarketSectorID   = newRFQScreen.MarketSectorID;
                        rfq.DrawingLevel     = newRFQScreen.DrawingLevel;
                        rfq.TargetPrice      = newRFQScreen.TargetPrice;
                        rfq.CommentsToVendor = newRFQScreen.CommentsToVendor;


                        rfq.CreatedBy = strAuthUser;

                        string idGenerated = rfqCRUD.createAndReturnIdGenerated(rfq, component, ref DM);

                        if (!rfqCRUD.ErrorOccur)
                        {
                            rfq.Id = long.Parse(idGenerated);

                            foreach (RFQEAV eau in newEAUList)
                            {
                                RFQEAVCRUD rfqEAV_CRUD      = new RFQEAVCRUD();
                                RFQEAV     rfqEAV_toPersist = new RFQEAV();
                                rfqEAV_toPersist.RfqHeaderKey = long.Parse(idGenerated);
                                rfqEAV_toPersist.Volume       = eau.Volume * component.Qty;
                                rfqEAV_toPersist.Year         = eau.Year;
                                rfqEAV_toPersist.Status       = "CREATED";
                                rfqEAV_CRUD.createAndReturnIdGenerated(rfqEAV_toPersist, ref DM);
                                if (rfqEAV_CRUD.ErrorOccur)
                                {
                                    response.ErrorThrown         = true;
                                    response.ResponseDescription = "ERROR:" + rfqEAV_CRUD.ErrorMessage;
                                    return(JsonConvert.SerializeObject(response));
                                }
                            }

                            TokenCRUD token_CRUD = new TokenCRUD();
                            Token     token      = new Token();
                            token.Subject     = "RFQ";
                            token.SubjectKey  = long.Parse(idGenerated);
                            token.TokenNumber = MD5HashGenerator.GenerateKey(DateTime.Now);
                            if (token_CRUD.create(token, ref DM))
                            {
                                Email       NewMail = new Email();
                                MailMessage Message = new MailMessage();
                                try
                                {
                                    Message.From = new MailAddress("*****@*****.**", "*****@*****.**");
                                    Message.To.Add(new MailAddress(supplier.ContactEmail.ToString()));
                                    Message.Subject      = "Request For Quote";
                                    Message.IsBodyHtml   = true;
                                    Message.BodyEncoding = System.Text.Encoding.UTF8;

                                    var url             = ResolveUrl("~/Vendor/Email_RFQ_Request.htm");
                                    var strEmailContent = HTMLContent(url);
                                    strEmailContent = strEmailContent.Replace("{BuyerName}", user.Name);
                                    strEmailContent = strEmailContent.Replace("{BuyerPhone}", user.Phone1);
                                    strEmailContent = strEmailContent.Replace("{BuyerEmail}", user.Email);
                                    strEmailContent = strEmailContent.Replace("{RFQ Number}", rfqNumber.RfqGenerated);
                                    strEmailContent = strEmailContent.Replace("{Part Number}", component.PartNumber);
                                    strEmailContent = strEmailContent.Replace("{RFQLink}", "http://" + Request.Url.Authority + Request.ApplicationPath + "/Vendor/RFQHandler.ashx?token=" + token.TokenNumber);

                                    Message.Body = strEmailContent;


                                    NewMail.SendMail(Message);
                                }
                                catch (Exception ex)
                                {
                                    DM.RollBack();
                                    response.ErrorThrown         = true;
                                    response.ResponseDescription = "ERROR: Could not send email to: " + supplier.ContactEmail.ToString() + "; " + ex.Message;
                                    return(JsonConvert.SerializeObject(response));
                                }
                            }
                            else
                            {
                                response.ErrorThrown         = true;
                                response.ResponseDescription = "ERROR: " + token_CRUD.ErrorMessage;
                                return(JsonConvert.SerializeObject(response));
                            }
                        }
                        else
                        {
                            response.ErrorThrown         = true;
                            response.ResponseDescription = "ERROR: " + rfqCRUD.ErrorMessage;
                            return(JsonConvert.SerializeObject(response));
                        }
                    }

                    DM.CommitTransaction();
                    DM.Close_Open_Connection();

                    if (DM.ErrorOccur)
                    {
                        response.ErrorThrown         = true;
                        response.ResponseDescription = "ERROR: " + DM.Error_Mjs;
                        return(JsonConvert.SerializeObject(response));
                    }
                    resultRFQs.Add(rfq);
                }
            }
        }

        response.ErrorThrown         = false;
        response.ResponseDescription = "RFQs created successfully.";
        response.Result = resultRFQs;
        return(JsonConvert.SerializeObject(response));
    }
示例#11
0
    /// <summary>
    /// Refund button clicked
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Refund_Click(object sender, EventArgs e)
    {
        //retrieve order
        ZNode.Libraries.Admin.OrderAdmin orderAdmin = new ZNode.Libraries.Admin.OrderAdmin();
        Order order = orderAdmin.GetOrderByOrderID(OrderID);
        ZNode.Libraries.Framework.Business.ZNodeEncryption enc = new ZNode.Libraries.Framework.Business.ZNodeEncryption();

        //get payment settings
        int paymentSettingID = (int)order.PaymentSettingID;
        PaymentSettingService pss = new PaymentSettingService();
        PaymentSetting ps = pss.GetByPaymentSettingID(paymentSettingID);

        //set gateway info
        GatewayInfo gi = new GatewayInfo();
        gi.GatewayLoginID = enc.DecryptData(ps.GatewayUsername);
        gi.GatewayPassword = enc.DecryptData(ps.GatewayPassword);
        gi.TransactionKey = enc.DecryptData(ps.TransactionKey);
        gi.Vendor = ps.Vendor;
        gi.Partner = ps.Partner;
        //gi.CurrencyCode = CurrencyCode;
        gi.TestMode = ps.TestMode;
        gi.gateway = (GatewayType)ps.GatewayTypeID ;

        string creditCardExp = Convert.ToString(order.CardExp);
        if (creditCardExp == null)
        {
            creditCardExp = "";
        }

        //set credit card
        CreditCard cc = new CreditCard();
        cc.Amount = Decimal.Parse(txtAmount.Text);
        cc.CardNumber = txtCardNumber.Text.Trim();
        cc.CreditCardExp = creditCardExp;
        cc.OrderID = order.OrderID;
        cc.TransactionID = order.CardTransactionID;

        GatewayResponse resp = new GatewayResponse();

        if ((GatewayType)ps.GatewayTypeID == GatewayType.AUTHORIZE)
        {
            GatewayAuthorize auth = new GatewayAuthorize();
            resp = auth.RefundPayment(gi, cc);
        }
        else if ((GatewayType)ps.GatewayTypeID == GatewayType.VERISIGN)
        {
            GatewayPayFlowPro pp = new GatewayPayFlowPro();
            resp = pp.RefundPayment(gi, cc);
        }
        else if ((GatewayType)ps.GatewayTypeID == GatewayType.PAYMENTECH)
        {
            GatewayOrbital pmt = new GatewayOrbital();
            resp = pmt.ReversePayment(gi, cc);
        }
        else if ((GatewayType)ps.GatewayTypeID == GatewayType.IPCOMMERCE)
        {
            GatewayIPCommerce ipc = new GatewayIPCommerce();
            resp = ipc.RefundPayment(gi, cc);
        }
        else if ((GatewayType)ps.GatewayTypeID == GatewayType.NOVA)
        {
            GatewayNova nova = new GatewayNova();
            cc.CreditCardExp = lstMonth.SelectedValue + "/" + lstYear.SelectedValue;
            cc.CardSecurityCode = txtSecurityCode.Text.Trim();
            gi.TransactionType = "CCCredit";
            resp = nova.RefundPayment(gi, cc);
        }
        else
        {
            lblError.Text = "Error: Credit card refunds and not supported for your gateway.";
            return;
        }

        if (resp.IsSuccess)
        {
            //update order status
            order.OrderStateID = 30; //returned status
            order.PaymentStatusID = 3; //refund status

            OrderService os = new OrderService();
            os.Update(order);

            pnlEdit.Visible = false;
            pnlConfirm.Visible = true;
        }
        else
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append("Could not complete request. The following response was returned by the gateway: ");
            sb.Append(resp.ResponseText);
            lblError.Text = sb.ToString();
        }
    }
示例#12
0
    public string resendRFQ()
    {
        GatewayResponse response = new GatewayResponse();
        String          s;
        RFQ             rfqToResend;

        try
        {
            s           = new StreamReader(Request.InputStream).ReadToEnd();
            rfqToResend = JsonConvert.DeserializeObject <RFQ>(s);
        }
        catch (Exception ex)
        {
            response.ErrorThrown         = true;
            response.ResponseDescription = "ERROR: When trying to parse JSON in server. " + ex.Message;
            return(JsonConvert.SerializeObject(response));
        }

        UserCRUD user_CRUD   = new UserCRUD();
        string   strAuthUser = HttpContext.Current.User.Identity.Name;
        User     user        = user_CRUD.readById(strAuthUser);

        SupplierCRUD supplier_CRUD = new SupplierCRUD();
        Supplier     supplier      = supplier_CRUD.readById(rfqToResend.SupplierId);

        if (supplier != null)
        {
            if (supplier.ContactEmail.Trim() != rfqToResend.LastEmail.Trim())
            {
                supplier.ContactEmail = rfqToResend.LastEmail.Trim();
                if (!supplier_CRUD.update(supplier))
                {
                    response.ErrorThrown         = true;
                    response.ResponseDescription = "ERROR:" + supplier_CRUD.ErrorMessage;
                    return(JsonConvert.SerializeObject(response));
                }
            }
        }

        TokenCRUD token_CRUD = new TokenCRUD();
        Token     token      = token_CRUD.readByRFQ(rfqToResend);

        ConnectionManager CM = new ConnectionManager();

        Data_Base_MNG.SQL DM = CM.getDataManager();

        /*Begin Transaction*/
        DM.Open_Connection("RFQ Re-send");

        rfqToResend.SentToVendor = DateTime.Now;
        if (!rfq_CRUD.update(rfqToResend, ref DM))
        {
            response.ErrorThrown         = true;
            response.ResponseDescription = "ERROR:" + rfq_CRUD.ErrorMessage;
            return(JsonConvert.SerializeObject(response));
        }

        if (token == null)
        {
            token             = new Token();
            token.Subject     = "RFQ";
            token.SubjectKey  = rfqToResend.Id;
            token.TokenNumber = MD5HashGenerator.GenerateKey(DateTime.Now);
            token_CRUD.create(token, ref DM);
            if (token_CRUD.ErrorOccur)
            {
                response.ErrorThrown         = true;
                response.ResponseDescription = "ERROR:" + token_CRUD.ErrorMessage;
                return(JsonConvert.SerializeObject(response));
            }
        }


        Email       NewMail = new Email();
        MailMessage Message = new MailMessage();

        try
        {
            Message.From = new MailAddress("*****@*****.**", "*****@*****.**");
            Message.To.Add(new MailAddress(supplier.ContactEmail.ToString()));
            Message.Subject      = "Request For Quote";
            Message.IsBodyHtml   = true;
            Message.BodyEncoding = System.Text.Encoding.UTF8;

            var url             = ResolveUrl("~/Vendor/Email_RFQ_Request.htm");
            var strEmailContent = HTMLContent(url);
            strEmailContent = strEmailContent.Replace("{BuyerName}", user.Name);
            strEmailContent = strEmailContent.Replace("{BuyerPhone}", user.Phone1);
            strEmailContent = strEmailContent.Replace("{BuyerEmail}", user.Email);
            strEmailContent = strEmailContent.Replace("{RFQ Number}", rfqToResend.RfqGenerated);
            strEmailContent = strEmailContent.Replace("{Part Number}", rfqToResend.PartNumber);
            strEmailContent = strEmailContent.Replace("{RFQLink}", "http://" + Request.Url.Authority + Request.ApplicationPath + "/Vendor/RFQHandler.ashx?token=" + token.TokenNumber);

            Message.Body = strEmailContent;


            NewMail.SendMail(Message);
        }
        catch (Exception ex)
        {
            DM.RollBack();
            response.ErrorThrown         = true;
            response.ResponseDescription = "ERROR: Could not send email to: " + supplier.ContactEmail.ToString();
            return(JsonConvert.SerializeObject(response));
        }

        DM.CommitTransaction();
        DM.Close_Open_Connection();

        if (DM.ErrorOccur)
        {
            response.ErrorThrown         = true;
            response.ResponseDescription = "ERROR:" + DM.Error_Mjs;
            return(JsonConvert.SerializeObject(response));
        }

        response.ErrorThrown         = false;
        response.ResponseDescription = "RFQ " + rfqToResend.RfqGenerated + " re-sent successfully.";
        response.Result = rfqToResend;
        return(JsonConvert.SerializeObject(response));
    }
示例#13
0
 internal static T Deserialize <T>(this GatewayResponse response)
 {
     return(response.Data.ToString().Deserialize <T>());
 }
 public Task RegisterResponse(GatewayResponse response)
 {
     responses.Add(response);
     return(Task.CompletedTask);
 }
示例#15
0
    public void ProcessRequest(HttpContext context)
    {
        var ThisCustomer = ((InterpriseSuiteEcommercePrincipal)context.User).ThisCustomer;

        var m_PayPalExpress = new PayPalExpress();
        //Get PayPal info
        var PayPalDetails         = m_PayPalExpress.GetExpressCheckoutDetails(context.Request.QueryString["token"]).GetExpressCheckoutDetailsResponseDetails;
        var paypalShippingAddress = Address.New(ThisCustomer, AddressTypes.Shipping);

        if (PayPalDetails.PayerInfo.Address.Name.IsNullOrEmptyTrimmed() && (PayPalDetails.PayerInfo.Address.Street1.IsNullOrEmptyTrimmed() || PayPalDetails.PayerInfo.Address.Street2.IsNullOrEmptyTrimmed()) &&
            PayPalDetails.PayerInfo.Address.CityName.IsNullOrEmptyTrimmed() && PayPalDetails.PayerInfo.Address.StateOrProvince.IsNullOrEmptyTrimmed() && PayPalDetails.PayerInfo.Address.PostalCode.IsNullOrEmptyTrimmed() &&
            PayPalDetails.PayerInfo.Address.CountryName.ToString().IsNullOrEmptyTrimmed() || PayPalDetails.PayerInfo.ContactPhone.IsNullOrEmptyTrimmed())
        {
            paypalShippingAddress = ThisCustomer.PrimaryShippingAddress;
        }
        else
        {
            string streetAddress = PayPalDetails.PayerInfo.Address.Street1 + (!PayPalDetails.PayerInfo.Address.Street2.IsNullOrEmptyTrimmed() ? Environment.NewLine : String.Empty) + PayPalDetails.PayerInfo.Address.Street2;
            string sql           = String.Empty;
            if (ThisCustomer.IsRegistered)
            {
                sql = String.Format("SELECT COUNT(ShipToCode) AS N FROM CustomerShipTo where Address = {0} and City = {1} and State = {2} and PostalCode = {3} and Country = {4} and ShipToName = {5} and CustomerCode = {6}",
                                    streetAddress.ToDbQuote(), PayPalDetails.PayerInfo.Address.CityName.ToDbQuote(), PayPalDetails.PayerInfo.Address.StateOrProvince.ToDbQuote(), PayPalDetails.PayerInfo.Address.PostalCode.ToDbQuote(),
                                    AppLogic.ResolvePayPalAddressCode(PayPalDetails.PayerInfo.Address.CountryName).ToString().ToDbQuote(), PayPalDetails.PayerInfo.Address.Name.ToDbQuote(), ThisCustomer.CustomerCode.ToDbQuote());
            }
            else
            {
                sql = String.Format("SELECT COUNT(1) AS N FROM EcommerceAddress where ShipToAddress = {0} and ShipToCity = {1} and ShipToState = {2} and ShipToPostalCode = {3} and ShipToCountry = {4} and ShipToName = {5} and CustomerID = {6}",
                                    streetAddress.ToDbQuote(), PayPalDetails.PayerInfo.Address.CityName.ToDbQuote(), PayPalDetails.PayerInfo.Address.StateOrProvince.ToDbQuote(), PayPalDetails.PayerInfo.Address.PostalCode.ToDbQuote(),
                                    AppLogic.ResolvePayPalAddressCode(PayPalDetails.PayerInfo.Address.CountryName).ToString().ToDbQuote(), PayPalDetails.PayerInfo.Address.Name.ToDbQuote(), ThisCustomer.CustomerCode.ToDbQuote());

                paypalShippingAddress.EMail      = ThisCustomer.IsRegistered ? ThisCustomer.EMail : ThisCustomer.GetAnonEmail();
                paypalShippingAddress.Name       = PayPalDetails.PayerInfo.Address.Name;
                paypalShippingAddress.Address1   = PayPalDetails.PayerInfo.Address.Street1 + (PayPalDetails.PayerInfo.Address.Street2 != String.Empty ? Environment.NewLine : String.Empty) + PayPalDetails.PayerInfo.Address.Street2;
                paypalShippingAddress.City       = PayPalDetails.PayerInfo.Address.CityName;
                paypalShippingAddress.State      = PayPalDetails.PayerInfo.Address.StateOrProvince;
                paypalShippingAddress.PostalCode = PayPalDetails.PayerInfo.Address.PostalCode;
                paypalShippingAddress.Country    = AppLogic.ResolvePayPalAddressCode(PayPalDetails.PayerInfo.Address.CountryName.ToString());
                paypalShippingAddress.Phone      = PayPalDetails.PayerInfo.ContactPhone ?? String.Empty;
            }

            int isAddressExists = DB.GetSqlN(sql);

            if (AppLogic.AppConfigBool("PayPalCheckout.RequireConfirmedAddress") || isAddressExists == 0)
            {
                ServiceFactory.GetInstance <ICustomerService>().UpdateCustomerNotesWhenPaypalAddressIsUsed();
            }
        }

        ThisCustomer.PrimaryShippingAddress = paypalShippingAddress;
        paypalShippingAddress.Save();

        string redirectUrl = String.Empty;

        //Checking for redirectURL of PayPal -- Express Checkout button in Shopping Cart page or PayPal Radio Button in Payment Page
        if (Customer.Current.ThisCustomerSession["paypalfrom"] == "shoppingcart" || Customer.Current.ThisCustomerSession["paypalfrom"] == "checkoutanon")
        {
            redirectUrl = "checkoutshipping.aspx?PayPal=True&token=" + context.Request.QueryString["token"];
        }
        else
        {
            if (AppLogic.AppConfigBool("Checkout.UseOnePageCheckout"))
            {
                if (!AppLogic.AppConfigBool("Checkout.UseOnePageCheckout.UseFinalReviewOrderPage"))
                {
                    //Insert PayPal call here for response - For authorize and capture of order from paypal inside IS
                    ThisCustomer.ThisCustomerSession["paypalfrom"] = "onepagecheckout";
                    string  OrderNumber     = String.Empty;
                    string  status          = String.Empty;
                    string  receiptCode     = String.Empty;
                    var     billingAddress  = ThisCustomer.PrimaryBillingAddress;
                    Address shippingAddress = null;
                    var     cart            = new InterpriseShoppingCart(null, ThisCustomer.SkinID, ThisCustomer, CartTypeEnum.ShoppingCart, String.Empty, false, true);
                    if (cart.IsNoShippingRequired())
                    {
                        cart.BuildSalesOrderDetails(false, true);
                    }
                    else
                    {
                        cart.BuildSalesOrderDetails();
                    }

                    if (!AppLogic.AppConfigBool("PayPalCheckout.OverrideAddress"))
                    {
                        if (!cart.HasShippableComponents())
                        {
                            shippingAddress = ThisCustomer.PrimaryShippingAddress;
                        }
                        else
                        {
                            if (ThisCustomer.IsRegistered)
                            {
                                var GetShippingAddress = new Address()
                                {
                                    Name           = PayPalDetails.PayerInfo.Address.Name,
                                    Address1       = PayPalDetails.PayerInfo.Address.Street1 + (PayPalDetails.PayerInfo.Address.Street2 != String.Empty ? Environment.NewLine : String.Empty) + PayPalDetails.PayerInfo.Address.Street2,
                                    City           = PayPalDetails.PayerInfo.Address.CityName,
                                    State          = PayPalDetails.PayerInfo.Address.StateOrProvince,
                                    PostalCode     = PayPalDetails.PayerInfo.Address.PostalCode,
                                    Country        = AppLogic.ResolvePayPalAddressCode(PayPalDetails.PayerInfo.Address.CountryName.ToString()),
                                    CountryISOCode = AppLogic.ResolvePayPalAddressCode(PayPalDetails.PayerInfo.Address.Country.ToString()),
                                    Phone          = PayPalDetails.PayerInfo.ContactPhone ?? String.Empty
                                };
                                shippingAddress = GetShippingAddress;
                            }
                            else
                            {
                                shippingAddress = paypalShippingAddress;
                            }
                        }
                    }

                    var    doExpressCheckoutResp = m_PayPalExpress.DoExpressCheckoutPayment(PayPalDetails.Token, PayPalDetails.PayerInfo.PayerID, OrderNumber, cart);
                    string result = String.Empty;
                    if (doExpressCheckoutResp.Errors != null && !doExpressCheckoutResp.Errors[0].ErrorCode.IsNullOrEmptyTrimmed())
                    {
                        if (AppLogic.AppConfigBool("ShowGatewayError"))
                        {
                            result = String.Format(AppLogic.GetString("shoppingcart.aspx.27", ThisCustomer.SkinID, ThisCustomer.LocaleSetting), doExpressCheckoutResp.Errors[0].ErrorCode, doExpressCheckoutResp.Errors[0].LongMessage);
                        }
                        else
                        {
                            result = AppLogic.GetString("shoppingcart.aspx.28", ThisCustomer.SkinID, ThisCustomer.LocaleSetting);
                        }

                        context.Response.Redirect("shoppingcart.aspx?ErrorMsg=" + result.ToUrlEncode(), false);
                        return;
                    }
                    else
                    {
                        Gateway gatewayToUse = null;
                        var     payPalResp   = new GatewayResponse(String.Empty)
                        {
                            AuthorizationCode    = doExpressCheckoutResp.DoExpressCheckoutPaymentResponseDetails.PaymentInfo[0].TransactionID,
                            TransactionResponse  = doExpressCheckoutResp.DoExpressCheckoutPaymentResponseDetails.PaymentInfo[0].PaymentStatus.ToString(),
                            Details              = doExpressCheckoutResp.DoExpressCheckoutPaymentResponseDetails.PaymentInfo[0].PaymentStatus.ToString(),
                            AuthorizationTransID = doExpressCheckoutResp.DoExpressCheckoutPaymentResponseDetails.PaymentInfo[0].TransactionID
                        };

                        InterpriseHelper.UpdateCustomerPaymentTerm(ThisCustomer, DomainConstants.PAYMENT_METHOD_CREDITCARD);
                        status = cart.PlaceOrder(gatewayToUse, billingAddress, shippingAddress, ref OrderNumber, ref receiptCode, true, true, payPalResp, true, false);

                        if (status != AppLogic.ro_OK)
                        {
                            ThisCustomer.IncrementFailedTransactionCount();
                            if (ThisCustomer.FailedTransactionCount >= AppLogic.AppConfigUSInt("MaxFailedTransactionCount"))
                            {
                                cart.ClearTransaction();
                                ThisCustomer.ResetFailedTransactionCount();
                                context.Response.Redirect("orderfailed.aspx");
                            }
                            ThisCustomer.ClearTransactions(false);
                            context.Response.Redirect("checkout1.aspx?paymentterm=" + ThisCustomer.PaymentTermCode + "&errormsg=" + status.ToUrlEncode());
                        }

                        AppLogic.ClearCardNumberInSession(ThisCustomer);
                        ThisCustomer.ClearTransactions(true);

                        context.Response.Redirect(String.Format("orderconfirmation.aspx?ordernumber={0}", OrderNumber.ToUrlEncode()));
                    }
                }
                else
                {
                    InterpriseHelper.UpdateCustomerPaymentTerm(ThisCustomer, DomainConstants.PAYMENT_METHOD_CREDITCARD);
                    redirectUrl = "checkoutreview.aspx?PayPal=True&token=" + context.Request.QueryString["token"];
                }
            }
            else
            {
                InterpriseHelper.UpdateCustomerPaymentTerm(ThisCustomer, DomainConstants.PAYMENT_METHOD_CREDITCARD);
                redirectUrl = "checkoutreview.aspx?PayPal=True&token=" + context.Request.QueryString["token"];
            }
        }

        context.Response.Redirect(redirectUrl);
    }
 private static string getAvsResponse(GatewayResponse response)
 {
     return(response.AVSResponse);
 }
示例#17
0
 internal static T DeserializeEx <T>(this GatewayResponse response) where T : ControllableEx
 {
     return(response.Data.ToString().DeserializeEx <T>());
 }
示例#18
0
    /// <summary>
    /// Refund button clicked
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Capture_Click(object sender, EventArgs e)
    {
        //retrieve order
        ZNode.Libraries.Admin.OrderAdmin orderAdmin = new ZNode.Libraries.Admin.OrderAdmin();
        Order order = orderAdmin.GetOrderByOrderID(OrderID);
        ZNode.Libraries.Framework.Business.ZNodeEncryption enc = new ZNode.Libraries.Framework.Business.ZNodeEncryption();

        //get payment settings
        int paymentSettingID = (int)order.PaymentSettingID;
        PaymentSettingService pss = new PaymentSettingService();
        PaymentSetting ps = pss.GetByPaymentSettingID(paymentSettingID);

        //set gateway info
        GatewayInfo gi = new GatewayInfo();
        gi.GatewayLoginID = enc.DecryptData(ps.GatewayUsername);
        gi.GatewayPassword = enc.DecryptData(ps.GatewayPassword);
        gi.TransactionKey = enc.DecryptData(ps.TransactionKey);
        gi.Vendor = ps.Vendor;
        gi.Partner = ps.Partner;
        gi.TestMode = ps.TestMode;
        gi.gateway = (GatewayType)ps.GatewayTypeID ;

        string creditCardExp = Convert.ToString(order.CardExp);
        if (creditCardExp == null)
        {
            creditCardExp = "";
        }

        //set credit card
        CreditCard cc = new CreditCard();
        cc.CreditCardExp = creditCardExp;
        cc.OrderID = order.OrderID;
        cc.TransactionID = order.CardTransactionID;

        GatewayResponse resp = new GatewayResponse();

        if ((GatewayType)ps.GatewayTypeID == GatewayType.AUTHORIZE)
        {
            GatewayAuthorize auth = new GatewayAuthorize();
            resp = auth.CapturePayment(gi, cc);
        }
        else if ((GatewayType)ps.GatewayTypeID == GatewayType.VERISIGN)
        {
            GatewayPayFlowPro pp = new GatewayPayFlowPro();
            resp = pp.CapturePayment(gi, cc);
        }
        else if ((GatewayType)ps.GatewayTypeID == GatewayType.PAYMENTECH)
        {
            GatewayOrbital pmt = new GatewayOrbital();
            resp = pmt.CapturePayment(gi, cc);
        }
        else
        {
            lblError.Text = "Error: Credit card payment capture is not supported for your gateway.";

        }

        if (resp.IsSuccess)
        {
            //update order status
            order.PaymentStatusID = 1; //refund status

            OrderService os = new OrderService();
            os.Update(order);

            pnlEdit.Visible = false;
            pnlConfirm.Visible = true;
        }
        else
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append("Could not complete request. The following response was returned by the gateway: ");
            sb.Append(resp.ResponseText);
            lblError.Text = sb.ToString();
        }
    }
示例#19
0
        private void ProcessCheckout()
        {
            string OrderNumber = string.Empty;

            // ----------------------------------------------------------------
            // Process The Order:
            // ----------------------------------------------------------------
            if (string.IsNullOrEmpty(ThisCustomer.PaymentTermCode))
            {
                Response.Redirect("checkoutpayment.aspx?errormsg=" + Server.UrlEncode(AppLogic.GetString("checkoutpayment.aspx.7", ThisCustomer.SkinID, ThisCustomer.LocaleSetting)));
            }
            else
            {
                string receiptCode = string.Empty;
                string status = string.Empty, multiorder = string.Empty;
                if (cart.HasMultipleShippingAddresses())        // Paypal will never hit this
                {
                    var  splittedCarts     = cart.SplitIntoMultipleOrdersByDifferentShipToAddresses();
                    bool gatewayAuthFailed = false;

                    for (int ctr = 0; ctr < splittedCarts.Count; ctr++)
                    {
                        var splitCart = splittedCarts[ctr];
                        splitCart.BuildSalesOrderDetails();

                        var shippingAddress = Address.Get(ThisCustomer, AddressTypes.Shipping, splitCart.FirstItem().m_ShippingAddressID);

                        string processedSalesOrderCode = string.Empty;
                        string processedReceiptCode    = string.Empty;
                        // NOTE:
                        //  3DSecure using Sagepay Gateway is not supported on multiple shipping orders
                        //  We will revert to the regular IS gateway defined on the WebStore
                        status = splitCart.PlaceOrder(null,
                                                      ThisCustomer.PrimaryBillingAddress,
                                                      shippingAddress,
                                                      ref processedSalesOrderCode,
                                                      ref processedReceiptCode,
                                                      false,
                                                      true,
                                                      false);

                        OrderNumber = processedSalesOrderCode;
                        receiptCode = processedReceiptCode;

                        if (status == AppLogic.ro_INTERPRISE_GATEWAY_AUTHORIZATION_FAILED)
                        {
                            gatewayAuthFailed = true;

                            if (ctr == 0)
                            {
                                ThisCustomer.IncrementFailedTransactionCount();
                                if (ThisCustomer.FailedTransactionCount >= AppLogic.AppConfigUSInt("MaxFailedTransactionCount"))
                                {
                                    cart.ClearTransaction();
                                    ThisCustomer.ResetFailedTransactionCount();
                                    Response.Redirect("orderfailed.aspx");
                                }

                                ThisCustomer.ClearTransactions(false);

                                if (AppLogic.AppConfigBool("Checkout.UseOnePageCheckout"))
                                {
                                    Response.Redirect("checkout1.aspx?paymentterm=" + ThisCustomer.PaymentTermCode + "&errormsg=" + Server.UrlEncode(status));
                                }
                                else
                                {
                                    Response.Redirect("checkoutpayment.aspx?paymentterm=" + ThisCustomer.PaymentTermCode + "&errormsg=" + Server.UrlEncode(status));
                                }
                            }
                        }

                        // NOTE :
                        //  Should handle cases when 1 or more orders failed the payment processor
                        //  if using a payment gateway on credit card
                        multiorder = multiorder + "," + OrderNumber;
                    }

                    if (multiorder != string.Empty)
                    {
                        OrderNumber = multiorder.Remove(0, 1);
                    }

                    if (!gatewayAuthFailed)
                    {
                        cart.ClearTransaction();
                    }
                }
                else
                {
                    var     billingAddress  = ThisCustomer.PrimaryBillingAddress;
                    Address shippingAddress = null;

                    //added for PayPal ADDRESSOVERRIDE
                    if (IsPayPalCheckout && !AppLogic.AppConfigBool("PayPalCheckout.OverrideAddress"))
                    {
                        if (!cart.HasShippableComponents())
                        {
                            shippingAddress = ThisCustomer.PrimaryShippingAddress;
                        }
                        else
                        {
                            pp = new PayPalExpress();
                            var GetPayPalDetails = pp.GetExpressCheckoutDetails(Request.QueryString["token"]).GetExpressCheckoutDetailsResponseDetails;
                            shippingAddress = new Address()
                            {
                                Name           = GetPayPalDetails.PayerInfo.Address.Name,
                                Address1       = GetPayPalDetails.PayerInfo.Address.Street1 + (GetPayPalDetails.PayerInfo.Address.Street2 != String.Empty ? Environment.NewLine : String.Empty) + GetPayPalDetails.PayerInfo.Address.Street2,
                                City           = GetPayPalDetails.PayerInfo.Address.CityName,
                                State          = GetPayPalDetails.PayerInfo.Address.StateOrProvince,
                                PostalCode     = GetPayPalDetails.PayerInfo.Address.PostalCode,
                                Country        = AppLogic.ResolvePayPalAddressCode(GetPayPalDetails.PayerInfo.Address.CountryName.ToString()),
                                CountryISOCode = AppLogic.ResolvePayPalAddressCode(GetPayPalDetails.PayerInfo.Address.Country.ToString()),
                                Phone          = GetPayPalDetails.PayerInfo.ContactPhone
                            };
                        }
                    }
                    else
                    {
                        // Handle the scenario wherein the items in the cart
                        // does not ship to the customer's primary shipping address
                        if (cart.OnlyShippingAddressIsNotCustomerDefault())
                        {
                            shippingAddress = Address.Get(ThisCustomer, AddressTypes.Shipping, cart.FirstItem().m_ShippingAddressID);
                        }
                        else
                        {
                            shippingAddress = ThisCustomer.PrimaryShippingAddress;
                        }
                    }

                    if (!cart.IsSalesOrderDetailBuilt)
                    {
                        cart.BuildSalesOrderDetails();
                    }

                    Gateway gatewayToUse = null;

                    try
                    {
                        if (IsPayPalCheckout)
                        {
                            //Insert PayPal call here for response - For authorize and capture of order from paypal inside IS
                            pp = new PayPalExpress();
                            var PayPalDetails         = pp.GetExpressCheckoutDetails(Request.QueryString["token"]).GetExpressCheckoutDetailsResponseDetails;
                            var doExpressCheckoutResp = pp.DoExpressCheckoutPayment(PayPalDetails.Token, PayPalDetails.PayerInfo.PayerID, OrderNumber, cart);
                            var payPalResp            = new GatewayResponse(string.Empty)
                            {
                                AuthorizationCode    = doExpressCheckoutResp.DoExpressCheckoutPaymentResponseDetails.PaymentInfo[0].TransactionID,
                                TransactionResponse  = doExpressCheckoutResp.DoExpressCheckoutPaymentResponseDetails.PaymentInfo[0].PaymentStatus.ToString(),
                                Details              = doExpressCheckoutResp.DoExpressCheckoutPaymentResponseDetails.PaymentInfo[0].PaymentStatus.ToString(),
                                AuthorizationTransID = doExpressCheckoutResp.DoExpressCheckoutPaymentResponseDetails.PaymentInfo[0].TransactionID
                            };

                            status = cart.PlaceOrder(gatewayToUse, billingAddress, shippingAddress, ref OrderNumber, ref receiptCode, true, true, payPalResp, IsPayPalCheckout, false);
                        }
                        else
                        {
                            status = cart.PlaceOrder(gatewayToUse, billingAddress, shippingAddress, ref OrderNumber, ref receiptCode, true, true, null, !IsPayPalCheckout, false);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (ex.Message == "Unable to instantiate Default Credit Card Gateway")
                        {
                            cart.ClearLineItems();
                            Response.Redirect("pageError.aspx?Parameter=" + "An Error Occured while Authorizing your Credit Card, However your order has been Placed.");
                        }
                        Response.Redirect("pageError.aspx?Parameter=" + Server.UrlEncode(ex.Message));
                    }

                    if (status == AppLogic.ro_3DSecure)
                    { // If credit card is enrolled in a 3D Secure service (Verified by Visa, etc.)
                        Response.Redirect("secureform.aspx");
                    }

                    if (status != AppLogic.ro_OK)
                    {
                        ThisCustomer.IncrementFailedTransactionCount();
                        if (ThisCustomer.FailedTransactionCount >= AppLogic.AppConfigUSInt("MaxFailedTransactionCount"))
                        {
                            cart.ClearTransaction();
                            ThisCustomer.ResetFailedTransactionCount();
                            Response.Redirect("orderfailed.aspx");
                        }

                        ThisCustomer.ClearTransactions(false);

                        if (AppLogic.AppConfigBool("Checkout.UseOnePageCheckout"))
                        {
                            Response.Redirect("checkout1.aspx?paymentterm=" + ThisCustomer.PaymentTermCode + "&errormsg=" + Server.UrlEncode(status));
                        }
                        else
                        {
                            Response.Redirect("checkoutpayment.aspx?paymentterm=" + ThisCustomer.PaymentTermCode + "&errormsg=" + Server.UrlEncode(status));
                        }
                    }
                }
            }
            AppLogic.ClearCardNumberInSession(ThisCustomer);
            ThisCustomer.ClearTransactions(true);

            if (!_PayPalFailed)
            {
                Response.Redirect(string.Format("orderconfirmation.aspx?ordernumber={0}", Server.UrlEncode(OrderNumber)));
            }
        }
        private IGatewayResponse SendUpdateSubscriptionRequest(AuthorizeDotNetRequest request)
        {
            var result = string.Empty;
            IGatewayResponse gatewayResponse = null;

            long id = long.Parse(request.KeyValues[AuthorizeDotNetApi.SubscriptionID]);

            var authentication = new MerchantAuthenticationType();

            authentication.name           = request.KeyValues[AuthorizeDotNetApi.ApiLogin];
            authentication.transactionKey = request.KeyValues[AuthorizeDotNetApi.TransactionKey];

            //do required first
            ARBSubscriptionType subscription = new ARBSubscriptionType();

            subscription.amount          = decimal.Parse(request.KeyValues[AuthorizeDotNetApi.Amount]);
            subscription.amountSpecified = true;
            subscription.name            = request.KeyValues[AuthorizeDotNetApi.SubscriptionName];

            PaymentType payment    = new PaymentType();
            var         creditCard = new CreditCardType();

            creditCard.cardCode       = request.KeyValues[AuthorizeDotNetApi.CreditCardCode];
            creditCard.cardNumber     = request.KeyValues[AuthorizeDotNetApi.CreditCardNumber];
            creditCard.expirationDate = request.KeyValues[AuthorizeDotNetApi.CreditCardExpiration];
            payment.Item         = creditCard;
            subscription.payment = payment;

            CustomerType customer = new CustomerType();

            customer.id = request.KeyValues[AuthorizeDotNetApi.CustomerId];
            if (request.KeyValues.ContainsKey(AuthorizeDotNetApi.Fax))
            {
                customer.email = request.KeyValues[AuthorizeDotNetApi.Email];
            }
            if (request.KeyValues.ContainsKey(AuthorizeDotNetApi.Fax))
            {
                customer.faxNumber = request.KeyValues[AuthorizeDotNetApi.Fax];
            }
            if (request.KeyValues.ContainsKey(AuthorizeDotNetApi.Phone))
            {
                customer.phoneNumber = request.KeyValues[AuthorizeDotNetApi.Phone];
            }
            //customer.type = CustomerTypeEnum.individual;
            customer.typeSpecified = false;
            //customer.taxId = request.KeyValues[AuthorizeDotNetApi.t];
            //customer.driversLicense = request.KeyValues[AuthorizeDotNetApi.];
            subscription.customer = customer;

            if (request.KeyValues.ContainsKey(AuthorizeDotNetApi.Address))
            {
                NameAndAddressType customerBilling = new NameAndAddressType();
                customerBilling.address = request.KeyValues[AuthorizeDotNetApi.Address];
                customerBilling.city    = request.KeyValues[AuthorizeDotNetApi.City];
                if (request.KeyValues.ContainsKey(AuthorizeDotNetApi.Company))
                {
                    customerBilling.company = request.KeyValues[AuthorizeDotNetApi.Company];
                }
                if (request.KeyValues.ContainsKey(AuthorizeDotNetApi.Country))
                {
                    customerBilling.country = request.KeyValues[AuthorizeDotNetApi.Country];
                }
                customerBilling.firstName = request.KeyValues[AuthorizeDotNetApi.FirstName];
                customerBilling.lastName  = request.KeyValues[AuthorizeDotNetApi.LastName];
                customerBilling.state     = request.KeyValues[AuthorizeDotNetApi.State];
                customerBilling.zip       = request.KeyValues[AuthorizeDotNetApi.Zip];
                subscription.billTo       = customerBilling;
            }

            if (request.KeyValues.ContainsKey(AuthorizeDotNetApi.ShipAddress))
            {
                NameAndAddressType shipping = new NameAndAddressType();
                shipping.address = request.KeyValues[AuthorizeDotNetApi.ShipAddress];
                shipping.city    = request.KeyValues[AuthorizeDotNetApi.ShipCity];
                if (request.KeyValues.ContainsKey(AuthorizeDotNetApi.ShipCompany))
                {
                    shipping.company = request.KeyValues[AuthorizeDotNetApi.ShipCompany];
                }
                if (request.KeyValues.ContainsKey(AuthorizeDotNetApi.ShipCountry))
                {
                    shipping.country = request.KeyValues[AuthorizeDotNetApi.ShipCountry];
                }
                shipping.firstName  = request.KeyValues[AuthorizeDotNetApi.ShipFirstName];
                shipping.lastName   = request.KeyValues[AuthorizeDotNetApi.ShipLastName];
                shipping.state      = request.KeyValues[AuthorizeDotNetApi.ShipState];
                shipping.zip        = request.KeyValues[AuthorizeDotNetApi.ShipZip];
                subscription.shipTo = shipping;
            }

            if (request.KeyValues.ContainsKey(AuthorizeDotNetApi.InvoiceNumber))
            {
                OrderType order = new OrderType();
                order.invoiceNumber = request.KeyValues[AuthorizeDotNetApi.InvoiceNumber];
                subscription.order  = order;
            }


            //PaymentScheduleType paymentSchedule = new PaymentScheduleType();
            //PaymentScheduleTypeInterval paymentScheduleTypeInterval = new PaymentScheduleTypeInterval();
            //paymentScheduleTypeInterval.length = short.Parse(request.KeyValues[AuthorizeDotNetApi.BillingCycles]);
            //paymentScheduleTypeInterval.unit = (ARBSubscriptionUnitEnum)Enum.Parse(typeof(ARBSubscriptionUnitEnum), request.KeyValues[AuthorizeDotNetApi.BillingInterval], true);
            //paymentSchedule.interval = paymentScheduleTypeInterval;
            //paymentSchedule.startDate = DateTime.Parse(request.KeyValues[AuthorizeDotNetApi.StartsOn].ToString());
            //paymentSchedule.startDateSpecified = true;
            //paymentSchedule.totalOccurrencesSpecified = true;
            //paymentSchedule.totalOccurrences = short.Parse(request.KeyValues[AuthorizeDotNetApi.TotalOccurences].ToString());
            //paymentSchedule.trialOccurrencesSpecified = false;

            subscription.trialAmountSpecified = false;


            if (request.KeyValues.ContainsKey(AuthorizeDotNetApi.TrialAmount))
            {
                subscription.trialAmount          = decimal.Parse(request.KeyValues[AuthorizeDotNetApi.TrialAmount]);
                subscription.trialAmountSpecified = true;
                //paymentSchedule.trialOccurrences = short.Parse(request.KeyValues[AuthorizeDotNetApi.TrialBillingCycles]);
                //paymentSchedule.trialOccurrencesSpecified = true;
            }

            //authorize does not allow us to update intervals...
            //subscription.paymentSchedule = paymentSchedule;

            using (var webService = new RevStack.AuthorizeDotNet.net.authorize.api.Service())
            {
                webService.Url = request.PostUrl;
                var response = webService.ARBUpdateSubscription(authentication, id, subscription, null);

                if (response.resultCode != MessageTypeEnum.Ok)
                {
                    char           del  = request.KeyValues[AuthorizeDotNetApi.DelimitCharacter].ToCharArray()[0];
                    IList <string> list = new List <string>();

                    for (int i = 0; i < response.messages.Length; i++)
                    {
                        result += response.messages[i].text + del;
                        list.Add(response.messages[i].text);
                    }

                    result          = result.TrimEnd(del);
                    gatewayResponse = new GatewayResponse(result, del);
                    gatewayResponse.SubscriptionResponse = list;
                }
                else
                {
                    IList <string> list = new List <string>();

                    for (int i = 0; i < response.messages.Length; i++)
                    {
                        list.Add(response.messages[i].text);
                    }

                    gatewayResponse = new GatewayResponse(id.ToString());
                    gatewayResponse.SubscriptionResponse = list;
                }

                //if (response.resultCode == MessageTypeEnum.Ok)
                //{
                //    char del = request.KeyValues[AuthorizeDotNetApi.DelimitCharacter].ToCharArray()[0];

                //    for (int i = 0; i < response.messages.Length; i++)
                //    {
                //        result = response.messages[i].text + del;
                //    }

                //    result = result.TrimEnd(del);
                //    gatewayResponse = new AuthorizeDotNetResponse(result, del);
                //    gatewayResponse.SubscriptionId = id.ToString();
                //}
            }

            return(gatewayResponse);
        }