Пример #1
0
        public eGatewayResponse SubmitTransaction(string username, TransactionDetails details,
                                                  string description)
        {
            string requestID = PayflowUtility.RequestId;

            string user = PayflowUtility.AppSettings("PayflowUser"); 
            string vendor = PayflowUtility.AppSettings("PayflowVendor");
            string partner = PayflowUtility.AppSettings("PayflowPartner");
            string password = PayflowUtility.AppSettings("PayflowPassword");

            UserInfo userInfo = new UserInfo(user, vendor, partner, password);
            
            bool testServer;
            if (!Boolean.TryParse(PayflowUtility.AppSettings("PayflowTestServer"), out testServer))
                return eGatewayResponse.Error;
            
            string certPath = AppDomain.CurrentDomain.BaseDirectory;
            certPath += testServer ? @"bin\testcerts" : @"bin\certs";

            string host = PayflowUtility.AppSettings("PAYFLOW_HOST");

            PayflowConnectionData connection = new PayflowConnectionData(host, certPath);

            Invoice inv = new Invoice();

            string currency = PayflowUtility.AppSettings("PayflowCurrency");
            Currency amt = new Currency(details.Amount, currency);
            amt.Round = true;
            
            inv.Amt = amt;
            inv.CustRef = username;
            inv.Comment1 = username;

            BillTo bill = new BillTo();

            bill.FirstName = details.FirstName;
            bill.LastName = details.LastName;
            bill.Zip = details.Zip;
            bill.City = details.City;
            bill.State = details.State;
            bill.Street = details.Address;
            bill.PhoneNum = details.Phone;
            bill.BillToCountry = details.Country;
            
            inv.BillTo = bill;

            string cardNumber = details.CardNumber.Replace("-", String.Empty);
            
            string expMonth = details.CardExpirationMonth.ToString();
            if (expMonth.Length == 1)
                expMonth = "0" + expMonth;
            
            string expYear = details.CardExpirationYear.ToString();
            expYear = expYear.Substring(expYear.Length - 2);
            
            CreditCard cc = new CreditCard(cardNumber, expMonth + expYear);
            CardTender card = new CardTender(cc);

            SaleTransaction trans = new SaleTransaction(userInfo, connection, inv, card, requestID);

            trans.Verbosity = "MEDIUM";

            Response resp = trans.SubmitTransaction();
            if (resp != null)
            {
                Global.Logger.LogInfo("PayflowPro_SubmitTransaction_Request", resp.RequestString);
                Global.Logger.LogInfo("PayflowPro_SubmitTransaction_Response", resp.ResponseString);
                Global.Logger.LogInfo("PayflowPro_SubmitTransaction_Response_Normalized", resp.TransactionResponse.RespMsg);
                
                if (resp.TransactionResponse.Result == 0)
                {
                    int paymentHistoryID = Payments.SavePaymentHistory(username, "PayflowPro", details.Amount, description, resp.TransactionResponse.RespMsg, 1);

                    AffiliateCommission.ApplyCommission(username, paymentHistoryID, details.Amount, resp.TransactionResponse.RespMsg);

                    return eGatewayResponse.Approved;
                }
                else
                {
                    Payments.SavePaymentHistory(username, "PayflowPro", details.Amount, description, resp.TransactionResponse.RespMsg, 2);
                    return eGatewayResponse.Error;
                }
            }
            
            return eGatewayResponse.Error;
        }
Пример #2
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DORecurringModify.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();

            RecurringInfo RecurInfo = new RecurringInfo();

            RecurInfo.OrigProfileId = "<PROFILE_ID>";              // RT0000001350
            RecurInfo.ProfileName   = "<PROFILE_NAME>";            // Test_Profile

            // Create a new Invoice data object with the Amount, Billing Address etc. details for the data you
            // want to change.
            Invoice Inv = new Invoice();

            // Set Amount.
            Currency Amt = new Currency(new decimal(25.12));

            Inv.Amt    = Amt;
            Inv.PoNum  = "PO12345";
            Inv.InvNum = "INV12345";

            // Set the Billing Address details.
            BillTo Bill = new BillTo();

            Bill.BillToStreet = "123 Main St.";
            Bill.BillToZip    = "12345";
            Bill.BillToEmail  = "*****@*****.**";
            Bill.BillToPhone  = "123-123-1234";
            Inv.BillTo        = Bill;

            // If you want to modify the credit card information, create a new Payment Device - Credit Card data object.
            // The input parameters are Credit Card Number and Expiration Date of the Credit Card.
            CreditCard CC = new CreditCard("5105105105105100", "0115");

            // Create a new Tender - Card Tender data object.
            CardTender Card = new CardTender(CC);

            // If NO card details available and want to modify only information like E-Mail or Phone Number, use following:
            //RecurringModifyTransaction Trans = new RecurringModifyTransaction(User, Connection, RecurInfo, Inv, null, PayflowUtility.RequestId);

            // If you want to modify the RecurringInfo information only, use the following:
            //RecurringModifyTransaction Trans = new RecurringModifyTransaction(User, Connection, RecurInfo, PayflowUtility.RequestId);

            // Create a new Recurring Modify Transaction.
            RecurringModifyTransaction Trans = new RecurringModifyTransaction(User, Connection, RecurInfo, Inv, Card, PayflowUtility.RequestId);

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                }

                // Get the Recurring Response parameters.
                RecurringResponse RecurResponse = Resp.RecurringResponse;
                if (RecurResponse != null)
                {
                    Console.WriteLine("RPREF = " + RecurResponse.RPRef);
                    Console.WriteLine("PROFILEID = " + RecurResponse.ProfileId);
                }

                // Display the response.
                Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));

                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                }
            }
            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
Пример #3
0
 /// <summary>
 ///     Constructor.
 /// </summary>
 /// <param name="origId">Original Transaction Id</param>
 /// <param name="userInfo">User Info object populated with user credentials.</param>
 /// <param name="payflowConnectionData">Connection credentials object.</param>
 /// <param name="invoice">Invoice object.</param>
 /// <param name="tender">Tender object.</param>
 /// <param name="requestId">Request Id</param>
 /// <remarks>
 ///     Reference credit transaction can be performed on successful
 ///     transactions in order to credit the amount. Therefore, a
 ///     reference credit transaction takes the PNRef of a previous transaction.
 /// </remarks>
 /// <example>
 ///     <code lang="C#" escaped="false">
 ///     ...............
 ///     // Populate data objects
 ///     ...............
 ///     // Create a new Credit Transaction.
 ///     // Following is an example of a reference credit type of transaction.
 ///     CreditTransaction Trans = new CreditTransaction("PNRef of a previous transaction.",
 ///         User, Connection, Inv, Tender, PayflowUtility.RequestId);
 ///     // Submit the transaction.
 ///     Response Resp = Trans.SubmitTransaction();
 ///     if (Resp != null)
 ///     {
 ///         // Get the Transaction Response parameters.
 ///         TransactionResponse TrxnResponse =  Resp.TransactionResponse;
 ///         if (TrxnResponse != null)
 ///         {
 ///             Console.WriteLine("RESULT = " + TrxnResponse.Result);
 ///             Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
 ///             Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
 ///         }
 ///     }
 ///     // Get the Context and check for any contained SDK specific errors.
 ///     Context Ctx = Resp.TransactionContext;
 ///     if (Ctx != null &amp;&amp; Ctx.getErrorCount() > 0)
 ///     {
 ///         Console.WriteLine(Environment.NewLine + "Errors = " + Ctx.ToString());
 ///     }
 ///
 ///     </code>
 ///     <code lang="Visual Basic" escaped="false">
 ///     ...............
 ///     ' Populate data objects
 ///     ...............
 ///     ' Create a new Credit Transaction.
 ///     ' Following is an example of a reference credit type of transaction.
 ///     Dim Trans As CreditTransaction = New CreditTransaction("PNRef of a previous transaction.", User,
 ///                         Connection, Inv, Tender, PayflowUtility.RequestId)
 ///         ' Submit the transaction.
 ///     Dim Resp As Response = Trans.SubmitTransaction()
 ///     If Not Resp Is Nothing Then
 ///         ' Get the Transaction Response parameters.
 ///         Dim TrxnResponse As TransactionResponse = Resp.TransactionResponse
 ///         If Not TrxnResponse Is Nothing Then
 ///             Console.WriteLine("RESULT = " + TrxnResponse.Result)
 ///             Console.WriteLine("PNREF = " + TrxnResponse.Pnref)
 ///             Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg)
 ///         End If
 ///     End If
 ///     ' Get the Context and check for any contained SDK specific errors.
 ///     Dim Ctx As Context = Resp.TransactionContext
 ///     If Not Ctx Is Nothing AndAlso Ctx.getErrorCount() > 0 Then
 ///         Console.WriteLine(Environment.NewLine + "Errors = " + Ctx.ToString())
 ///     End If
 ///     </code>
 /// </example>
 public CreditTransaction(string origId, UserInfo userInfo, PayflowConnectionData payflowConnectionData,
                          Invoice invoice, BaseTender tender, string requestId) : base(PayflowConstants.TrxtypeCredit, userInfo,
                                                                                       payflowConnectionData, invoice, tender, requestId)
 {
     _mOrigId = origId;
 }
Пример #4
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="OrigId">Original Transaction Id.</param>
 /// <param name="UserInfo">User Info object populated with user credentials.</param>
 /// <param name="PayflowConnectionData">Connection credentials object.</param>
 /// <param name="Invoice">Invoice object.</param>
 /// <param name="RequestId">Request Id</param>
 /// <remarks>
 /// The Void transaction prevents a transaction from being settled, but does
 /// not release the authorization (hold on funds) on the cardholder’s account.
 /// Delayed Capture, Sale, Credit, Authorization, and Voice
 /// Authorization transactions can be voided. A Void transaction cannot be voided.
 /// The Void must occur prior to settlement.
 /// </remarks>
 ///	<example>
 ///	<code lang="C#" escaped="false">
 ///	...............
 ///	// Populate data objects
 ///	...............
 ///
 ///	// Create a new Void Transaction.
 ///	// The ORIGID is the PNREF no. for a previous transaction.
 ///	VoidTransaction Trans = new VoidTransaction("V63A0A07BE5A",
 ///		User, Connection, PayflowUtility.RequestId);
 ///
 ///	// Submit the transaction.
 ///	Response Resp = Trans.SubmitTransaction();
 ///
 ///	if (Resp != null)
 ///	{
 ///		// Get the Transaction Response parameters.
 ///		TransactionResponse TrxnResponse =  Resp.TransactionResponse;
 ///		if (TrxnResponse != null)
 ///		{
 ///			Console.WriteLine("RESULT = " + TrxnResponse.Result);
 ///			Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
 ///			Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
 ///		}
 ///	}
 ///
 ///	// Get the Context and check for any contained SDK specific errors.
 ///	Context Ctx = Resp.TransactionContext;
 ///	if (Ctx != null  &amp;  &amp;  Ctx.getErrorCount() > 0)
 ///	{
 ///		Console.WriteLine(Environment.NewLine + "Errors = " + Ctx.ToString());
 ///	}
 ///
 ///
 /// </code>
 ///	<code lang="Visual Basic" escaped="false">
 ///	...............
 ///	' Populate data objects
 ///	...............
 ///	  ' Create a new Void Transaction.
 ///	  ' The ORIGID is the PNREF no. for a previous transaction.
 ///		 Dim Trans As VoidTransaction = New VoidTransaction("V63A0A07BE5A",
 ///	 User, Connection, PayflowUtility.RequestId)
 ///
 ///	  ' Submit the transaction.
 ///	  Dim Resp As Response = Trans.SubmitTransaction()
 ///
 ///	  If Not Resp Is Nothing Then
 ///	      ' Get the Transaction Response parameters.
 ///	      Dim TrxnResponse As TransactionResponse = Resp.TransactionResponse
 ///	      If Not TrxnResponse Is Nothing Then
 ///	          Console.WriteLine("RESULT = "  +  TrxnResponse.Result)
 ///	          Console.WriteLine("PNREF = "  +  TrxnResponse.Pnref)
 ///	          Console.WriteLine("RESPMSG = "  +  TrxnResponse.RespMsg)
 ///	      End If
 ///	  End If
 ///
 ///	  ' Get the Context and check for any contained SDK specific errors.
 ///	  Dim Ctx As Context = Resp.TransactionContext
 ///	  If Not Ctx Is Nothing AndAlso Ctx.getErrorCount() > 0 Then
 ///	      Console.WriteLine(Environment.NewLine  +  "Errors = "  +  Ctx.ToString())
 ///	  End If
 ///
 ///	</code>
 ///	</example>
 public VoidTransaction(String OrigId, UserInfo UserInfo, PayflowConnectionData PayflowConnectionData, Invoice Invoice, String RequestId) : base(PayflowConstants.TRXTYPE_VOID, OrigId, UserInfo, PayflowConnectionData, Invoice, RequestId)
 {
 }
 /// <summary>
 ///     Constructor
 /// </summary>
 /// <param name="origId">Original Transaction Id.</param>
 /// <param name="userInfo">User Info object populated with user credentials.</param>
 /// <param name="payflowConnectionData">Connection credentials object.</param>
 /// <param name="invoice">Invoice object.</param>
 /// <param name="requestId">Request Id</param>
 /// <remarks>
 ///     The Void transaction prevents a transaction from being settled, but does
 ///     not release the authorization (hold on funds) on the cardholder’s account.
 ///     Delayed Capture, Sale, Credit, Authorization, and Voice
 ///     Authorization transactions can be voided. A Void transaction cannot be voided.
 ///     The Void must occur prior to settlement.
 /// </remarks>
 /// <example>
 ///     <code lang="C#" escaped="false">
 ///     ...............
 ///     // Populate data objects
 ///     ...............
 ///     // Create a new Void Transaction.
 ///     // The ORIGID is the PNREF no. for a previous transaction.
 ///     VoidTransaction Trans = new VoidTransaction("V63A0A07BE5A",
 ///         User, Connection, PayflowUtility.RequestId);
 ///
 ///     // Submit the transaction.
 ///     Response Resp = Trans.SubmitTransaction();
 ///
 ///     if (Resp != null)
 ///     {
 ///         // Get the Transaction Response parameters.
 ///         TransactionResponse TrxnResponse =  Resp.TransactionResponse;
 ///         if (TrxnResponse != null)
 ///         {
 ///             Console.WriteLine("RESULT = " + TrxnResponse.Result);
 ///             Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
 ///             Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
 ///         }
 ///     }
 ///
 ///     // Get the Context and check for any contained SDK specific errors.
 ///     Context Ctx = Resp.TransactionContext;
 ///     if (Ctx != null  &amp;  &amp;  Ctx.getErrorCount() > 0)
 ///     {
 ///         Console.WriteLine(Environment.NewLine + "Errors = " + Ctx.ToString());
 ///     }
 ///
 ///  </code>
 ///     <code lang="Visual Basic" escaped="false">
 ///     ...............
 ///     ' Populate data objects
 ///     ...............
 ///       ' Create a new Void Transaction.
 ///       ' The ORIGID is the PNREF no. for a previous transaction.
 ///          Dim Trans As VoidTransaction = New VoidTransaction("V63A0A07BE5A",
 ///      User, Connection, PayflowUtility.RequestId)
 ///
 ///       ' Submit the transaction.
 ///       Dim Resp As Response = Trans.SubmitTransaction()
 ///
 ///       If Not Resp Is Nothing Then
 ///           ' Get the Transaction Response parameters.
 ///           Dim TrxnResponse As TransactionResponse = Resp.TransactionResponse
 ///           If Not TrxnResponse Is Nothing Then
 ///               Console.WriteLine("RESULT = "  +  TrxnResponse.Result)
 ///               Console.WriteLine("PNREF = "  +  TrxnResponse.Pnref)
 ///               Console.WriteLine("RESPMSG = "  +  TrxnResponse.RespMsg)
 ///           End If
 ///       End If
 ///
 ///       ' Get the Context and check for any contained SDK specific errors.
 ///       Dim Ctx As Context = Resp.TransactionContext
 ///       If Not Ctx Is Nothing AndAlso Ctx.getErrorCount() > 0 Then
 ///           Console.WriteLine(Environment.NewLine  +  "Errors = "  +  Ctx.ToString())
 ///       End If
 ///     </code>
 /// </example>
 public VoidTransaction(string origId, UserInfo userInfo, PayflowConnectionData payflowConnectionData,
                        Invoice invoice, string requestId) : base(PayflowConstants.TrxtypeVoid, origId, userInfo,
                                                                  payflowConnectionData, invoice, requestId)
 {
 }
Пример #6
0
 /// <summary>
 /// This class is used to create and perform an Order Transaction for Express Checkout.
 ///
 /// An Order transaction represents an agreement to pay one or more authorized amounts up to
 /// the specified total over a maximum of 29 days.
 /// </summary>
 /// <example>This example shows how to create and perform a order transaction as part of Express Checkout.
 /// <code lang="C#" escaped="false">
 ///		..........
 ///		..........
 ///		//Populate required data objects.
 ///		..........
 ///		..........
 ///
 ///		// Create the Tender object.
 ///		PayPalTender Tender = new PayPalTender(SetRequest);
 ///
 ///		// Create an Order Transaction.  An Order transaction represents an agreement to pay one or more
 ///		// authorized amounts up to the specified total over a maximum of 29 days.
 ///		OrderTransaction Trans = new OrderTransaction(User, Connection, Inv, Tender, PayflowUtility.RequestId);
 ///
 ///		//Submit the transaction.
 ///		Trans.SubmitTransaction();
 ///
 ///		// Get the Response.
 ///		Response Resp = Trans.Response;
 ///		if (Resp != null)
 ///		{
 ///			// Get the Transaction Response parameters.
 ///			TransactionResponse TrxnResponse =  Resp.TransactionResponse;
 ///			if (TrxnResponse != null)
 ///			{
 ///				Console.WriteLine("RESULT = " + TrxnResponse.Result.ToString());
 ///				Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
 ///				Console.WriteLine("TOKEN = " + Trans.Response.ExpressCheckoutSetResponse.Token);
 ///				Console.WriteLine("CORRELATIONID = " + TrxnResponse.CorrelationId);
 ///			}
 ///			// Get the Fraud Response parameters.
 ///			FraudResponse FraudResp =  Resp.FraudResponse;
 ///			if (FraudResp != null)
 ///			{
 ///				Console.WriteLine("PREFPSMSG = " + FraudResp.PreFpsMsg);
 ///				Console.WriteLine("POSTFPSMSG = " + FraudResp.PostFpsMsg);
 ///			}
 ///		}
 ///		// Get the Context and check for any contained SDK specific errors.
 ///		Context Ctx = Resp.TransactionContext;
 ///		if (Ctx != null &amp;&amp; Ctx.getErrorCount() > 0)
 ///		{
 ///			Console.WriteLine(Environment.NewLine + "Errors = " + Ctx.ToString());
 ///		}
 ///</code>
 ///<code lang="Visual Basic" escaped="false">
 ///		..........
 ///		..........
 ///		'Populate required data objects.
 ///		..........
 ///		..........
 ///		' Create the Tender object.
 ///		Dim Tender As New PayPalTender(SetRequest)
 ///
 ///		' Create an Order Transaction.  An Order transaction represents an agreement to pay one or more
 ///		' authorized amounts up to the specified total over a maximum of 29 days.
 ///		Dim Trans As New OrderTransaction(User, Connection, Inv, Tender, PayflowUtility.RequestId)
 ///
 ///		' Submit the transaction.
 ///		Trans.SubmitTransaction()
 ///
 ///		' Get the Response.
 ///		Dim Resp As Response = Trans.Response
 ///
 ///		If Not Resp Is Nothing Then
 ///		' Get the Transaction Response parameters.
 ///
 ///			Dim TrxnResponse As TransactionResponse = Resp.TransactionResponse
 ///
 ///			If Not TrxnResponse Is Nothing Then
 ///				Console.WriteLine("RESULT = " + TrxnResponse.Result.ToString)
 ///				Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg)
 ///				Console.WriteLine("TOKEN = " + Trans.Response.ExpressCheckoutSetResponse.Token)
 ///				Console.WriteLine("CORRELATIONID = " + TrxnResponse.CorrelationId)
 ///			End If
 ///		End If
 ///
 ///		' Get the Context and check for any contained SDK specific errors.
 ///		Dim Ctx As Context = Resp.TransactionContext
 ///
 ///		If Not Ctx Is Nothing AndAlso Ctx.getErrorCount() > 0 Then
 ///			Console.WriteLine(Constants.vbLf + "Errors = " + Ctx.ToString())
 ///		End If
 /// </code>
 /// </example>
 /// <param name="UserInfo">User Info object populated with user credentials.</param>
 /// <param name="PayflowConnectionData">Connection credentials object.</param>
 /// <param name="Invoice">Invoice object.</param>
 /// <param name="Tender">Tender object </param>
 /// <param name="RequestId">Request Id</param>
 public OrderTransaction(UserInfo UserInfo, PayflowConnectionData PayflowConnectionData, Invoice Invoice, PayPalTender Tender, String RequestId)
     : base("O", UserInfo, PayflowConnectionData, Invoice, Tender, RequestId)
 {
 }
        /// <summary>
        /// Process payment
        /// </summary>
        /// <param name="paymentInfo">Payment info required for an order processing</param>
        /// <param name="customer">Customer</param>
        /// <param name="orderGuid">Unique order identifier</param>
        /// <param name="processPaymentResult">Process payment result</param>
        public void ProcessPayment(PaymentInfo paymentInfo, Customer customer, Guid orderGuid, ref ProcessPaymentResult processPaymentResult)
        {
            InitSettings();
            TransactMode transactionMode = GetCurrentTransactionMode();

            //little hack here
            CultureInfo userCulture = Thread.CurrentThread.CurrentCulture;
            NopContext.Current.SetCulture(new CultureInfo("en-US"));
            try
            {
                Invoice invoice = new Invoice();

                BillTo to = new BillTo();
                to.FirstName = paymentInfo.BillingAddress.FirstName;
                to.LastName = paymentInfo.BillingAddress.LastName;
                to.Street = paymentInfo.BillingAddress.Address1;
                to.City = paymentInfo.BillingAddress.City;
                to.Zip = paymentInfo.BillingAddress.ZipPostalCode;
                if (paymentInfo.BillingAddress.StateProvince != null)
                    to.State = paymentInfo.BillingAddress.StateProvince.Abbreviation;
                invoice.BillTo = to;

                if (paymentInfo.ShippingAddress != null)
                {
                    ShipTo to2 = new ShipTo();
                    to2.ShipToFirstName = paymentInfo.ShippingAddress.FirstName;
                    to2.ShipToLastName = paymentInfo.ShippingAddress.LastName;
                    to2.ShipToStreet = paymentInfo.ShippingAddress.Address1;
                    to2.ShipToCity = paymentInfo.ShippingAddress.City;
                    to2.ShipToZip = paymentInfo.ShippingAddress.ZipPostalCode;
                    if (paymentInfo.ShippingAddress.StateProvince != null)
                        to2.ShipToState = paymentInfo.ShippingAddress.StateProvince.Abbreviation;
                    invoice.ShipTo = to2;
                }

                invoice.InvNum = orderGuid.ToString();
                decimal orderTotal = Math.Round(paymentInfo.OrderTotal, 2);
                invoice.Amt = new PayPal.Payments.DataObjects.Currency(orderTotal, IoC.Resolve<ICurrencyService>().PrimaryStoreCurrency.CurrencyCode);

                string creditCardExp = string.Empty;
                if (paymentInfo.CreditCardExpireMonth < 10)
                {
                    creditCardExp = "0" + paymentInfo.CreditCardExpireMonth.ToString();
                }
                else
                {
                    creditCardExp = paymentInfo.CreditCardExpireMonth.ToString();
                }
                creditCardExp = creditCardExp + paymentInfo.CreditCardExpireYear.ToString().Substring(2, 2);
                CreditCard credCard = new CreditCard(paymentInfo.CreditCardNumber, creditCardExp);
                credCard.Cvv2 = paymentInfo.CreditCardCvv2;
                CardTender tender = new CardTender(credCard);
                // <vendor> = your merchant (login id)
                // <user> = <vendor> unless you created a separate <user> for Payflow Pro
                // partner = paypal
                UserInfo userInfo = new UserInfo(user, vendor, partner, password);
                string url = GetPaypalUrl();
                PayflowConnectionData payflowConnectionData = new PayflowConnectionData(url, 443, null, 0, null, null);

                Response response = null;
                if (transactionMode == TransactMode.Authorize)
                {
                    response = new AuthorizationTransaction(userInfo, payflowConnectionData, invoice, tender, PayflowUtility.RequestId).SubmitTransaction();
                }
                else
                {
                    response = new SaleTransaction(userInfo, payflowConnectionData, invoice, tender, PayflowUtility.RequestId).SubmitTransaction();
                }

                if (response.TransactionResponse != null)
                {
                    if (response.TransactionResponse.Result == 0)
                    {
                        processPaymentResult.AuthorizationTransactionId = response.TransactionResponse.Pnref;
                        processPaymentResult.AuthorizationTransactionResult = response.TransactionResponse.RespMsg;

                        if (transactionMode == TransactMode.Authorize)
                        {
                            processPaymentResult.PaymentStatus = PaymentStatusEnum.Authorized;
                        }
                        else
                        {
                            processPaymentResult.PaymentStatus = PaymentStatusEnum.Paid;
                        }
                    }
                    else
                    {
                        processPaymentResult.Error = string.Format("{0} - {1}", response.TransactionResponse.Result, response.TransactionResponse.RespMsg);
                        processPaymentResult.FullError = string.Format("Response Code : {0}. Response Description : {1}", response.TransactionResponse.Result, response.TransactionResponse.RespMsg);
                    }
                }
                else
                {
                    processPaymentResult.Error = "Error during checkout";
                    processPaymentResult.FullError = "Error during checkout";
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                NopContext.Current.SetCulture(userCulture);
            }
        }
Пример #8
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DOUpdateEC.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();

            // You can use the Update Billing Agreement request to cancel the billing agreement or update
            // the billing agreement description.
            //
            // For more information on Reference Transactions, see the DOSetEC Sample for more details.

            // For Express Checkout Reference Transaction without Purchase.
            ECUpdateBARequest UpdateRequest = new ECUpdateBARequest("<BAID>", "<BA_STATUS>", "<BA_DESC>");

            // Create the Tender object.
            PayPalTender Tender = new PayPalTender(UpdateRequest);

            // Create the transaction object.  We do not pass a Transaction Type for an update call.
            BaseTransaction Trans = new BaseTransaction(
                null, User, Connection, null, Tender, PayflowUtility.RequestId);

            // Submit the transaction.
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    // PNREF is not returned with an Update call.
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                    if (TrxnResponse.Result == 0)
                    {
                        Console.WriteLine("CORRELATIONID = " + TrxnResponse.CorrelationId);
                        Console.WriteLine("PAYERID = " + Trans.Response.ExpressCheckoutGetResponse.PayerId);
                        Console.WriteLine("PAYERSTATUS = " + Trans.Response.ExpressCheckoutGetResponse.PayerStatus);
                        Console.WriteLine("FIRST = " + Trans.Response.ExpressCheckoutGetResponse.FirstName);
                        Console.WriteLine("LAST = " + Trans.Response.ExpressCheckoutGetResponse.LastName);
                        Console.WriteLine("EMAIL = " + Trans.Response.ExpressCheckoutGetResponse.EMail);
                        Console.WriteLine("BAID = " + Trans.Response.ExpressCheckoutDoResponse.BAId);
                        Console.WriteLine("BA_STATUS = " + Trans.Response.ExpressCheckoutUpdateResponse.BA_Status);
                        Console.WriteLine("BA_DESC = " + Trans.Response.ExpressCheckoutUpdateResponse.BA_Desc);
                    }
                }

                // If value is true, then the Request ID has not been changed and the original response
                // of the original transction is returned.
                Console.WriteLine(Environment.NewLine + "DUPLICATE = " + TrxnResponse.Duplicate);
            }

            // Display the response.
            Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));

            // Get the Transaction Context and check for any contained SDK specific errors (optional code).
            Context TransCtx = Resp.TransactionContext;

            if (TransCtx != null && TransCtx.getErrorCount() > 0)
            {
                Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
            }

            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
Пример #9
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DOSale_ACH.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();

            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            Invoice Inv = new Invoice();

            // Set Amount.
            Currency Amt = new Currency(new decimal(25.12));

            Inv.Amt    = Amt;
            Inv.PoNum  = "PO12345";
            Inv.InvNum = "INV12345";

            // Set the Billing Address details.
            BillTo Bill = new BillTo();

            Bill.BillToStreet = "123 Main St.";
            Bill.BillToZip    = "12345";
            Inv.BillTo        = Bill;

            // Create a new Payment Device - Bank Account data object.
            // The input parameters are Account No. and ABA.
            BankAcct BA = new BankAcct("1111111111", "111111118");

            // The Account Type can be "C" for Checking and "S" for Saving.
            BA.AcctType = "C";
            BA.Name     = "John Doe";

            // Create a new Tender - ACH Tender data object.
            ACHTender ACH = new ACHTender(BA);

            ACH.AuthType = "WEB";              // Sending as a Web transaction.
            ACH.ChkNum   = "1234";

            // Create a new ACH - Sale Transaction.
            SaleTransaction Trans = new SaleTransaction(User, Connection, Inv, ACH, PayflowUtility.RequestId);

            // Setting verbosity to HIGH to get full response.
            Trans.Verbosity = "HIGH";

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                    Console.WriteLine("HOSTCODE = " + TrxnResponse.HostCode);
                    Console.WriteLine("TRANSTIME = " + TrxnResponse.TransTime);
                    Console.WriteLine("CHECK NAME (FIRSTNAME) = " + TrxnResponse.FirstName);
                    Console.WriteLine("AMOUNT = " + TrxnResponse.Amt);
                    Console.WriteLine("ACCT = " + TrxnResponse.Acct);
                }

                // Display the response.
                Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));

                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                }
            }
            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
Пример #10
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("---------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DO_TeleCheck.cs");
            Console.WriteLine("---------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();

            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            Invoice Inv = new Invoice();

            // Set Amount.
            Currency Amt = new Currency(new decimal(25.12));

            Inv.Amt    = Amt;
            Inv.PoNum  = "PO12345";
            Inv.InvNum = "INV12345";

            // Set the Billing Address details.
            BillTo Bill = new BillTo();

            Bill.BillToStreet  = "123 Main St.";
            Bill.BillToZip     = "12345";
            Bill.BillToCity    = "New York";
            Bill.BillToState   = "PA";
            Bill.BillToZip     = "12345";
            Bill.BillToPhone   = "123-4546-7890";
            Bill.BillToEmail   = "*****@*****.**";
            Bill.BillToCountry = "US";
            Inv.BillTo         = Bill;

            // Set the IP address of the customer
            CustomerInfo custInfo = new CustomerInfo();

            custInfo.CustIP  = "111.111.11.111";
            Inv.CustomerInfo = custInfo;

            // Create a new Payment Device - Check Payment data object.
            // The input parameters is MICR. Magnetic Ink Check Reader. This is the entire line
            // of numbers at the bottom of all checks. It includes the transit number, account
            // number, and check number.
            CheckPayment ChkPayment = new CheckPayment("1234567804390850001234");

            // Name property needs to be set for the Check Payment.
            ChkPayment.Name = "Ivan Smith";
            // Create a new Tender - Check Tender data object.
            CheckTender ChkTender = new CheckTender(ChkPayment);

            // Account holder’s next unused (available) check number. Up to 7 characters.
            ChkTender.ChkNum = "1234";
            // DL or SS is required for a TeleCheck transaction.
            // If CHKTYPE=P, a value for either DL or SS must be passed as an identifier.
            // If CHKTYPE=C, the Federal Tax ID must be passed as the SS value.
            ChkTender.ChkType = "P";
            // Driver’s License number. If CHKTYPE=P, a value for either DL or SS must be passed as an identifier.
            // Format: XXnnnnnnnn
            // XX = State Code, nnnnnnnn = DL Number - up to 31 characters.
            ChkTender.DL = "CAN85452345";
            // Social Security number.  Needed if ChkType = P
            ChkTender.SS = "456765833";
            // AuthType = I-Internet Check, P-Checks by Phone, D-Prearranged Deposit
            ChkTender.AuthType = "I";

            // Create a new TeleCheck - Authorization Transaction.
            AuthorizationTransaction Trans = new AuthorizationTransaction(
                User, Connection, Inv, ChkTender, PayflowUtility.RequestId);

            //Want VERBOSITY=HIGH to get all the response values back.
            Trans.Verbosity = "HIGH";

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;
                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                    Console.WriteLine("AUTHCODE = " + TrxnResponse.AuthCode);
                    Console.WriteLine("HOSTCODE = " + TrxnResponse.HostCode);
                    Console.WriteLine("TRACEID = " + TrxnResponse.TraceId);
                    Console.WriteLine("ACHSTATUS = " + TrxnResponse.AchStatus);
                }
                // Display the response.
                Console.WriteLine(PayflowUtility.GetStatus(Resp) + Environment.NewLine);
                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine("Transaction Errors = " + TransCtx.ToString() + Environment.NewLine);
                }
                if (TrxnResponse.Result == 0)
                {
                    // Transaction approved, display acceptance verbiage, after consumer accepts, capture the
                    // transaction to finalize it.
                    CaptureTransaction capTrans = new CaptureTransaction(TrxnResponse.Pnref, User, Connection, null, ChkTender, PayflowUtility.RequestId);
                    // Set the transaction verbosity to HIGH to display most details.
                    capTrans.Verbosity = "HIGH";

                    // Submit the Transaction
                    Response capResp = capTrans.SubmitTransaction();

                    // Display the transaction response parameters.
                    if (capResp != null)
                    {
                        // Get the Transaction Response parameters.
                        TransactionResponse capTrxnResponse = capResp.TransactionResponse;
                        if (capTrxnResponse != null)
                        {
                            Console.WriteLine("RESULT = " + capTrxnResponse.Result);
                            Console.WriteLine("PNREF = " + capTrxnResponse.Pnref);
                            Console.WriteLine("RESPMSG = " + capTrxnResponse.RespMsg);
                            Console.WriteLine("HOSTCODE = " + capTrxnResponse.HostCode);
                            Console.WriteLine("TRACEID = " + capTrxnResponse.TraceId);
                        }
                        // Display the response.
                        Console.WriteLine(PayflowUtility.GetStatus(capResp) + Environment.NewLine);
                        // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                        Context capTransCtx = capResp.TransactionContext;
                        if (capTransCtx != null && capTransCtx.getErrorCount() > 0)
                        {
                            Console.WriteLine("Transaction Errors = " + capTransCtx.ToString() + Environment.NewLine);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Unable to capture transaction as it declined or failed." + Environment.NewLine);
                    }
                }
            }
            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
Пример #11
0
        protected void Page_Load(object sender, EventArgs e)
        {
            String   RequestID = PayflowUtility.RequestId;
            UserInfo User      = new UserInfo("-", "-", "-", "-");
            PayflowConnectionData Connection = new PayflowConnectionData();
            Invoice Inv = new Invoice();

            String   usCurrency = "USD";
            Currency Amt        = new Currency(new decimal(19.99), usCurrency);

            Inv.Amt = Amt;
            // *** Set the Billing Address details. ***
            BillTo Bill = new BillTo();

            Bill.BillToFirstName = tbFirstName.Text;
            Bill.BillToLastName  = tbLastName.Text;
            Bill.BillToStreet    = tbStreetAddress.Text;
            Bill.BillToZip       = tbPostCode.Text;

            // Set the BillTo object into invoice.
            Inv.BillTo = Bill;
            ShipTo Ship = new ShipTo();
            // If shipping address is different to billing address this can be set here

            // *** Create Customer Data ***

            CustomerInfo CustInfo = new CustomerInfo();

            UserItem nUser = new UserItem();

            nUser.UserItem1 = "TUSER1"; //e-commerce site user-name
            Inv.UserItem    = nUser;
            // *** Create a new Payment Device - Credit Card data object. ***
            CreditCard CC = new CreditCard(tbCardNumber.Text, ddlExpiryMonth.SelectedValue + ddlExpiryYear.SelectedValue);

            CC.Cvv2 = tbCVV2.Text;
            CardTender      Card  = new CardTender(CC);
            SaleTransaction Trans = new SaleTransaction(User, Connection, Inv, Card, RequestID);
            ClientInfo      cInfo = new ClientInfo();

            cInfo.IntegrationProduct = "Test";
            cInfo.IntegrationVersion = "1.0";
            Trans.ClientInfo         = cInfo;
            Trans.Verbosity          = "HIGH";
            // Try to submit the transaction up to 3 times with 5 second delay. This can be used
            // in case of network issues. The idea here is since you are posting via HTTPS behind the scenes there
            // could be general network issues, so try a few times before you tell customer there is an issue.
            int  trxCount = 1;
            bool RespRecd = false;

            while (trxCount <= 3 && !RespRecd)
            {
                // Submit the Transaction
                Response Resp = Trans.SubmitTransaction();
                // Display the transaction response parameters.
                if (Resp != null)
                {
                    // Here would go response code handling. There is an extensive number of codes, all of which should
                    //Be handled effectively
                }
                else
                {
                    Thread.Sleep(5000); // let's wait 5 seconds to see if this is a temporary network issue.
                    trxCount++;
                }
            }
        }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="TrxType">Transaction type</param>
 /// <param name="UserInfo">User Info object populated with user credentials.</param>
 /// <param name="PayflowConnectionData">Connection credentials object.</param>
 /// <param name="RequestId">Request Id</param>
 protected BuyerAuthTransaction(String TrxType, UserInfo UserInfo, PayflowConnectionData PayflowConnectionData, String RequestId)
     : base(TrxType, UserInfo, PayflowConnectionData, RequestId)
 {
 }
Пример #13
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DOReferenceCredit.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();
            ///////////////////////////////////////////////////////////////////

            // If you want to change the amount being credited, you'll need to set the Amount object.
            //Invoice Inv = new Invoice();
            // Set the amount object if you want to change the amount from the original transaction.
            // Currency Code USD is US ISO currency code.  If no code passed, USD is default.
            // See the Developer's Guide for the list of three-character currency codes available.
            //Currency Amt = new Currency(new decimal(10.00));
            //Inv.Amt = Amt;
            //CreditTransaction trans = new CreditTransaction("<ORIGINAL_PNREF>", User, Connection, Inv, PayflowUtility.getRequestId());

            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            Invoice Inv = new Invoice();

            // Set Amount.
            Currency Amt = new Currency(new decimal(25.12));

            Inv.Amt    = Amt;
            Inv.PoNum  = "PO12345";
            Inv.InvNum = "INV12345";

            // Create a new Credit Transaction from the original transaction.  See above if you
            // need to change the amount.
            CreditTransaction Trans = new CreditTransaction("<ORIGINAL_PNREF>", User, Connection, Inv, PayflowUtility.RequestId);

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                    Console.WriteLine("AUTHCODE = " + TrxnResponse.AuthCode);
                    Console.WriteLine("AVSADDR = " + TrxnResponse.AVSAddr);
                    Console.WriteLine("AVSZIP = " + TrxnResponse.AVSZip);
                    Console.WriteLine("IAVS = " + TrxnResponse.IAVS);
                }

                // Get the Fraud Response parameters.
                FraudResponse FraudResp = Resp.FraudResponse;

                // Display Fraud Response parameter
                if (FraudResp != null)
                {
                    Console.WriteLine("PREFPSMSG = " + FraudResp.PreFpsMsg);
                    Console.WriteLine("POSTFPSMSG = " + FraudResp.PostFpsMsg);
                }

                // Display the response.
                Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));

                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                }
            }
            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
Пример #14
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DOFraudFilters.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();

            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            Invoice Inv = new Invoice();

            // Set Amount.
            Currency Amt = new Currency(new decimal(51.00));

            Inv.Amt    = Amt;
            Inv.PoNum  = "PO12345";
            Inv.InvNum = "INV12345";

            // Set the Billing Address details.
            BillTo Bill = new BillTo();

            Bill.BillToStreet = "677 Main St.";
            Bill.BillToZip    = "12345";
            Inv.BillTo        = Bill;

            CustomerInfo CustInfo = new CustomerInfo();

            CustInfo.CustIP  = "10.1.1.1";             // IP Velocity Filter
            Inv.CustomerInfo = CustInfo;

            // Create a new Payment Device - Credit Card data object.
            // The input parameters are Credit Card Number and Expiration Date of the Credit Card.
            CreditCard CC = new CreditCard("5105105105105100", "0115");

            CC.Cvv2 = "444";

            // Create a new Tender - Card Tender data object.
            CardTender Card = new CardTender(CC);
            ///////////////////////////////////////////////////////////////////

            // Create a new Sale Transaction with purchase price ceiling amount filter set to $50.
            SaleTransaction Trans = new SaleTransaction(
                User, Connection, Inv, Card, PayflowUtility.RequestId);

            // Set the Verbosity of the transaction to HIGH to get maximum information in the response.
            Trans.Verbosity = "HIGH";

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.

            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                    Console.WriteLine("AUTHCODE = " + TrxnResponse.AuthCode);
                    Console.WriteLine("AVSADDR = " + TrxnResponse.AVSAddr);
                    Console.WriteLine("AVSZIP = " + TrxnResponse.AVSZip);
                    Console.WriteLine("IAVS = " + TrxnResponse.IAVS);
                    Console.WriteLine("HOSTCODE = " + TrxnResponse.HostCode);
                    Console.WriteLine("PROCAVS = " + TrxnResponse.ProcAVS);
                    Console.WriteLine("CVV2MATCH = " + TrxnResponse.CVV2Match);
                }

                // Get the Fraud Response parameters.
                FraudResponse FraudResp = Resp.FraudResponse;

                // Display Fraud Response parameter
                if (FraudResp != null)
                {
                    Console.WriteLine("PREFPSMSG = " + FraudResp.PreFpsMsg);
                    Console.WriteLine("POSTFPSMSG = " + FraudResp.PostFpsMsg);

                    // The following lines of code dealing with PreXmlData and PostXmlData will return all th rules
                    // that were triggered by the Fraud Service. For Example, let's assume the both AVS and CSC (CVV2)
                    // failed, the FraudResp.PostFpsMsg would something similar to:
                    // "Review: More than one rule was triggered for Review".
                    //
                    // The Fps_PreXmlData is returned as an Xml string. This is converted into Data Objects
                    // with the object hierarchy as shown below:
                    // FpsXmlData
                    // >>>>>>>>> List of Rule objects
                    // >>>>>>>>>>>>>>>>>> List of RuleVendorParm objects.
                    FpsXmlData PreXmlData = FraudResp.Fps_PreXmlData;
                    if (PreXmlData != null)
                    {
                        // Get the list of Rules.
                        ArrayList RulesList = PreXmlData.Rules;
                        if (RulesList != null && RulesList.Count > 0)
                        {
                            IEnumerator RulesEnum = RulesList.GetEnumerator();
                            Rule        DORule    = null;
                            // Loop through the list of Rules.
                            while (RulesEnum.MoveNext())
                            {
                                DORule = (Rule)RulesEnum.Current;
                                Console.WriteLine("------------------------------------------------------");
                                Console.WriteLine("PRE-XML DATA");
                                Console.WriteLine("------------------------------------------------------");
                                Console.WriteLine("Rule Number = " + DORule.Num.ToString());
                                Console.WriteLine("Rule Id = " + DORule.RuleId);
                                Console.WriteLine("Rule Alias = " + DORule.RuleAlias);
                                Console.WriteLine("Rule Description = " + DORule.RuleDescription);
                                Console.WriteLine("Action = " + DORule.Action);
                                Console.WriteLine("Triggered Message = " + DORule.TriggeredMessage);

                                // Get the list of Rule Vendor Parameters.
                                ArrayList RuleVendorParmsList = DORule.RuleVendorParms;

                                if (RuleVendorParmsList != null && RuleVendorParmsList.Count > 0)
                                {
                                    IEnumerator RuleParametersEnum = RuleVendorParmsList.GetEnumerator();
                                    // Loop through the list of Rule Parameters.
                                    while (RuleParametersEnum.MoveNext())
                                    {
                                        RuleParameter DORuleParam = (RuleParameter)RuleParametersEnum.Current;
                                        Console.WriteLine("Number = " + DORuleParam.Num.ToString());
                                        Console.WriteLine("Name = " + DORuleParam.Name);
                                        Console.WriteLine("Type = " + DORuleParam.Type);
                                        Console.WriteLine("Value = " + DORuleParam.Value);
                                    }
                                }
                            }
                        }
                        // The Fps_PostXmlData is returned as an Xml string. This is converted into Data Objects
                        // with the object hierarchy as shown below:
                        // FpsXmlData
                        // >>>>>>>>> List of Rule objects
                        // >>>>>>>>>>>>>>>>>> List of RuleVendorParm objects.
                        FpsXmlData PostXmlData = FraudResp.Fps_PostXmlData;
                        if (PostXmlData != null)
                        {
                            // Get the list of Rules.
                            ArrayList PostRulesList = PostXmlData.Rules;
                            if (PostRulesList != null && PostRulesList.Count > 0)
                            {
                                IEnumerator RulesEnum = PostRulesList.GetEnumerator();
                                Rule        DORule    = null;
                                // Loop through the list of Rules.
                                while (RulesEnum.MoveNext())
                                {
                                    DORule = (Rule)RulesEnum.Current;
                                    Console.WriteLine("------------------------------------------------------");
                                    Console.WriteLine("POST-XML DATA");
                                    Console.WriteLine("------------------------------------------------------");
                                    Console.WriteLine("Rule Number = " + DORule.Num.ToString());
                                    Console.WriteLine("Rule Id = " + DORule.RuleId);
                                    Console.WriteLine("Rule Alias = " + DORule.RuleAlias);
                                    Console.WriteLine("Rule Description = " + DORule.RuleDescription);
                                    Console.WriteLine("Action = " + DORule.Action);
                                    Console.WriteLine("Triggered Message = " + DORule.TriggeredMessage);

                                    // Get the list of Rule Vendor Parameters.
                                    ArrayList RuleVendorParmsList = DORule.RuleVendorParms;

                                    if (RuleVendorParmsList != null && RuleVendorParmsList.Count > 0)
                                    {
                                        IEnumerator RuleParametersEnum = RuleVendorParmsList.GetEnumerator();
                                        // Loop through the list of Rule Parameters.
                                        while (RuleParametersEnum.MoveNext())
                                        {
                                            RuleParameter DORuleParam = (RuleParameter)RuleParametersEnum.Current;
                                            Console.WriteLine("Number = " + DORuleParam.Num.ToString());
                                            Console.WriteLine("Name = " + DORuleParam.Name);
                                            Console.WriteLine("Type = " + DORuleParam.Type);
                                            Console.WriteLine("Value = " + DORuleParam.Value);
                                        }
                                    }
                                }
                            }
                        }
                    }

                    // Display the response.
                    Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));

                    // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                    Context TransCtx = Resp.TransactionContext;
                    if (TransCtx != null && TransCtx.getErrorCount() > 0)
                    {
                        Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                    }

                    Console.WriteLine("Press Enter to Exit ...");
                    Console.ReadLine();
                }
            }
        }
Пример #15
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DORecurring.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();

            // Create a new Invoice data object details.
            Invoice Inv = new Invoice();

            // Set Amount.
            Currency Amt = new Currency(new decimal(25.12));

            Inv.Amt    = Amt;
            Inv.PoNum  = "PO12345";
            Inv.InvNum = "INV12345";

            // Set the Billing Address details.
            BillTo Bill = new BillTo();

            Bill.BillToStreet = "123 Main St.";
            Bill.BillToZip    = "12345";
            Inv.BillTo        = Bill;

            // Create a new Payment Device - Credit Card data object.
            // The input parameters are Credit Card Number and Expiration Date of the Credit Card.
            CreditCard CC = new CreditCard("5105105105105100", "0125");

            CC.Cvv2 = "123";

            // Create a new Tender - Card Tender data object.
            CardTender Card = new CardTender(CC);

            RecurringInfo RecurInfo = new RecurringInfo();

            // The date that the first payment will be processed.
            // This will be of the format mmddyyyy.
            RecurInfo.Start       = "<MMDDYYYY>";
            RecurInfo.ProfileName = "<TestProfileName>";
            // Specifies how often the payment occurs. All PAYPERIOD values must use
            // capital letters and can be any of DAY / WEEK / BIWK / SMMO / FRWK / ]
            // MONT / QTER / SMYR / YEAR
            RecurInfo.PayPeriod = "MONT";

            // Create a new Recurring Transaction.
            RecurringTransaction Trans = new RecurringTransaction("A", RecurInfo,
                                                                  User, Connection, Inv, Card, PayflowUtility.RequestId);

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                }

                // Get the Recurring Response parameters.
                RecurringResponse RecurResponse = Resp.RecurringResponse;
                if (RecurResponse != null)
                {
                    Console.WriteLine("RPREF = " + RecurResponse.RPRef);
                    Console.WriteLine("PROFILEID = " + RecurResponse.ProfileId);
                }
            }

            // Display the response.
            Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));

            // Get the Transaction Context and check for any contained SDK specific errors (optional code).
            Context TransCtx = Resp.TransactionContext;

            if (TransCtx != null && TransCtx.getErrorCount() > 0)
            {
                Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
            }
            Console.WriteLine(Environment.NewLine + "Press Enter to Continue ...");
            Console.ReadLine();
        }
 /// <summary>
 ///     Constructor.
 /// </summary>
 /// <param name="trxType">Transaction type</param>
 /// <param name="userInfo">User Info object populated with user credentials.</param>
 /// <param name="payflowConnectionData">Connection credentials object.</param>
 /// <param name="requestId">Request Id</param>
 protected BuyerAuthTransaction(string trxType, UserInfo userInfo, PayflowConnectionData payflowConnectionData,
                                string requestId)
     : base(trxType, userInfo, payflowConnectionData, requestId)
 {
 }
        /// <summary>
        /// Captures payment
        /// </summary>
        /// <param name="capturePaymentRequest">Capture payment request</param>
        /// <returns>Capture payment result</returns>
        public CapturePaymentResult Capture(CapturePaymentRequest capturePaymentRequest)
        {
            var result = new CapturePaymentResult();

            // Check license
            bool isLicensed = this._licenseService.IsLicensed(HttpContext.Current.Request.Url.Host);
            if (!isLicensed && capturePaymentRequest.Order.OrderTotal > 5.00M)
            {
                result.AddError("The trial license can be used to submit order of $5.00 or less. Please purchase a full license at our website.");
                return result;
            }

            string authorizationId = capturePaymentRequest.Order.AuthorizationTransactionId;

            // Create the Payflow Data Objects.
            // Create the User data object with the required user details.
            UserInfo payflowUser = _payPalHelper.GetUserInfo();

            // Create the Payflow Connection data object with the required connection details.            
            PayflowConnectionData payflowConn = new PayflowConnectionData(_payPalHelper.GetPayflowProHost());
                        
            CaptureTransaction trans = new CaptureTransaction(authorizationId, payflowUser, payflowConn, PayflowUtility.RequestId);
            Response resp = trans.SubmitTransaction();
                        
            // Process the Payflow response.
            if (resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse trxResp = resp.TransactionResponse;
                if (trxResp != null)
                {
                    if (trxResp.Result == 0)
                    {
                        result.NewPaymentStatus = PaymentStatus.Paid;
                        result.CaptureTransactionId = trxResp.Pnref;
                        result.CaptureTransactionResult = trxResp.RespMsg;
                    }
                    else
                    {
                        result.AddError(string.Format("Capture RESULT: {0}-{1}", trxResp.Result, trxResp.RespMsg));
                    }
                }
            }
                                    
            return result;
        }
Пример #18
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DOSaleComplete.cs");
            Console.WriteLine("------------------------------------------------------");

            //
            // PLEASE READ ALL COMMENTS BELOW:
            // All information regarding the available objects within payflow_dotNET.dll can be found in the API doc
            // found under the "Docs" directory of the installed SDK.  You will also need to refer to the
            // Payflow Gateway Developer Guide and Reference found at
            // https://developer.paypal.com/docs/classic/payflow/integration-guide/
            //
            // Regarding the Request ID:
            //
            // The request Id is a unique id that you send with your transaction data.  This Id if not changed
            // will help prevent duplicate transactions.  The idea is to set this Id outside the loop or if on a page,
            // prior to the final confirmation page.
            //
            // Once the transaction is sent and if you don't receive a response you can resend the transaction and the
            // server will respond with the response data of the original submission.  Also, the object,
            // Trans.Response.TransactionResponse.Duplicate will be set to "1" if the transaction is a duplicate.
            //
            // This allows you to resend transaction requests should there be a network or user issue without re-charging
            // a customers credit card.
            //
            // COMMON ISSUES:
            //
            // Result Code 1:
            // Is usually caused by one of the following:
            //		** Invalid login information, see result code 26 below.
            //		** IP Restrictions on the account. Verify there are no IP restrictions in Manager under Service Settings.
            //
            // Result Code 26:
            // Verify USER, VENDOR, PARTNER and PASSWORD. Remember, USER and VENDOR are both the merchant login
            // ID unless a Payflow Pro USER was created.  All fields are case-sensitive.
            //
            // Receiving Communication Exceptions or No Response:
            // Since this service is based on HTTPS it is possible that due to network issues either on PayPal's side or
            // yours that you can not process a transaction.  If this is the case, what is suggested is that you put some
            // type of loop in your code to try up to X times before "giving up".  This example will try to get a response
            // up to 3 times before it fails and by using the Request ID as described above, you can do these attempts without
            // the chance of causing duplicate charges on your customer's credit card.
            //
            // END COMMENTS

            // Begin Application
            //
            // Set the Request ID
            // Uncomment the line below and run two concurrent transactions to show how duplicate works.  You will notice on
            // the second transaction that the response returned is identical to the first, but the duplicate object will be set.
            // String strRequestID = "123456";
            // Comment out this line if testing duplicate response.
            String RequestID = PayflowUtility.RequestId;

            // *** Create the Data Objects. ***
            //
            // *** Create the User data object with the required user details. ***
            //
            // Should you choose to store the login information (Vendor, User, Partner and Password) in
            // app.config, you can retrieve the data using PayflowUtility.AppSettings.
            //
            // For Example:
            //
            //      App.Config Entry: <add key="PayflowPartner" value="PayPal"/>
            //
            //      String mUser = PayflowUtility.AppSettings("PayflowUser");
            //      String mVendor = PayflowUtility.AppSettings("PayflowVendor");
            //      String mPartner = PayflowUtility.AppSettings("PayflowPartner");
            //      String mPassword = PayflowUtility.AppSettings("PayflowPassword");
            //
            // UserInfo User = new UserInfo (mUser, mVendor, mPartner, mPassword);

            // Remember: <vendor> = your merchant (login id), <user> = <vendor> unless you created a separate <user> for Payflow Pro.
            // Result code 26 will be issued if you do not provide both the <vendor> and <user> fields.

            // The other most common error with authentication is result code 1, user authentication failed.  This is usually
            // due to invalid account information or IP restriction on the account.  You can verify IP restriction by logging
            // into Manager.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // *** Create the Payflow Connection data object with the required connection details. ***
            //
            // To allow the ability to change easily between the live and test servers, the PFPRO_HOST
            // property is defined in the App.config (or web.config for a web site) file.  However,
            // you can also pass these fields and others directly from the PayflowConnectionData constructor.
            // This will override the values passed in the App.config file.
            //
            // For Example:
            //
            //      Example values passed below are as follows:
            //      Payflow Pro Host address : pilot-payflowpro.paypal.com
            //      Payflow Pro Host Port : 443
            //      Timeout : 45 ( in seconds )
            //
            //      PayflowConnectionData Connection = new PayflowConnectionData("pilot-payflowpro.paypal.com", 443, 45, "",0,"","");
            //
            // Obtain Host address from the app.config file and use default values for
            // timeout and proxy settings.

            PayflowConnectionData Connection = new PayflowConnectionData();

            // *** Create a new Invoice data object ***
            // Set Invoice object with the Amount, Billing & Shipping Address, etc. ***

            Invoice Inv = new Invoice();

            // Creates a CultureInfo for English in the U.S.
            // Not necessary, just here for example of using currency formatting.
            //CultureInfo us = new CultureInfo("en-US");
            //String usCurrency = "USD";

            // Set the amount object. For Partial Authorizations, refer to the DoPartialAuth example.
            // Currency Code 840 (USD) is US ISO currency code.  If no code passed, 840 is default.
            // See the Developer's Guide for the list of the three-digit currency codes.
            //Currency Amt = new Currency(new decimal(0.00), usCurrency);
            Currency Amt = new Currency(new decimal(25.00), "USD");

            // A valid amount has either no decimal value or only a two decimal value.
            // An invalid amount will generate a result code 4.
            //
            // For values which have more than two decimal places such as:
            // Currency Amt = new Currency(new Decimal(25.1214));
            // You will either need to truncate or round as needed using the following property: Amt.NoOfDecimalDigits
            //
            // If the NoOfDecimalDigits property is used then it is mandatory to set one of the following
            // properties to true.
            //
            //Amt.Round = true;
            //Amt.Truncate = true;
            //
            // For Currencies without a decimal, you'll need to set the NoOfDecimalDigits = 0.
            //Amt.NoOfDecimalDigits = 0;
            Inv.Amt = Amt;

            Currency TaxAmt = new Currency(new decimal(0.00), "USD");

            Inv.TaxAmt = TaxAmt;

            // PONum, InvNum and CustRef are sent to the processors and could show up on a customers
            // or your bank statement. These fields are reportable but not searchable in PayPal Manager.
            Inv.PoNum   = "PO12345";
            Inv.InvNum  = "INV12345";
            Inv.CustRef = "CustRef1";

            // Merchant information is detailed data about a merchant such as the merchant's name, business address, business location identifier,
            // and contact information and is used to change the merchant's information on a customer's credit card.
            // See the section, "Submitting Soft Merchant Information" in the Payflow Pro Developer's Guide for more information.
            //MerchantInfo Merchant = new MerchantInfo();
            //Merchant.MerchantName = "MerchantXXXXX";
            //Merchant.MerchantCity = "Somewhere";
            //Inv.MerchantInfo = Merchant;
            Inv.VatTaxAmt = new Currency(new decimal(25.00), "USD");

            // Comment1 and Comment2 fields are search-able within PayPal Manager .
            // You may want to populate these fields with any of the above three fields or any other data.
            // However, the search is a case-sensitive and is a non-wild card search, so plan accordingly.

            Inv.Comment1 = "Comment1";
            Inv.Comment2 = "Comment2";

            // There are additional Invoice parameters that could assist you in obtaining a better rate
            // from your merchant bank.  Refer to the Payflow Pro Developer’s Guide1
            // and consult your Internet Merchant Bank on what parameters (if any) you can use.
            // Some of the parameters could include:
            // Inv.Recurring = "Y";
            // Inv.TaxExempt = "Y";


            // *** Create Level 2/3 Data for Purchase Card ***
            // PayPal Payment Services supports passing Purchasing Card Level 2 information (such as
            // purchase order number, tax amount, and charge description) in the settlement file.
            // If additional required invoice information and line item details are included in the transaction,
            // PayPal formats Purchasing Card Level 3 information in an appropriate format, for example,
            // EDI (Electronic Data Interchange) 810 format as required by American Express during
            // settlement processing.
            //
            // Discuss with your merchant acquiring bank to determine if you should be passing this data and
            // refer to the Payflow Gateway Developer's Guide under your processor for all valid and required
            // parameters.
            //
            //Create a line item.
            //LineItem Item = new LineItem();
            //Add info to line item.
            //Item.Amt = new Currency(new Decimal(100.00));
            //Item.Cost = new Currency(new Decimal(49.99));
            //Add line item to invoice.
            //Inv.AddLineItem(Item);
            // To add additional line items, just repeat the same statements above changing the values.

            // *** Set the Billing Address details. ***
            //
            // The billing details below except for Street and Zip are for reporting purposes only.
            // It is suggested that you pass all the billing details for enhanced reporting and as data backup.

            // Create the BillTo object.
            BillTo Bill = new BillTo();

            // Set the customer name.
            Bill.BillToFirstName   = "Joe";
            Bill.BillToMiddleName  = "M";
            Bill.BillToLastName    = "Smith";
            Bill.BillToCompanyName = "Joe's Hardware";
            // It is highly suggested that you pass at minimum Street and Zip for AVS response.
            // However, AVS is only supported by US banks and some foreign banks.  See the Payflow
            // Developer's Guide for more information.  Sending these fields could help in obtaining
            // a lower discount rate from your Internet merchant Bank.  Consult your bank for more information.
            Bill.BillToStreet  = "123 Main St.";
            Bill.BillToStreet2 = "Suite A";
            Bill.BillToCity    = "San Jose";
            Bill.BillToState   = "CA";
            Bill.BillToZip     = "12345";
            // BillToCountry code is based on numeric ISO country codes. (e.g. 840 = USA)
            // For more information, refer to the Payflow Developer's Guide.
            Bill.BillToCountry = "840";
            Bill.BillToPhone   = "555-243-7689";
            // Secondary phone numbers (could be mobile number etc).
            Bill.BillToPhone2    = "222-222-2222";
            Bill.BillToHomePhone = "555-123-9867";
            Bill.BillToFax       = "555-343-5444";
            Bill.BillToEmail     = "*****@*****.**";

            // Set the BillTo object into invoice.
            Inv.BillTo = Bill;

            // Shipping details may not be necessary if providing a service or downloadable product such as software etc.
            //
            // Set the Shipping Address details.
            // The shipping details are for reporting purposes only.
            // It is suggested that you pass all the shipping details for enhanced reporting.
            //
            // Create the ShipTo object.
            ShipTo Ship = new ShipTo();

            // To prevent an 'Address Mismatch' fraud trigger, we are shipping to the billing address.  However,
            // shipping parameters are listed.
            // Comment line below if you want a separate Ship To address.
            //Ship = Bill.Copy();

            // Uncomment statements below to send to separate Ship To address.
            // Set the recipient's name.
            // Ship.ShipToFirstName = "Sam";
            // Ship.ShipToMiddleName = "J";
            // Ship.ShipToLastName = "Spade";
            // Ship.ShipToStreet = "456 Shipping St.";
            // Ship.ShipToStreet2 = "Apt A";
            // Ship.ShipToCity = "Las Vegas";
            // Ship.ShipToState = "NV";
            // Ship.ShipToZip = "99999";
            // ShipToCountry code is based on numeric ISO country codes. (e.g. 840 = USA)
            // For more information, refer to the Payflow Pro Developer's Guide.
            // Ship.ShipToCountry = "840";
            // Ship.ShipToPhone = "555-123-1233";
            // Secondary phone numbers (could be mobile number etc).
            // Ship.ShipToPhone2 = "555-333-1222";
            // Ship.ShipToEmail = "*****@*****.**";
            // Ship.ShipFromZip = Bill.BillToZip;
            // Following 2 items are just for reporting purposes and are not required.
            // Ship.ShipCarrier = "UPS";
            // Ship.ShipMethod = "Ground";
            //Inv.ShipTo = Ship;

            // ECHODATA allows you to trigger data sent in the request to be returned in the request.
            // "ADDRESS" will return both shipping and billing address data, if sent.
            // "USER" will return User Information, set below.
            // "CUSTDATA" returns miscellaneous fields.  Refer to the developer guide.
            //Inv.EchoData = "USER";

            // ***  Create Customer Data ***
            // There are additional CustomerInfo parameters that are used for Level 2 Purchase Cards.
            // Refer to the Payflow Pro Developer’s Guide and consult with your Internet
            // Merchant Bank regarding what parameters to send.
            // Some of the parameters could include:
            //
            //CustomerInfo CustInfo = new CustomerInfo();
            //CustInfo.CustCode = "CustCode123";    // Customer Code
            //CustInfo.CustId = "CustId123";
            //CustInfo.CustIP = "255.255.255.255";  // Customer's IP Address
            //Inv.CustomerInfo = CustInfo;

            // *** Send User fields ***
            // You can send up to ten string type parameters to store temporary data (for example, variables,
            // session IDs, order numbers, and so on). These fields will be echoed back either via API response
            // or as part of the Silent / Return post if using the hosted checkout page.
            //
            // Note: UserItem1 through UserItem10 are not displayed to the customer and are not stored in
            // the PayPal transaction database.
            //
            // For these fields to echoed back in the response, you need to set the ECHODATA object.
            //UserItem nUser = new UserItem();
            //nUser.UserItem1 = "TUSER1";
            //nUser.UserItem2 = "TUSER2";
            //Inv.UserItem = nUser;

            // *** Create Soft Descriptor Data ***
            // There are additional MerchantInfo parameters that are used for Level 2 Purchase Cards
            // to change the Merchant Name and other information that is shown on a card holders statement.
            // Refer to the Payflow Gateway Developer's Guide for more information.
            //
            //MerchantInfo MerchInfo = new MerchantInfo();
            //MerchInfo.MerchantName = "My Company Name";
            //MerchInfo.MerchantCity = "My Company City";
            //Inv.MerchantInfo = MerchInfo;

            // *** Create a new Payment Device - Credit Card data object. ***
            // The input parameters are Credit Card Number and Expiration Date of the Credit Card.
            // Note: Expiration date is in the format MMYY.
            CreditCard CC = new CreditCard("4111111111111111", "0125");

            // Example of Swipe Transaction.
            // See DOSwipe.cs example for more information.
            //SwipeCard Swipe = new SwipeCard(";5105105105105100=15121011000012345678?");

            // *** Card Security Code ***
            // This is the 3 or 4 digit code on either side of the Credit Card.
            // It is highly suggested that you obtain and pass this information to help prevent fraud.
            // Sending this fields could help in obtaining a lower discount rate from your Internet merchant Bank.
            // CVV2 is not required when performing a Swipe transaction as the card is present.
            CC.Cvv2 = "123";
            // Name on Credit Card is optional and not used as part of the authorization.
            // Also, this field populates the NAME field which is the same as FIRSTNAME, so if you
            // are already populating first name, do not use this field.
            //CC.Name = "Joe Smith";

            // Card on File: Stored Credential
            // A stored credential is information, including, but not limited to, an account number or a payment token.
            // It is stored by a merchant, its agent, a payment facilitator or a staged digital wallet operator to process future transactions for a cardholder.
            // Refer to the Payflow Gateway Developer Guide for more information.
            //
            // Example:
            // CITI (CIT Initial) - Signifies that the merchant is storing the cardholder credentials for the first time in anticipation of future
            // stored credential transactions. Example: A cardholder sets up a customer profile for future purchases.
            //CC.CardonFile = "CITI";

            // *** Create a new Tender - Card Tender data object. ***
            CardTender Card = new CardTender(CC);  // credit card
            // If you are doing card-present (retail)type transactions you will want to use the swipe object.  Before doing so, verify with
            // your merchant bank that you are setup to process card-present transactions and contact Payflow support to request your account
            // be setup to process these types of transactions.  You will need to request your market seqment be changed from e-commerce (default)
            // to retail.
            //CardTender Card = new CardTender(Swipe);

            // *** Create a new Sale Transaction. ***
            // The Request Id is the unique id necessary for each transaction.  If you are performing an authorization
            // - delayed capture transaction, make sure that you pass two different unique request ids for each of the
            // transaction.
            // If you pass a non-unique request id, you will receive the transaction details from the original request.
            // The only difference is you will also receive a parameter DUPLICATE indicating this request id has been used
            // before.
            // The Request Id can be any unique number such order id, invoice number from your implementation or a random
            // id can be generated using the PayflowUtility.RequestId.
            SaleTransaction Trans = new SaleTransaction(User, Connection, Inv, Card, RequestID);

            // Used to store client information; such as your cart name, version, etc.  Only informational.
            //ClientInfo cInfo = new ClientInfo();
            //cInfo.IntegrationProduct = "Shopping Cart";
            //cInfo.IntegrationVersion = "1.0";
            //Trans.ClientInfo = cInfo;

            // Transaction results (especially values for declines and error conditions) returned by each PayPal-supported
            // processor vary in detail level and in format. The Payflow Verbosity parameter enables you to control the kind
            // and level of information you want returned.
            //
            // By default, Verbosity is set to LOW. A LOW setting causes PayPal to normalize the transaction result values.
            // Normalizing the values limits them to a standardized set of values and simplifies the process of integrating
            // the Payflow SDK.
            //
            // By setting Verbosity to HIGH, you can view the processor's raw response values along with card information. This
            // setting is more verbose than the LOW or MEDIUM setting in that it returns more detailed, processor and card specific
            // information.
            //
            // Review the chapter in the Payflow Pro Developer's Guide regarding VERBOSITY and the INQUIRY function for more details.

            // Set the transaction verbosity to HIGH to display most details.
            Trans.Verbosity = "HIGH";

            // Try to submit the transaction up to 3 times with 5 second delay.  This can be used
            // in case of network issues.  The idea here is since you are posting via HTTPS behind the scenes there
            // could be general network issues, so try a few times before you tell customer there is an issue.
            int  trxCount = 1;
            bool RespRecd = false;

            while (trxCount <= 3 && !RespRecd)
            {
                // Notice we set the request id earlier in the application and outside our loop.  This way if a response was not received
                // but PayPal processed the original request, you'll receive the original response with DUPLICATE set.

                // Submit the Transaction
                Response Resp = Trans.SubmitTransaction();

                // Uncomment line below to simulate "No Response"
                //Resp = null;

                // Display the transaction response parameters.
                if (Resp != null)
                {
                    RespRecd = true;                      // Got a response.

                    // Get the Transaction Response parameters.
                    TransactionResponse TrxnResponse = Resp.TransactionResponse;

                    // Refer to the Payflow Pro .NET API Reference Guide and the Payflow Pro Developer's Guide
                    // for explanation of the items returned and for additional information and parameters available.
                    if (TrxnResponse != null)
                    {
                        Console.WriteLine("Transaction Response:");
                        Console.WriteLine("Result Code (RESULT) = " + TrxnResponse.Result);
                        Console.WriteLine("Transaction ID (PNREF) = " + TrxnResponse.Pnref);
                        Console.WriteLine("Response Message (RESPMSG) = " + TrxnResponse.RespMsg);
                        Console.WriteLine("Authorization (AUTHCODE) = " + TrxnResponse.AuthCode);
                        Console.WriteLine("Street Address Match (AVSADDR) = " + TrxnResponse.AVSAddr);
                        Console.WriteLine("Street Zip Match (AVSZIP) = " + TrxnResponse.AVSZip);
                        Console.WriteLine("International Card (IAVS) = " + TrxnResponse.IAVS);
                        Console.WriteLine("CVV2 Match (CVV2MATCH) = " + TrxnResponse.CVV2Match);
                        Console.WriteLine("------------------------------------------------------");
                        Console.WriteLine("Credit Card Information:");
                        Console.WriteLine("Last 4-digits Credit Card Number (ACCT) = " + TrxnResponse.Acct);
                        if (TrxnResponse.CardType != null)
                        {
                            Console.Write("Card Type (CARDTYPE) = ");
                            switch (TrxnResponse.CardType)
                            {
                            case "0":
                                Console.WriteLine("Visa");
                                break;

                            case "1":
                                Console.WriteLine("MasterCard");
                                break;

                            case "2":
                                Console.WriteLine("Discover");
                                break;

                            case "3":
                                Console.WriteLine("American Express");
                                break;

                            case "4":
                                Console.WriteLine("Diner's Club");
                                break;

                            case "5":
                                Console.WriteLine("JCB");
                                break;

                            case "6":
                                Console.WriteLine("Maestro");
                                break;

                            case "S":
                                Console.WriteLine("Solo");
                                break;
                            }
                        }
                        Console.WriteLine("Billing Name (FIRSTNAME, LASTNAME) = " + TrxnResponse.FirstName + " " + TrxnResponse.LastName);
                        Console.WriteLine("------------------------------------------------------");
                        Console.WriteLine("Verbosity Response:");
                        // Displays amount formatted as currency for the CurrentCulture.
                        // Due to operating system differences, you cannot be sure what currency
                        // symbol will be used.
                        //Console.WriteLine("Amount of Transaction (AMT) = " + Convert.ToDecimal(TrxnResponse.Amt).ToString("c", us));
                        Console.WriteLine("Amount of Transaction (AMT) = " + TrxnResponse.Amt);
                        Console.WriteLine("Processor AVS (PROCAVS) = " + TrxnResponse.ProcAVS);
                        Console.WriteLine("Processor CSC (PROCCVV2) = " + TrxnResponse.ProcCVV2);
                        Console.WriteLine("Processor Result (HOSTCODE) = " + TrxnResponse.HostCode);
                        Console.WriteLine("Transaction Date/Time (TRANSTIME) = " + TrxnResponse.TransTime);
                        Console.WriteLine("Expiration Date (EXPDATE) = " + TrxnResponse.ExpDate);
                        if (TrxnResponse.TxId != null)
                        {
                            // If card is flagged as Card on file (Stored Credential) a transaction ID will be returned that is used on future reference/recurring transactions.
                            Console.WriteLine("Transaction ID (TXID) = " + TrxnResponse.TxId);
                        }
                    }

                    // Get the Fraud Response parameters.
                    // All trial accounts come with basic Fraud Protection Services enabled.
                    // Review the PayPal Manager guide to set up your Fraud Filters prior to
                    // running this sample code.
                    // If Fraud Filters are not set, you will receive a RESULT code 126.
                    FraudResponse FraudResp = Resp.FraudResponse;
                    if (FraudResp != null)
                    {
                        Console.WriteLine("------------------------------------------------------");
                        Console.WriteLine("Fraud Response:");
                        Console.WriteLine("Pre-Filters (PREFPSMSG) = " + FraudResp.PreFpsMsg);
                        Console.WriteLine("Post-Filters (POSTFPSMSG) = " + FraudResp.PostFpsMsg);
                    }

                    // The details below describe what you'd see in the raw response which can be seen in the log file.
                    //
                    // Was this a duplicate transaction, i.e. the request ID was NOT changed.
                    // Remember, a duplicate response will return the results of the original transaction which
                    // could be misleading if you are debugging your software.
                    // For Example, let's say you got a result code 4, Invalid Amount from the original request because
                    // you were sending an amount like: 1,050.98.  Since the comma is invalid, you'd receive result code 4.
                    // RESULT=4&PNREF=V18A0C24920E&RESPMSG=Invalid amount&PREFPSMSG=No Rules Triggered
                    // Now, let's say you modified your code to fix this issue and ran another transaction but did not change
                    // the request ID.  Notice the PNREF below is the same as above, but DUPLICATE=1 is now appended.
                    // RESULT=4&PNREF=V18A0C24920E&RESPMSG=Invalid amount&DUPLICATE=1
                    // This would tell you that you are receiving the results from a previous transaction.  This goes for
                    // all transactions even a Sale transaction.  In this example, let's say a customer ordered something and got
                    // a valid response and now a different customer with different credit card information orders something, but again
                    // the request ID is NOT changed, notice the results of these two sales.  In this case, you would have not received
                    // funds for the second order.
                    // First order: RESULT=0&PNREF=V79A0BC5E9CC&RESPMSG=Approved&AUTHCODE=166PNI&AVSADDR=X&AVSZIP=X&CVV2MATCH=Y&IAVS=X
                    // Second order: RESULT=0&PNREF=V79A0BC5E9CC&RESPMSG=Approved&AUTHCODE=166PNI&AVSADDR=X&AVSZIP=X&CVV2MATCH=Y&IAVS=X&DUPLICATE=1
                    // Again, notice the PNREF is from the first transaction, this goes for all the other fields as well.
                    // It is suggested that your use this to your benefit to prevent duplicate transaction from the same customer, but you want
                    // to check for DUPLICATE=1 to ensure it is not the same results as a previous one.
                    //
                    // Since we are using objects instead of the raw name-value-pairs, you'd check the Duplicate parameter of the TrxnResponse object.
                    Console.WriteLine("------------------------------------------------------");
                    Console.WriteLine("Duplicate Response:");
                    string DupMsg;
                    if (TrxnResponse.Duplicate == "1")
                    {
                        DupMsg = "Duplicate Transaction";
                    }
                    else
                    {
                        DupMsg = "Not a Duplicate Transaction";
                    }
                    Console.WriteLine(("Duplicate Transaction (DUPLICATE) = " + DupMsg));

                    // Part of accepting credit cards or PayPal is to determine what your business rules are.  Basically, what risk are you
                    // willing to take, especially with credit cards.  The code below gives you an idea of how to check the results returned
                    // so you can determine how to handle the transaction.
                    //
                    // This is not an exhaustive list of failures or issues that could arise.  Review the list of Result Code's in the
                    // Developer Guide and add logic as you deem necessary.
                    // These responses are just an example of what you can do and how you handle the response received
                    // from the bank/PayPal is dependent on your own business rules and needs.

                    string RespMsg;
                    // Evaluate Result Code
                    if (TrxnResponse.Result < 0)
                    {
                        // Transaction failed.
                        RespMsg = "There was an error processing your transaction. Please contact Customer Service." +
                                  Environment.NewLine + "Error: " + TrxnResponse.Result.ToString();
                    }
                    else if (TrxnResponse.Result == 1 || TrxnResponse.Result == 26)
                    {
                        // This is just checking for invalid login credentials.  You normally would not display this type of message.
                        // Result code 26 will be issued if you do not provide both the <vendor> and <user> fields.
                        // Remember: <vendor> = your merchant (login id), <user> = <vendor> unless you created a seperate <user> for Payflow Pro.
                        //
                        // The other most common error with authentication is result code 1, user authentication failed.  This is usually
                        // due to invalid account information or ip restriction on the account.  You can verify ip restriction by logging
                        // into Manager.  See Service Settings >> Allowed IP Addresses.  Lastly it could be you forgot the path "/transaction"
                        // on the URL.
                        RespMsg = "Account configuration issue.  Please verify your login credentials.";
                    }
                    else if (TrxnResponse.Result == 0)
                    {
                        // Example of a message you might want to display with an approved transaction.
                        RespMsg = "Your transaction was approved. Will ship in 24 hours.";

                        // Even though the transaction was approved, you still might want to check for AVS or CVV2(CSC) prior to
                        // accepting the order.  Do realize that credit cards are approved (charged) regardless of the AVS/CVV2 results.
                        // Should you decline (void) the transaction, the card will still have a temporary charge (approval) on it.
                        //
                        // Check AVS - Street/Zip
                        // In the message below it shows what failed, ie street, zip or cvv2.  To prevent fraud, it is suggested
                        // you only give a generic billing error message and not tell the card-holder what is actually wrong.  However,
                        // that decision is yours.
                        //
                        // Also, it is totally up to you on if you accept only "Y" or allow "N" or "X".  You need to decide what
                        // business logic and liability you want to accept with cards that either don't pass the check or where
                        // the bank does not participate or return a result.  Remember, AVS is mostly used in the US but some foreign
                        // banks do participate.
                        //
                        // Remember, this just an example of what you might want to do.
                        if (TrxnResponse.AVSAddr != "Y")
                        {
                            // Display message that transaction was not accepted.  At this time, you
                            // could display message that information is incorrect and redirect user
                            // to re-enter STREET and ZIP information.  However, there should be some sort of
                            // 3 strikes your out check.
                            RespMsg = "Your billing (street) information does not match. Please re-enter.";
                            // Here you might want to put in code to flag or void the transaction depending on your needs.
                        }
                        if (TrxnResponse.AVSZip != "Y")
                        {
                            // Display message that transaction was not accepted.  At this time, you
                            // could display message that information is incorrect and redirect user
                            // to re-enter STREET and ZIP information.  However, there should be some sort of
                            // 3 strikes your out check.
                            RespMsg = "Your billing (zip) information does not match. Please re-enter.";
                            // Here you might want to put in code to flag or void the transaction depending on your needs.
                        }
                        if (TrxnResponse.CVV2Match != "Y")
                        {
                            // Display message that transaction was not accepted.  At this time, you
                            // could display message that information is incorrect.  Normally, to prevent
                            // fraud you would not want to tell a customer that the 3/4 digit number on
                            // the credit card was invalid.
                            RespMsg = "Your billing (cvv2) information does not match. Please re-enter.";
                            // Here you might want to put in code to flag or void the transaction depending on your needs.
                        }
                    }
                    else if (TrxnResponse.Result == 12)
                    {
                        // Hard decline from bank.  Customer will need to use another card or payment type.
                        RespMsg = "Your transaction was declined.";
                    }
                    else if (TrxnResponse.Result == 13)
                    {
                        // Voice authorization required.  You would need to contact your merchant bank to obtain a voice authorization.  If authorization is
                        // given, you can manually enter it via Virtual Terminal in PayPal Manager or via the VoiceAuthTransaction object.
                        RespMsg = "Your Transaction is pending. Contact Customer Service to complete your order.";
                    }
                    else if (TrxnResponse.Result == 23 || TrxnResponse.Result == 24)
                    {
                        // Issue with credit card number or expiration date.
                        RespMsg = "Invalid credit card information. Please re-enter.";
                    }
                    else if (TrxnResponse.Result == 125)
                    {
                        // Using the Fraud Protection Service.
                        // This portion of code would be is you are using the Fraud Protection Service, this is for US merchants only.
                        // 125, 126 and 127 are Fraud Responses.
                        // Refer to the Payflow Pro Fraud Protection Services User's Guide or Website Payments Pro Payflow Edition - Fraud Protection Services User's Guide.
                        RespMsg = "Your Transactions has been declined. Contact Customer Service.";
                    }
                    else if (TrxnResponse.Result == 126)
                    {
                        // One of more filters were triggered.  Here you would check the fraud message returned if you
                        // want to validate data.  For example, you might have 3 filters set, but you'll allow 2 out of the
                        // 3 to consider this a valid transaction.  You would then send the request to the server to modify the
                        // status of the transaction.  Performing this function is outside the scope of this sample, refer
                        // to the Fraud Developer's Guide.
                        //
                        // Decline transaction if AVS fails.
                        if (TrxnResponse.AVSAddr != "Y" || TrxnResponse.AVSZip != "Y")
                        {
                            // Display message that transaction was not accepted.  At this time, you
                            // could display message that information is incorrect and redirect user
                            // to re-enter STREET and ZIP information.  However, there should be some sort of
                            // strikes your out check.
                            RespMsg = "Your billing information does not match.  Please re-enter.";
                        }
                        else
                        {
                            RespMsg = "Your Transaction is Under Review. We will notify you via e-mail if accepted.";
                        }
                        RespMsg = "Your Transaction is Under Review. We will notify you via e-mail if accepted.";
                    }
                    else if (TrxnResponse.Result == 127)
                    {
                        // There is an issue with checking this transaction through the fraud service.
                        // You will need to manually approve.
                        RespMsg = "Your Transaction is Under Review. We will notify you via e-mail if accepted.";
                    }
                    else
                    {
                        // Error occurred, display normalized message returned.
                        RespMsg = TrxnResponse.RespMsg;
                    }

                    // Display Message
                    Console.WriteLine("------------------------------------------------------");
                    Console.WriteLine("User/System Response:");
                    Console.WriteLine("User Message (RESPMSG) = " + RespMsg);
                    Console.WriteLine("System Message (TRXNRESPONSE.RESPMSG) = " + TrxnResponse.RespMsg);

                    // Display the status response of the transaction.
                    // This is just additional information and normally would not be used in production.
                    // Your business logic should be built around the result code returned as shown above.
                    Console.WriteLine("------------------------------------------------------");
                    Console.WriteLine("Overall Transaction Status: " + PayflowUtility.GetStatus(Resp));

                    // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                    // This is not normally used in production.
                    Context TransCtx = Resp.TransactionContext;
                    if (TransCtx != null && TransCtx.getErrorCount() > 0)
                    {
                        Console.WriteLine("------------------------------------------------------");
                        Console.WriteLine("Transaction Context Errors: " + TransCtx.ToString());
                    }
                    Console.WriteLine("------------------------------------------------------");
                    Console.WriteLine("Press Enter to Exit ...");
                    Console.ReadLine();
                }
                else
                {
                    Thread.Sleep(5000);                     // let's wait 5 seconds to see if this is a temporary network issue.
                    Console.WriteLine("Retry #: " + trxCount.ToString());
                    trxCount++;
                }
            }
            if (!RespRecd)
            {
                Console.WriteLine("There is a problem obtaining an authorization for your order.");
                Console.WriteLine("Please contact Customer Support.");
                Console.WriteLine("------------------------------------------------------");
                Console.WriteLine("Press Enter to Exit ...");
                Console.ReadLine();
            }
        }
        /// <summary>
        /// Refunds a payment
        /// </summary>
        /// <param name="refundPaymentRequest">Request</param>
        /// <returns>Result</returns>
        public RefundPaymentResult Refund(RefundPaymentRequest refundPaymentRequest)
        {
            var result = new RefundPaymentResult();
            
            // Check license
            bool isLicensed = this._licenseService.IsLicensed(HttpContext.Current.Request.Url.Host);
            if (!isLicensed && refundPaymentRequest.Order.OrderTotal > 5.00M)
            {
                result.AddError("The trial license can be used to submit order of $5.00 or less. Please purchase a full license at our website.");
                return result;
            }

            string transactionId = refundPaymentRequest.Order.CaptureTransactionId;

            // Create the Payflow Data Objects.
            // Create the User data object with the required user details.
            UserInfo payflowUser = _payPalHelper.GetUserInfo();

            // Create the Payflow Connection data object with the required connection details.                        
            PayflowConnectionData payflowConn = new PayflowConnectionData(_payPalHelper.GetPayflowProHost());

            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            Invoice invoice = new Invoice();

            // Set Amount.
            PayPal.Payments.DataObjects.Currency refundAmount = new PayPal.Payments.DataObjects.Currency(refundPaymentRequest.AmountToRefund);
            invoice.Amt = refundAmount;
            invoice.PoNum = refundPaymentRequest.Order.Id.ToString();
            invoice.InvNum = refundPaymentRequest.Order.Id.ToString();

            CreditTransaction trans = new CreditTransaction(transactionId, payflowUser, payflowConn, invoice, PayflowUtility.RequestId);
            Response resp = trans.SubmitTransaction();
                                                
            // Process the Payflow response.
            if (resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse trxResp = resp.TransactionResponse;
                if (trxResp != null)
                {
                    if (trxResp.Result == 0)
                    {
                        if (refundPaymentRequest.IsPartialRefund)
                            result.NewPaymentStatus = PaymentStatus.PartiallyRefunded;
                        else
                            result.NewPaymentStatus = PaymentStatus.Refunded;
                    }
                    else
                    {
                        result.AddError(string.Format("Refund RESULT: {0}-{1}", trxResp.Result, trxResp.RespMsg));
                    }
                }
            }

            return result;
        }
Пример #20
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DOSwipe.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();

            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            Invoice Inv = new Invoice();

            // Set Amount.
            Currency Amt = new Currency(new decimal(25.25));

            Inv.Amt      = Amt;
            Inv.PoNum    = "PO12345";
            Inv.InvNum   = "INV12345";
            Inv.Comment1 = "Swipe Example";

            // Create a new Payment Device - Swipe data object.  The input parameter is Swipe Data.
            // Used to pass the Track 1 or Track 2 data (the card’s magnetic stripe information) for card-present
            // transactions. Include either Track 1 or Track 2 data—not both. If Track 1 is physically damaged,
            // the POS application can send Track 2 data instead.

            // The parameter data for the SwipeCard object is usually obtained with a card reader.
            // NOTE: The SWIPE parameter is not supported on accounts where PayPal is the Processor.
            SwipeCard Swipe = new SwipeCard(";5105105105105100=20121011000012345678?");
            // Create a new Tender - Swipe Tender data object.
            CardTender Card = new CardTender(Swipe);

            // Create a new Sale Transaction using Swipe data.
            SaleTransaction Trans = new SaleTransaction(User, Connection, Inv, Card, PayflowUtility.RequestId);

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                    Console.WriteLine("AUTHCODE = " + TrxnResponse.AuthCode);
                    // If value is true, then the Request ID has not been changed and the original response
                    // of the original transction is returned.
                    Console.WriteLine("DUPLICATE = " + TrxnResponse.Duplicate);
                }

                // Display the response.
                Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));

                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                }
            }
            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
        /// <summary>
        /// Voids a payment
        /// </summary>
        /// <param name="voidPaymentRequest">Request</param>
        /// <returns>Result</returns>
        public VoidPaymentResult Void(VoidPaymentRequest voidPaymentRequest)
        {
            var result = new VoidPaymentResult();

            // Check license
            bool isLicensed = this._licenseService.IsLicensed(HttpContext.Current.Request.Url.Host);
            if (!isLicensed && voidPaymentRequest.Order.OrderTotal > 5.00M)
            {
                result.AddError("The trial license can be used to submit order of $5.00 or less. Please purchase a full license at our website.");
                return result;
            }

            string transactionId = voidPaymentRequest.Order.AuthorizationTransactionId;
            if (String.IsNullOrEmpty(transactionId))
                transactionId = voidPaymentRequest.Order.CaptureTransactionId;

            // Create the Payflow Data Objects.
            // Create the User data object with the required user details.
            UserInfo payflowUser = _payPalHelper.GetUserInfo();

            // Create the Payflow Connection data object with the required connection details.                        
            PayflowConnectionData payflowConn = new PayflowConnectionData(_payPalHelper.GetPayflowProHost());

            // Create a new Void Transaction.
            // The ORIGID is the PNREF no. for a previous transaction.
            VoidTransaction trans = new VoidTransaction(transactionId, payflowUser, payflowConn, PayflowUtility.RequestId);

            // Submit the Transaction
            Response resp = trans.SubmitTransaction();

            // Process the Payflow response.
            if (resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse trxResp = resp.TransactionResponse;
                if (trxResp != null)
                {
                    if (trxResp.Result == 0)
                    {
                        result.NewPaymentStatus = PaymentStatus.Voided;
                    }
                    else
                    {
                        result.AddError(string.Format("Void RESULT: {0}-{1}", trxResp.Result, trxResp.RespMsg));
                    }
                }
            }

            return result;
        }
        /// <summary>
        /// Process payment
        /// </summary>
        /// <param name="paymentInfo">Payment info required for an order processing</param>
        /// <param name="customer">Customer</param>
        /// <param name="OrderGuid">Unique order identifier</param>
        /// <param name="processPaymentResult">Process payment result</param>
        public void ProcessPayment(PaymentInfo paymentInfo, Customer customer, Guid OrderGuid, ref ProcessPaymentResult processPaymentResult)
        {
            InitSettings();
            TransactMode transactionMode = GetCurrentTransactionMode();

            //little hack here
            CultureInfo userCulture = Thread.CurrentThread.CurrentCulture;
            NopContext.Current.SetCulture(new CultureInfo("en-US"));
            try
            {
                BillTo to = new BillTo();
                to.FirstName = paymentInfo.BillingAddress.FirstName;
                to.LastName = paymentInfo.BillingAddress.LastName;
                to.Street = paymentInfo.BillingAddress.Address1;
                to.City = paymentInfo.BillingAddress.City;
                to.Zip = paymentInfo.BillingAddress.ZipPostalCode;
                if (paymentInfo.BillingAddress.StateProvince != null)
                    to.State = paymentInfo.BillingAddress.StateProvince.Abbreviation;
                ShipTo to2 = new ShipTo();
                to2.ShipToFirstName = paymentInfo.ShippingAddress.FirstName;
                to2.ShipToLastName = paymentInfo.ShippingAddress.LastName;
                to2.ShipToStreet = paymentInfo.ShippingAddress.Address1;
                to2.ShipToCity = paymentInfo.ShippingAddress.City;
                to2.ShipToZip = paymentInfo.ShippingAddress.ZipPostalCode;
                if (paymentInfo.ShippingAddress.StateProvince != null)
                    to2.ShipToState = paymentInfo.ShippingAddress.StateProvince.Abbreviation;

                Invoice invoice = new Invoice();
                invoice.BillTo = to;
                invoice.ShipTo = to2;
                invoice.InvNum = OrderGuid.ToString();
                //For values which have more than two decimal places 
                //Currency Amt = new Currency(new decimal(25.1214));
                //Amt.NoOfDecimalDigits = 2;
                //If the NoOfDecimalDigits property is used then it is mandatory to set one of the following properties to true.
                //Amt.Round = true;
                //Amt.Truncate = true;
                //Inv.Amt = Amt;
                decimal orderTotal = Math.Round(paymentInfo.OrderTotal, 2);
                //UNDONE USD only
                invoice.Amt = new PayPal.Payments.DataObjects.Currency(orderTotal, CurrencyManager.PrimaryStoreCurrency.CurrencyCode);

                string creditCardExp = string.Empty;
                if (paymentInfo.CreditCardExpireMonth < 10)
                {
                    creditCardExp = "0" + paymentInfo.CreditCardExpireMonth.ToString();
                }
                else
                {
                    creditCardExp = paymentInfo.CreditCardExpireMonth.ToString();
                }
                creditCardExp = creditCardExp + paymentInfo.CreditCardExpireYear.ToString().Substring(2, 2);
                CreditCard credCard = new CreditCard(paymentInfo.CreditCardNumber, creditCardExp);
                credCard.Cvv2 = paymentInfo.CreditCardCVV2;
                CardTender tender = new CardTender(credCard);
                // <vendor> = your merchant (login id)  
                // <user> = <vendor> unless you created a separate <user> for Payflow Pro
                // partner = paypal
                UserInfo userInfo = new UserInfo(user, vendor, partner, password);
                string url = GetPaypalUrl();
                PayflowConnectionData payflowConnectionData = new PayflowConnectionData(url, 443, null, 0, null, null);

                Response response = null;
                if (transactionMode == TransactMode.Authorize)
                {
                    response = new AuthorizationTransaction(userInfo, payflowConnectionData, invoice, tender, PayflowUtility.RequestId).SubmitTransaction();
                }
                else
                {
                    response = new SaleTransaction(userInfo, payflowConnectionData, invoice, tender, PayflowUtility.RequestId).SubmitTransaction();
                }

                if (response.TransactionResponse != null)
                {
                    if (response.TransactionResponse.Result == 0)
                    {
                        processPaymentResult.AuthorizationTransactionID = response.TransactionResponse.Pnref;
                        processPaymentResult.AuthorizationTransactionResult = response.TransactionResponse.RespMsg;

                        if (transactionMode == TransactMode.Authorize)
                        {
                            processPaymentResult.PaymentStatus = PaymentStatusEnum.Authorized;
                        }
                        else
                        {
                            processPaymentResult.PaymentStatus = PaymentStatusEnum.Paid;
                        }
                    }
                    else
                    {
                        processPaymentResult.Error = string.Format("{0} - {1}", response.TransactionResponse.Result, response.TransactionResponse.RespMsg);
                        processPaymentResult.FullError = string.Format("Response Code : {0}. Response Description : {1}", response.TransactionResponse.Result, response.TransactionResponse.RespMsg);
                    }
                }
                else
                {
                    processPaymentResult.Error = "Error during checkout";
                    processPaymentResult.FullError = "Error during checkout";
                }
            }
            catch (Exception exc)
            {
                throw;
            }
            finally
            {
                NopContext.Current.SetCulture(userCulture);
            }
        }
Пример #23
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DOPartialAuth.cs");
            Console.WriteLine("------------------------------------------------------");

            // Refer to the DOSaleComplete.cs sample for a more detailed explaination of fields.
            //
            //Create the Data Objects.
            // Creates a CultureInfo for English in the U.S.
            // Not necessary, just here for example of using currency formatting.
            CultureInfo us         = new CultureInfo("en-US");
            String      usCurrency = "USD";

            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();

            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            Invoice Inv = new Invoice();

            // Set the amount and currency being used.
            // See the Developer's Guide for the list of the three-digit currency codes.
            // Refer to the Payflow Pro Developer's Guide on testing parameters for Partial Authorization.
            // In this example, sending $120.00 will generate a partial approval of only $100.00.

            Currency Amt = new Currency(new decimal(120.00), usCurrency);

            Inv.Amt    = Amt;
            Inv.PoNum  = "PO12345";
            Inv.InvNum = "INV12345";

            // Set the Billing Address details.
            BillTo Bill = new BillTo();

            Bill.BillToFirstName = "Sam";
            Bill.BillToLastName  = "Smith";
            Bill.BillToStreet    = "123 Main St.";
            Bill.BillToZip       = "12345";
            Inv.BillTo           = Bill;

            // Create a new Payment Device - Credit Card data object.
            // The input parameters are Credit Card Number and Expiration Date of the Credit Card.
            CreditCard CC = new CreditCard("5105105105105100", "0115");

            CC.Cvv2 = "123";

            // Create a new Tender - Card Tender data object.
            CardTender Card = new CardTender(CC);

            // Create a new Auth Transaction.
            AuthorizationTransaction Trans = new AuthorizationTransaction(User, Connection, Inv, Card, PayflowUtility.RequestId);

            // Set the flag to request that Partial Authorizations be accepted.
            Trans.PartialAuth = "Y";

            // You must set the transaction verbosity to HIGH to display the appropriate response.
            Trans.Verbosity = "HIGH";

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                // Refer to the Payflow Pro .NET API Reference Guide and the Payflow Pro Developer's Guide
                // for explanation of the items returned and for additional information and parameters available.
                if (TrxnResponse != null)
                {
                    Console.WriteLine("Transaction Response:");
                    Console.WriteLine("Result Code (RESULT) = " + TrxnResponse.Result);
                    Console.WriteLine("Transaction ID (PNREF) = " + TrxnResponse.Pnref);
                    // If the amount is partially authorized the RESPMSG will be "Partial Approval".
                    // If the amount is fully authorized the RESPMSG will be "Approved".
                    Console.WriteLine("Response Message (RESPMSG) = " + TrxnResponse.RespMsg);
                    Console.WriteLine("Authorization (AUTHCODE) = " + TrxnResponse.AuthCode);
                    Console.WriteLine("Street Address Match (AVSADDR) = " + TrxnResponse.AVSAddr);
                    Console.WriteLine("Streep Zip Match (AVSZIP) = " + TrxnResponse.AVSZip);
                    Console.WriteLine("International Card (IAVS) = " + TrxnResponse.IAVS);
                    Console.WriteLine("CVV2 Match (CVV2MATCH) = " + TrxnResponse.CVV2Match);
                    Console.WriteLine("------------------------------------------------------");
                    // These are all new items returned when VERBOSITY=HIGH.
                    Console.WriteLine("Credit Card Information:");
                    Console.WriteLine("Last 4-digits Credit Card Number (ACCT) = " + TrxnResponse.Acct);
                    if (TrxnResponse.CardType != null)
                    {
                        Console.Write("Card Type (CARDTYPE) = ");
                        switch (TrxnResponse.CardType)
                        {
                        case "0":
                            Console.WriteLine("Visa");
                            break;

                        case "1":
                            Console.WriteLine("MasterCard");
                            break;

                        case "2":
                            Console.WriteLine("Discover");
                            break;

                        case "3":
                            Console.WriteLine("American Express");
                            break;

                        case "4":
                            Console.WriteLine("Diner's Club");
                            break;

                        case "5":
                            Console.WriteLine("JCB");
                            break;

                        case "6":
                            Console.WriteLine("Maestro");
                            break;

                        default:
                            Console.WriteLine("Unknown: " + TrxnResponse.CardType);                                     // new or unknown card type
                            break;
                        }
                    }
                    Console.WriteLine("Expiration Date (EXPDATE) = " + TrxnResponse.ExpDate);
                    Console.WriteLine("Billing Name (FIRSTNAME, LASTNAME) = " + TrxnResponse.FirstName + " " + TrxnResponse.LastName);
                    Console.WriteLine("------------------------------------------------------");
                    Console.WriteLine("Verbosity Response:");
                    Console.WriteLine("Processor AVS (PROCAVS) = " + TrxnResponse.ProcAVS);
                    Console.WriteLine("Processor CSC (PROCCVV2) = " + TrxnResponse.ProcCVV2);
                    Console.WriteLine("Processor Result (HOSTCODE) = " + TrxnResponse.HostCode);
                    Console.WriteLine("Transaction Date/Time (TRANSTIME) = " + TrxnResponse.TransTime);

                    // For Partial Authorization you will need to check the following 3 items to see if the card was
                    // fully authorized or partially authorized.
                    //
                    // For example, if you send in a request of $120.00 (AMT=120.00) and the card only has $100.00 of available credit on it,
                    // the card will be authorized for $100.00, the AMT field will be changed from 120 to 100 (AMT=100.00 to reflect this.
                    // The balance of $20.00 which is still due will be returned in the BALAMT (BALAMT=-20.00) field and the ORIGAMT field
                    // will contain the original requested amount (ORIGAMT=120.00).
                    Console.WriteLine("------------------------------------------------------");
                    Console.WriteLine("Partial Payment Response:");
                    Console.WriteLine("Original Amount (ORIGAMT) = " + TrxnResponse.OrigAmt);
                    Console.WriteLine("Amount of Transaction (AMT) = " + TrxnResponse.Amt);
                    if (Convert.ToDecimal(TrxnResponse.BalAmt) == 0 & (Convert.ToDecimal(TrxnResponse.OrigAmt) > Convert.ToDecimal(TrxnResponse.Amt)))
                    {
                        decimal BalDue = Convert.ToDecimal(TrxnResponse.OrigAmt) - Convert.ToDecimal(TrxnResponse.Amt);
                        if (BalDue > 0)
                        {
                            // Seems a balance is still due, collect the difference.
                            Console.WriteLine("Please provide additional payment of: " + BalDue.ToString("c", us));
                        }
                        else if (BalDue == 0)
                        {
                            Console.WriteLine("Transaction is Paid in Full.");
                        }
                        else
                        {
                            // Card still has available balance on it.
                            Console.WriteLine("Balance Amount (BALAMT) = " + TrxnResponse.BalAmt);
                        }
                    }
                    Console.WriteLine("------------------------------------------------------");
                    Console.WriteLine("DUPLICATE = " + TrxnResponse.Duplicate);
                }

                // Display the response.
                Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));

                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                }
            }
            Console.WriteLine(Environment.NewLine + "Press Enter to Exit ...");
            Console.ReadLine();
        }
Пример #24
0
 /// <summary>
 ///     Constructor.
 /// </summary>
 /// <param name="origId">Original Transaction Id</param>
 /// <param name="userInfo">User Info object populated with user credentials.</param>
 /// <param name="payflowConnectionData">Connection credentials object.</param>
 /// <param name="requestId">Request Id</param>
 /// <remarks>
 ///     Reference credit transaction can be performed on successful
 ///     transactions in order to credit the amount. Therefore, a
 ///     reference credit transaction takes the PNRef of a previous transaction.
 /// </remarks>
 /// <example>
 ///     <code lang="C#" escaped="false">
 ///     ...............
 ///     // Populate data objects
 ///     ...............
 ///     // Create a new Credit Transaction.
 ///     // Following is an example of a reference credit type of transaction.
 ///     CreditTransaction Trans = new CreditTransaction("PNRef of a previous transaction.",
 ///         User, Connection, PayflowUtility.RequestId);
 ///     // Submit the transaction.
 ///     Response Resp = Trans.SubmitTransaction();
 ///     if (Resp != null)
 ///     {
 ///         // Get the Transaction Response parameters.
 ///         TransactionResponse TrxnResponse =  Resp.TransactionResponse;
 ///         if (TrxnResponse != null)
 ///         {
 ///             Console.WriteLine("RESULT = " + TrxnResponse.Result);
 ///             Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
 ///             Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
 ///         }
 ///     }
 ///     // Get the Context and check for any contained SDK specific errors.
 ///     Context Ctx = Resp.TransactionContext;
 ///     if (Ctx != null &amp;&amp; Ctx.getErrorCount() > 0)
 ///     {
 ///         Console.WriteLine(Environment.NewLine + "Errors = " + Ctx.ToString());
 ///     }
 ///
 ///     </code>
 ///     <code lang="Visual Basic" escaped="false">
 ///     ...............
 ///     ' Populate data objects
 ///     ...............
 ///     ' Create a new Credit Transaction.
 ///     ' Following is an example of a reference credit type of transaction.
 ///     Dim Trans As CreditTransaction = New CreditTransaction("PNRef of a previous transaction.", User,
 ///                         Connection, PayflowUtility.RequestId)
 ///         ' Submit the transaction.
 ///     Dim Resp As Response = Trans.SubmitTransaction()
 ///     If Not Resp Is Nothing Then
 ///         ' Get the Transaction Response parameters.
 ///         Dim TrxnResponse As TransactionResponse = Resp.TransactionResponse
 ///         If Not TrxnResponse Is Nothing Then
 ///             Console.WriteLine("RESULT = " + TrxnResponse.Result)
 ///             Console.WriteLine("PNREF = " + TrxnResponse.Pnref)
 ///             Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg)
 ///         End If
 ///     End If
 ///     ' Get the Context and check for any contained SDK specific errors.
 ///     Dim Ctx As Context = Resp.TransactionContext
 ///     If Not Ctx Is Nothing AndAlso Ctx.getErrorCount() > 0 Then
 ///         Console.WriteLine(Environment.NewLine + "Errors = " + Ctx.ToString())
 ///     End If
 ///     </code>
 /// </example>
 public CreditTransaction(string origId, UserInfo userInfo, PayflowConnectionData payflowConnectionData,
                          string requestId) : base(PayflowConstants.TrxtypeCredit, userInfo, payflowConnectionData, null, requestId)
 {
     _mOrigId = origId;
 }
Пример #25
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DOCapture.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();
            ///////////////////////////////////////////////////////////////////

            // If you want to change the amount being captured, you'll need to set the Amount object.
            // Invoice Inv = new Invoice();
            // Set the amount object if you want to change the amount from the original authorization.
            // Currency Code USD is US ISO currency code.  If no code passed, USD is default.
            // See the Developer//s Guide for the list of three-character currency codes available.
            // Currency Amt = new Currency(new decimal(25.12));
            // Inv.Amt = Amt;
            // CaptureTransaction Trans = new CaptureTransaction("<ORIGINAL_PNREF>", User, Connection, Inv, PayflowUtility.RequestId);

            // Create a new Capture Transaction for the original amount of the authorization.  See above if you
            // need to change the amount.
            CaptureTransaction Trans = new CaptureTransaction("<ORIGINAL_PNREF>", User, Connection, PayflowUtility.RequestId);

            // Indicates if this Delayed Capture transaction is the last capture you intend to make.
            // The values are: Y (default) / N
            // NOTE: If CAPTURECOMPLETE is Y, any remaining amount of the original reauthorized transaction
            // is automatically voided.  Also, this is only used for UK and US accounts where PayPal is acting
            // as your bank.
            // Trans.CaptureComplete = "N";

            // Set the transaction verbosity to HIGH to display most details.
            Trans.Verbosity = "HIGH";

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                    Console.WriteLine("AUTHCODE = " + TrxnResponse.AuthCode);
                    Console.WriteLine("AVSADDR = " + TrxnResponse.AVSAddr);
                    Console.WriteLine("AVSZIP = " + TrxnResponse.AVSZip);
                    Console.WriteLine("IAVS = " + TrxnResponse.IAVS);
                    // If value is true, then the Request ID has not been changed and the original response
                    // of the original transction is returned.
                    Console.WriteLine("DUPLICATE = " + TrxnResponse.Duplicate);
                }

                // Get the Fraud Response parameters.
                FraudResponse FraudResp = Resp.FraudResponse;

                // Display Fraud Response parameter
                if (FraudResp != null)
                {
                    Console.WriteLine("PREFPSMSG = " + FraudResp.PreFpsMsg);
                    Console.WriteLine("POSTFPSMSG = " + FraudResp.PostFpsMsg);
                }

                // Display the response.
                Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));

                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                }
            }
            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
Пример #26
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DOAdditionalHeaders.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();

            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            Invoice Inv = new Invoice();

            // Set Amount.
            Currency Amt = new Currency(new decimal(25.12));

            Inv.Amt    = Amt;
            Inv.PoNum  = "PO12345";
            Inv.InvNum = "INV12345";

            // Set the Billing Address details.
            BillTo Bill = new BillTo();

            Bill.BillToStreet = "123 Main St.";
            Bill.BillToZip    = "12345";
            Inv.BillTo        = Bill;

            // Create a new Payment Device - Credit Card data object.
            // The input parameters are Credit Card Number and Expiration Date of the Credit Card.
            CreditCard CC = new CreditCard("5105105105105100", "0115");

            CC.Cvv2 = "123";

            // Create a new Tender - Card Tender data object.
            CardTender Card = new CardTender(CC);
            ///////////////////////////////////////////////////////////////////

            // Create a new Sale Transaction.
            SaleTransaction Trans = new SaleTransaction(
                User, Connection, Inv, Card, PayflowUtility.RequestId);

            // Add a new custom client information header
            // to the transaction.
            Trans.AddTransHeader("X-VPS-VIT-WRAPPER-TYPE", "VRSN-CS-SAMPLE");

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                    Console.WriteLine("AUTHCODE = " + TrxnResponse.AuthCode);
                    Console.WriteLine("AVSADDR = " + TrxnResponse.AVSAddr);
                    Console.WriteLine("AVSZIP = " + TrxnResponse.AVSZip);
                    Console.WriteLine("IAVS = " + TrxnResponse.IAVS);
                    Console.WriteLine("CVV2MATCH = " + TrxnResponse.CVV2Match);
                }

                // Get the Fraud Response parameters.
                FraudResponse FraudResp = Resp.FraudResponse;
                // Display Fraud Response parameter
                if (FraudResp != null)
                {
                    Console.WriteLine("PREFPSMSG = " + FraudResp.PreFpsMsg);
                    Console.WriteLine("POSTFPSMSG = " + FraudResp.PostFpsMsg);
                }

                // Display the response.
                Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));


                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                }
            }
            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
Пример #27
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DOEncryptedSwipe.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();

            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            Invoice Inv = new Invoice();

            // Set Amount.
            Currency Amt = new Currency(new decimal(1.00));

            Inv.Amt      = Amt;
            Inv.PoNum    = "PO12345";
            Inv.InvNum   = "INV12345";
            Inv.Comment1 = "Magtek Encrypted Swipe Example";

            // Create a new Payment Device - Swipe data object.  The input parameter is Swipe Data.
            // The data passed in this example will be extracted from a Magtek Encrypted Card reader.  Please refer
            // to the Magtek SDK and documentation on how to obtain the data from the reader.
            // The parameter data for the SwipeCard object is usually obtained with a card reader and this shows
            // how to send data obtained from a Magtek Encrypted reader.
            // NOTE: The SWIPE parameter is not supported on accounts where PayPal is the Processor.

            // Create a new Magtek data object with the device serial number, track data, etc.
            MagtekInfo MT = new MagtekInfo();

            // The data below CANNOT be used for Testing. It is only here to show what the data fields look like once you
            // obtain them from the reader itself.  Refer to the Payflow Pro Developers Guide and the Appendix related to processing
            // with Magtek card readers for more information.
            // The Payflow Gateway Developer Guide and Reference found at https://developer.paypal.com/docs/classic/payflow/integration-guide/
            MT.DeviceSN            = "B32XXXXXXXXXXAA";
            MT.EncMP               = "34F29380E6AFED395472A63063B6XXXXXXXXXXXXXXXXXXXXXXXXXC987D2A1F7A50554DFC4A0D215A8AA0591D82B6DB13516F220C4CB93899";
            MT.EncryptionBlockType = "1";
            MT.EncTrack1           = "80BC13515EF76421FCXXXXXXXXXXXXXXXXXXXXXXXXX02E53C0ECCC83B1787DE05BB5D8C7FA679D0C40CC989F7FAF307FE7FD0B588261DDA0";
            MT.EncTrack2           = "4CDD6BC521B397CD2DB1324199XXXXXXXXXXXXXXXXXXXXXXXXX83A9044B397C1D14AFEE2C0BA1002";
            MT.EncTrack3           = "";
            MT.KSN            = "901188XXXXXXXXXX00F4";
            MT.MagtekCardType = "1";
            MT.MPStatus       = "61403000";
            MT.RegisteredBy   = "PayPal";
            MT.SwipedECRHost  = "MAGT";

            // When using Encrypted Card Readers you do not populate the SwipeCard object as the data from the Magtek object
            // will be used instead.
            SwipeCard Swipe = new SwipeCard("");

            Swipe.MagtekInfo = MT;

            // Create a new Tender - Swipe Tender data object.
            CardTender Card = new CardTender(Swipe);

            // Create a new Sale Transaction using Swipe data.
            SaleTransaction Trans = new SaleTransaction(User, Connection, Inv, Card, PayflowUtility.RequestId);

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                    Console.WriteLine("AUTHCODE = " + TrxnResponse.AuthCode);
                    // Magtek Response will only be available if a failure or error in the request.
                    Console.WriteLine("MAGTRESPONSE = " + TrxnResponse.MagTResponse);
                    // If value is true, then the Request ID has not been changed and the original response
                    // of the original transaction is returned.
                    Console.WriteLine("DUPLICATE = " + TrxnResponse.Duplicate);
                }

                // Display the response.
                Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));

                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                }
            }
            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
Пример #28
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DOSecureTokenAuth.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            // UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");


            // Create the Payflow  Connection data object with the required connection details.
            PayflowConnectionData Connection = new PayflowConnectionData();

            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            Invoice Inv = new Invoice();

            // Set Amount.  The amount cannot be changed once submitted.
            Currency Amt = new Currency(new decimal(25.00), "USD");

            Inv.Amt    = Amt;
            Inv.InvNum = "INV12345";

            // Set the Billing Address details.  You can also send the shipping information.  Both the Billing
            // and Shipping information can be changed if the functionality is allowed in the Configuration section
            // of Manager.  No other information submitted using a secure token call can be changed.
            BillTo Bill = new BillTo();

            Bill.BillToFirstName = "Sam";
            Bill.BillToLastName  = "Smith";
            Bill.BillToStreet    = "123 Main St.";
            Bill.BillToCity      = "Anytown";
            Bill.BillToState     = "CA";
            Bill.BillToZip       = "12345";
            Bill.BillToPhone     = "408-123-1234";
            Bill.BillToEmail     = "*****@*****.**";
            Bill.BillToCountry   = "124";
            Inv.BillTo           = Bill;

            // Create a new Payment Device - Credit Card data object.
            // The input parameters are Credit Card Number and Expiration Date of the Credit Card.
            //CreditCard CC = new CreditCard("5105105105105100", "0110");
            //CC.Cvv2 = "023";

            // Create a new Tender - Card Tender data object.
            //CardTender Card = new CardTender(CC);
            ///////////////////////////////////////////////////////////////////

            // Since we are using the hosted payment pages, you will not be sending the credit card data with the
            // Secure Token Request.  You just send all other 'sensitive' data within this request and when you
            // call the hosted payment pages, you'll only need to pass the SECURETOKEN; which is generated and returned
            // and the SECURETOKENID that was created and used in the request.
            //
            // Create a new Secure Token Authorization Transaction.  Even though this example is performing
            // an authorization, you can create a secure token using SaleTransaction too.  Only Authorization and Sale
            // type transactions are permitted.
            //
            // Remember, all data submitted as part of the Secure Token call cannot be modified at a later time.  The only exception
            // is the billing and shipping information if these items are selection in the Setup section in PayPal Manager.
            AuthorizationTransaction Trans = new AuthorizationTransaction(User, Connection, Inv, null, PayflowUtility.RequestId);

            // Set VERBOSITY to High
            Trans.Verbosity = "High";

            // Set the flag to create a Secure Token.
            Trans.CreateSecureToken = "Y";
            // The Secure Token Id must be a unique id up to 36 characters.  Using the RequestID object to
            // generate a random id, but any means to create an id can be used.
            Trans.SecureTokenId = PayflowUtility.RequestId;

            // Set the extended data value.
            ExtendData ExtData = new ExtendData("SILENTTRAN", "True");

            // Add extended data to transaction.
            Trans.AddToExtendData(ExtData);

            // IMPORTANT NOTE:
            //
            // Remember, the Secure Token can only be used once.  Once it is redeemed by a valid transaction it cannot be used again and you will
            // need to generate a new token.  Also, the token has a life time of 30 minutes.

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                    Console.WriteLine("SECURETOKEN = " + TrxnResponse.SecureToken);
                    Console.WriteLine("SECURETOKENID = " + TrxnResponse.SecureTokenId);
                    // If value is true, then the Request ID has not been changed and the original response
                    // of the original transction is returned.
                    Console.WriteLine("DUPLICATE = " + TrxnResponse.Duplicate);
                }

                if (TrxnResponse.Result == 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction was successful.");
                    Console.WriteLine(Environment.NewLine + "The next step would be to redirect to PayPal to display the hosted");
                    Console.WriteLine("checkout page to allow your customer to select and enter payment.");
                    Console.WriteLine(Environment.NewLine + "This is only a simple example, which does not take into account things like");
                    Console.WriteLine(Environment.NewLine + "RETURN or SILENT POST URL, etc.");
                    Console.WriteLine(Environment.NewLine + "Press <Enter> to redirect to PayPal.");
                    Console.ReadLine();
                    // Simple way to pass token data to Payflow Link Servers.
                    String PayPalUrl = "https://payflowlink.paypal.com?securetoken=" + TrxnResponse.SecureToken + "&securetokenid=" + TrxnResponse.SecureTokenId + "&MODE=test&USER1=testuser1&ACCT=5105105105105100&EXPDATE=1212&CVV2=123";
                    //Process.Start(PayPalUrl);  // Open default browser.
                    Process.Start("iexplore.exe", PayPalUrl);
                    //Process.Start("C:\\Program Files\\Mozilla Firefox\\firefox.exe", PayPalUrl);
                }

                // Display the response.
                Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));

                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                }
            }
            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="Tender"></param>
 /// <param name="Invoice"></param>
 /// <param name="UserInfo"></param>
 /// <param name="PayflowConnectionData"></param>
 /// <param name="RequestId"></param>
 public BasicAuthorizationTransaction(PayPalTender Tender, Invoice Invoice, UserInfo UserInfo, PayflowConnectionData PayflowConnectionData, String RequestId)
     : base("B", UserInfo, PayflowConnectionData, Invoice, Tender, RequestId)
 {
 }
Пример #30
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DORecurringPayment.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();

            RecurringInfo RecurInfo = new RecurringInfo();

            RecurInfo.OrigProfileId = "<PROFILE_ID>"; // RT0000001350
            RecurInfo.PaymentNum    = "2";            // The failed payment to be retried.

            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            Invoice Inv = new Invoice();

            // Set Amount.
            Currency Amt = new Currency(new decimal(25.12));

            Inv.Amt    = Amt;
            Inv.PoNum  = "PO12345";
            Inv.InvNum = "INV12345";

            // Set the Billing Address details.
            BillTo Bill = new BillTo();

            Bill.BillToStreet = "123 Main St.";
            Bill.BillToZip    = "12345";
            Inv.BillTo        = Bill;
            ///////////////////////////////////////////////////////////////////

            // Create a new Recurring Payment Transaction.
            RecurringPaymentTransaction Trans = new RecurringPaymentTransaction(
                User, Connection, RecurInfo, Inv, PayflowUtility.RequestId);

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                }

                // Get the Recurring Response parameters.
                RecurringResponse RecurResponse = Resp.RecurringResponse;
                if (RecurResponse != null)
                {
                    Console.WriteLine("RPREF = " + RecurResponse.RPRef);
                    Console.WriteLine("PROFILEID = " + RecurResponse.ProfileId);
                }

                // Display the response.
                Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));

                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                }
            }
            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
Пример #31
0
        public override void ProcessTransaction(Transaction t)
        {
            bool result = false;

            //'Get Configuration Settings
            string MerchantPartner = Settings.MerchantPartner;
            string MerchantLogin = Settings.MerchantLogin;
            string MerchantUser = Settings.MerchantUser;
            string MerchantPassword = Settings.MerchantPassword;
            string CurrencyCode = Settings.CurrencyCode;
            bool TestMode = Settings.TestMode;
            bool DebugMode = Settings.DeveloperMode;

            UserInfo User = new UserInfo(MerchantUser, MerchantLogin, MerchantPartner, MerchantPassword);
        

            //Set HostAddress URL
            string HostAddress = LiveUrl;
            if (TestMode) HostAddress = TestUrl;

            //Connection Info
            PayflowConnectionData Connection = new PayflowConnectionData(HostAddress, 443, 45); //', CertLocation)

            // *** Create a new Invoice data object ***
            // Set Invoice object with the Amount, Billing & Shipping Address, etc. ***
            Invoice Inv = new Invoice();

            // Set the amount object. A valid amount is a two decimal value.  An invalid amount will generate a result code                
            Currency Amt = new Currency(Decimal.Round(t.Amount, 2), CurrencyCode); //' 840 is US ISO currency code.  If no code passed, 840 is default.
            Inv.Amt = Amt;

            // Generate a unique transaction ID
            string strRequestID = PayflowUtility.RequestId + t.MerchantInvoiceNumber;

            //InvNum and CustRef are sent to the processors and could show up on a customers
            // or your bank statement. These fields are reportable but not searchable in PayPal Manager.

            Inv.InvNum = t.MerchantInvoiceNumber;
            Inv.CustRef = t.Customer.Email;

            //' Comment1 and Comment2 fields are searchable within PayPal Manager .
            Inv.Comment1 = "Order Number: " + Inv.InvNum;
            Inv.Comment2 = "Customer Email: " + t.Customer.Email;

            // Create the BillTo object.
            BillTo Bill = new BillTo();

            Bill.FirstName = t.Customer.FirstName;
            Bill.LastName = t.Customer.LastName;
            Bill.Street = t.Customer.Street;
            Bill.City = t.Customer.City;
            Bill.Zip = t.Customer.PostalCode;
            Bill.PhoneNum = t.Customer.Phone;
            Bill.Email = t.Customer.Email;
            Bill.State = t.Customer.Region;                        

            //' BillToCountry code is based on numeric ISO country codes. (e.g. 840 = USA)
            //Get Country Code
            string CountryCode = MerchantTribe.Web.Geography.Country.FindByName(t.Customer.Country).IsoNumeric;
            Bill.BillToCountry = CountryCode;
        
            // Set the BillTo object into invoice.
            Inv.BillTo = Bill;

            CustomerInfo CustInfo = new CustomerInfo();

            CustInfo.CustId = t.Customer.Email;
            CustInfo.CustIP = t.Customer.IpAddress;

            // *** Create a new Payment Device - Credit Card data object. ***
            // Note: Expiration date is in the format MMYY
            string CCExpDate = t.Card.ExpirationMonthPadded + t.Card.ExpirationYearTwoDigits;

            CreditCard CC = new CreditCard(t.Card.CardNumber, CCExpDate);

            //' *** Card Security Code ***
            //' This is the 3 or 4 digit code on either side of the Credit Card.
            if (t.Card.SecurityCode.Length > 0)
            {
                CC.Cvv2 = t.Card.SecurityCode;
            }

            // Name on Credit Card is optional.
            CC.Name = t.Card.CardHolderName;

            // *** Create a new Tender - Card Tender data object. ***
            CardTender Card = new CardTender(CC);

            // *** Create a new Transaction. ***
            // The Request Id is the unique id necessary for each transaction. 
            // If you pass a non-unique request id, you will receive the transaction details from the original request.

            //'DO TRANSACTION
            try
            {
                BaseTransaction Trans = null;

                switch(t.Action)
                {
                    case ActionType.CreditCardHold:
                        Trans = new AuthorizationTransaction(User,Connection, Inv, Card, strRequestID);
                        break;
                    case ActionType.CreditCardCharge:
                        Trans = new SaleTransaction(User,Connection, Inv, Card, strRequestID);
                        break;
                    case ActionType.CreditCardCapture:
                        Trans = new CaptureTransaction(t.PreviousTransactionNumber, User, Connection, Inv, strRequestID);
                        break;
                    case ActionType.CreditCardRefund:
                        Trans = new CreditTransaction(t.PreviousTransactionNumber, User, Connection, Inv, strRequestID);
                        break;
                    case ActionType.CreditCardVoid:
                       Trans = new VoidTransaction(t.PreviousTransactionNumber, User, Connection, strRequestID);
                        break;
                }

                int Result = 0;
                System.Globalization.CultureInfo currCulture = System.Threading.Thread.CurrentThread.CurrentCulture;
                Response Resp = null;

                try
                {
                    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
                    //' Submit the Transaction
                    Resp = Trans.SubmitTransaction();
                }
                finally
                {
                    System.Threading.Thread.CurrentThread.CurrentCulture = currCulture;
                }

                if (Resp != null)
                {
            
                    // Get the Transaction Response parameters.
                    TransactionResponse TrxnResponse = Resp.TransactionResponse;
                                
                    // RESULT codes returns.
                    if (TrxnResponse != null)
                    {

                        //Check for Approval (0 = approved, all else = Decline or Error)
                        Result = TrxnResponse.Result;
                        string RespMsg = TrxnResponse.RespMsg;

                        //if success then save our reference number
                        if (Result == 0)
                        {
                            t.Result.ReferenceNumber = TrxnResponse.Pnref;
                        }

                        t.Result.ResponseCode = TrxnResponse.AuthCode;

                        //Custom Properties
                        t.Result.AvsCode = AvsResponseType.Unavailable;
                        t.Result.AvsCodeDescription = "AVSADDR: " + TrxnResponse.AVSAddr + " AVSZIP: " + TrxnResponse.AVSZip + " IAVS: " + TrxnResponse.IAVS;
                        t.Result.ResponseCode = TrxnResponse.Result.ToString();
                        t.Result.CvvCode = CvnResponseType.Unavailable;
                        t.Result.CvvCodeDescription = TrxnResponse.CVV2Match;
                        t.Result.ResponseCodeDescription = TrxnResponse.RespMsg;
                        
                    }
                    else
                    {
                        t.Result.Messages.Add(new Message("Payment Error: Transaction Response is Null", "BVP_PFP_1003", MessageType.Error));
                    }

                    //Show Complete Response if Debug Mode
                    if (DebugMode)
                    {
                        t.Result.Messages.Add(new Message("PayflowPro Request:" + Trans.Request, "REQ", MessageType.Information));
                        t.Result.Messages.Add(new Message("PayflowPro Request:" + Trans.Response.ResponseString, "RES", MessageType.Information));

                        // Get the Transaction Context
                        Context TransCtx = Resp.TransactionContext;

                        if ((TransCtx != null) && (TransCtx.getErrorCount() > 0))
                        {
                            t.Result.Messages.Add(new Message("PayflowPro Context:" + TransCtx.ToString(), "CTX", MessageType.Information));
                        }
                    }

                    if (Result == 0)
                    {
                        result = true;
                    }
                    else
                    {
                        result = false;
                    }
                }
                else
                {
                    t.Result.Messages.Add(new Message("Payment Error: Response is Null", "BVP_PFP_1002", MessageType.Error));
                }
            }
            catch(Exception ex)
            {
                result = false;
                t.Result.Messages.Add(new Message("Payment Error: " + ex.Message, "BVP_PFP_1001", MessageType.Error));
                t.Result.Messages.Add(new Message("Stack Trace " + ex.StackTrace, "STACKTRACE", MessageType.Error));
            }
            
            t.Result.Succeeded = result;                     
        }
Пример #32
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DOSale_Base.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // Values of connection details can also be passed in the constructor of
            // PayflowConnectionData. This will override the values passed in the App config file.
            // Example values passed below are as follows:
            // Payflow Pro Host address : pilot-payflowpro.paypal.com
            // Payflow Pro Host Port : 443
            // Timeout : 45 ( in seconds )
            PayflowConnectionData Connection = new PayflowConnectionData("pilot-payflowpro.paypal.com", 443, 45);

            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            Invoice Inv = new Invoice();

            // Set Amount.
            Currency Amt = new Currency(new decimal(25.1256));

            Inv.Amt = Amt;
            // Truncate the Amount value using the truncate feature of
            // the Currency Data Object.
            // Note: Currency Data Object also has the Round feature
            // which will round the amount value to desired number of decimal
            // digits ( default 2 ). However, round and truncate cannot be used
            // at the same time. You can set one of round or truncate true.
            Inv.Amt.Truncate = true;
            // Set the truncation decimal digit to 2.
            Inv.Amt.NoOfDecimalDigits = 2;

            Inv.PoNum  = "PO12345";
            Inv.InvNum = "INV12345";

            // Set the Billing Address details.
            BillTo Bill = new BillTo();

            Bill.BillToStreet = "123 Main St.";
            Bill.BillToZip    = "12345";
            Inv.BillTo        = Bill;

            // Create a new Payment Device - Credit Card data object.
            // The input parameters are Credit Card Number and Expiration Date of the Credit Card.
            CreditCard CC = new CreditCard("5105105105105100", "0115");

            CC.Cvv2 = "123";

            // Create a new Tender - Card Tender data object.
            CardTender Card = new CardTender(CC);
            ///////////////////////////////////////////////////////////////////

            // Create a new Base Transaction.
            BaseTransaction Trans = new BaseTransaction("S",
                                                        User, Connection, Inv, Card, PayflowUtility.RequestId);

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                    Console.WriteLine("AUTHCODE = " + TrxnResponse.AuthCode);
                    Console.WriteLine("AVSADDR = " + TrxnResponse.AVSAddr);
                    Console.WriteLine("AVSZIP = " + TrxnResponse.AVSZip);
                    Console.WriteLine("IAVS = " + TrxnResponse.IAVS);
                    Console.WriteLine("CVV2MATCH = " + TrxnResponse.CVV2Match);
                }

                // Get the Fraud Response parameters.
                FraudResponse FraudResp = Resp.FraudResponse;
                // Display Fraud Response parameter
                if (FraudResp != null)
                {
                    Console.WriteLine("PREFPSMSG = " + FraudResp.PreFpsMsg);
                    Console.WriteLine("POSTFPSMSG = " + FraudResp.PostFpsMsg);
                }

                // Display the response.
                Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));


                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                }
            }
            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
Пример #33
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DOInquiry.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // The PAYFLOW_HOST property is defined in the App config file.
            PayflowConnectionData Connection = new PayflowConnectionData();

            // Create a new Inquiry Transaction.
            //Replace <PNREF> with a previous transaction ID that you processed on your account.
            InquiryTransaction Trans = new InquiryTransaction("<PNREF>", User, Connection, PayflowUtility.RequestId);

            // To use CUSTREF or SECURETOKEN instead of PNREF you need to set the CustRef or SecureToken and include the INVOICE object in your
            // request.  Since you will be using CUSTREF or SECURETOKEN instead of PNREF, PNREF will be "" (null).
            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            //Invoice Inv = new Invoice();
            //Inv.CustRef = "CUSTREF";  // Can also use Inv.SecureToken
            //InquiryTransaction Trans = new InquiryTransaction("", User, Connection, Inv, PayflowUtility.RequestId);

            // Refer to the Payflow Pro Developer's Guide for more information regarding the parameters returned
            // when VERBOSITY is set.
            Trans.Verbosity = "HIGH"; // Set to HIGH to see all available data available.

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                // Display the transaction response parameters. Refer to the Payflow Pro Developer's Guide for explanations.
                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
                    Console.WriteLine("--------------------------------------------");
                    Console.WriteLine("Original Response Data");
                    Console.WriteLine("--------------------------------------------");
                    Console.WriteLine("RESULT = " + TrxnResponse.OrigResult);
                    Console.WriteLine("PNREF = " + TrxnResponse.OrigPnref);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                    Console.WriteLine("AUTHCODE = " + TrxnResponse.AuthCode);
                    Console.WriteLine("AVSADDR = " + TrxnResponse.AVSAddr);
                    Console.WriteLine("AVSZIP = " + TrxnResponse.AVSZip);
                    Console.WriteLine("CVV2MATCH = " + TrxnResponse.CVV2Match);
                    Console.WriteLine("IAVS = " + TrxnResponse.IAVS);
                    Console.WriteLine("HOSTCODE = " + TrxnResponse.HostCode);
                    Console.WriteLine("RESPTEXT = " + TrxnResponse.RespText);
                    Console.WriteLine("PROCAVS = " + TrxnResponse.ProcAVS);
                    Console.WriteLine("PROCCVV2 = " + TrxnResponse.ProcCVV2);
                    Console.WriteLine("PROCCARDSECURE = " + TrxnResponse.ProcCardSecure);
                    Console.WriteLine("ADDLMSGS = " + TrxnResponse.AddlMsgs);
                    Console.WriteLine("TRANSSTATE = " + TrxnResponse.TransState);
                    Console.WriteLine("DATE_TO_SETTLE = " + TrxnResponse.DateToSettle);
                    Console.WriteLine("BATCHID = " + TrxnResponse.BatchId);
                    Console.WriteLine("SETTLE_DATE = " + TrxnResponse.SettleDate);
                }

                // Display the response.
                Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));

                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                }
            }
            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
Пример #34
0
        public static void Main(string[] Args)
        {
            Console.WriteLine("------------------------------------------------------");
            Console.WriteLine("Executing Sample from File: DODataUpload.cs");
            Console.WriteLine("------------------------------------------------------");

            // Create the Data Objects.
            // Create the User data object with the required user details.
            UserInfo User = new UserInfo("<user>", "<vendor>", "<partner>", "<password>");

            // Create the Payflow  Connection data object with the required connection details.
            // Values of connection details can also be passed in the constructor of
            // PayflowConnectionData. This will override the values passed in the App config file.
            // Example values passed below are as follows:
            // Payflow Pro Host address : pilot-payflowpro.paypal.com
            // Payflow Pro Host Port : 443
            // Timeout : 45 ( in seconds )
            PayflowConnectionData Connection = new PayflowConnectionData("pilot-payflowpro.paypal.com", 443, 45);

            // Create a new Invoice data object with the Amount, Billing Address etc. details.
            Invoice Inv = new Invoice();

            // Remember, we do not send in an amount.

            Inv.PoNum  = "PO12345";
            Inv.InvNum = "INV12345";

            // Set the Billing Address details.
            BillTo Bill = new BillTo();

            Bill.BillToStreet = "123 Main St.";
            Bill.BillToZip    = "12345";
            Inv.BillTo        = Bill;

            // Create a new Payment Device - Credit Card data object.
            // The input parameters are Credit Card Number and Expiration Date of the Credit Card.
            CreditCard CC = new CreditCard("5105105105105100", "0115");

            // Create a new Tender - Card Tender data object.
            CardTender Card = new CardTender(CC);

            // Create a new Base Transaction.
            BaseTransaction Trans = new BaseTransaction("L", User, Connection, Inv, Card, PayflowUtility.RequestId);

            // Submit the Transaction
            Response Resp = Trans.SubmitTransaction();

            // Display the transaction response parameters.
            if (Resp != null)
            {
                // Get the Transaction Response parameters.
                TransactionResponse TrxnResponse = Resp.TransactionResponse;

                if (TrxnResponse != null)
                {
                    Console.WriteLine("RESULT = " + TrxnResponse.Result);
                    Console.WriteLine("PNREF = " + TrxnResponse.Pnref);
                    Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
                    Console.WriteLine("TRANSTIME = " + TrxnResponse.TransTime);
                }

                // Display the response.
                Console.WriteLine(Environment.NewLine + PayflowUtility.GetStatus(Resp));


                // Get the Transaction Context and check for any contained SDK specific errors (optional code).
                Context TransCtx = Resp.TransactionContext;
                if (TransCtx != null && TransCtx.getErrorCount() > 0)
                {
                    Console.WriteLine(Environment.NewLine + "Transaction Errors = " + TransCtx.ToString());
                }
            }
            Console.WriteLine("Press Enter to Exit ...");
            Console.ReadLine();
        }
Пример #35
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="UserInfo">User Info object populated with user credentials.</param>
 /// <param name="PayflowConnectionData">Connection credentials object.</param>
 /// <param name="PaRes">PaRes Value</param>
 /// <param name="RequestId">Request Id</param>
 /// <remarks>When the user authenticates on the secure authentication server, the server
 /// returns back a Payer authentication Signature (PaRes). You must send this value of PaRes
 /// to validate the authentication to the payment gateway during the Validate Authentication.
 /// The gateway will then return the authentication status of the user in the response.
 /// You should send this authntication information from the response into you main transaction.
 /// For more information, please refer to the Payflow Developers' Guide.
 /// </remarks>
 /// <example>This example shows how to create and perform a Verify Eknrollment transaction.
 /// <code lang="C#" escaped="false">
 ///		..........
 ///		..........
 ///		//Populate required data objects.
 ///		..........
 ///		..........
 ///
 ///		//Create a new validate Auhtentication Transaction.
 ///		 BuyerAuthVATransaction Trans = new BuyerAuthVATransaction(
 ///												UserInfo,
 ///												PayflowConnectionData,
 ///												Pares,
 ///												RequestId);
 ///		//Submit the transaction.
 ///		Trans.SubmitTransaction();
 ///
 ///		// Get the Response.
 ///		Response Resp = Trans.Response;
 ///		if (Resp != null)
 ///		{
 ///			// Get the Transaction Response parameters.
 ///			TransactionResponse TrxnResponse =  Resp.TransactionResponse;
 ///			if (TrxnResponse != null)
 ///			{
 ///				Console.WriteLine("RESULT = " + TrxnResponse.Result);
 ///				Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
 ///			}
 ///
 ///
 ///			// Get the Buyer auth Response parameters.
 ///			BuyerAuthResponse BAResponse = Resp.BuyerAuthResponse;
 ///			if (BAResponse != null)
 ///			{
 ///				Console.WriteLine("AUTHENTICATION_STATUS = " + BAResponse.Authentication_Status);
 ///				Console.WriteLine("AUTHENTICATION_ID = " + BAResponse.Authentication_Id);
 ///			}
 ///		}
 ///		// Get the Context and check for any contained SDK specific errors.
 ///		Context Ctx = Resp.TransactionContext;
 ///		if (Ctx != null ++ Ctx.getErrorCount() > 0)
 ///		{
 ///			Console.WriteLine(Environment.NewLine + "Errors = " + Ctx.ToString());
 ///		}
 ///</code>
 ///<code lang="Visual Basic" escaped="false">
 ///		..........
 ///		..........
 ///		'Populate required data objects.
 ///		..........
 ///		..........
 ///
 ///		'Create a new Validate Authentication Transaction.
 ///		Dim Trans as New BuyerAuthVATransaction(
 ///												UserInfo,
 ///												PayflowConnectionData,
 ///												Pares,
 ///												RequestId)
 ///		' Submit the transaction.
 ///		Trans.SubmitTransaction()
 ///
 ///		' Get the Response.
 ///		Dim Resp As Response = Trans.Response
 ///
 ///		If Not Resp Is Nothing Then
 ///		' Get the Transaction Response parameters.
 ///
 ///			Dim TrxnResponse As TransactionResponse = Resp.TransactionResponse
 ///
 ///			If Not TrxnResponse Is Nothing Then
 ///				Console.WriteLine("RESULT = " + TrxnResponse.Result)
 ///				Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg)
 ///			End If
 ///
 ///			' Get the Buyer auth Response parameters.
 ///			Dim BAResponse As BuyerAuthResponse = Resp.BuyerAuthResponse;
 ///			If Not BAResponse Is Nothing Then
 ///				Console.WriteLine("AUTHENTICATION_STATUS = " + BAResponse.Authentication_Status)
 ///				Console.WriteLine("AUTHENTICATION_ID = " + BAResponse.Authentication_Id)
 ///			End If
 ///		End If
 ///
 ///		' Get the Context and check for any contained SDK specific errors.
 ///		Dim Ctx As Context = Resp.TransactionContext
 ///
 ///		If Not Ctx Is Nothing AndAlso Ctx.getErrorCount() > 0 Then
 ///			Console.WriteLine(Constants.vbLf + "Errors = " + Ctx.ToString())
 ///		End If
 /// </code>
 /// </example>
 public BuyerAuthVATransaction(UserInfo UserInfo, PayflowConnectionData PayflowConnectionData, String PaRes, String RequestId) : base(PayflowConstants.TRXTYPE_BUYERAUTH_VA, UserInfo, PayflowConnectionData, RequestId)
 {
     mPaRes = PaRes;
 }
        /// <summary>
        /// Process payment
        /// </summary>
        /// <param name="paymentInfo">Payment info required for an order processing</param>
        /// <param name="customer">Customer</param>
        /// <param name="orderGuid">Unique order identifier</param>
        /// <param name="processPaymentResult">Process payment result</param>
        public void ProcessPayment(PaymentInfo paymentInfo, Customer customer, Guid orderGuid, ref ProcessPaymentResult processPaymentResult)
        {
            InitSettings();
            TransactMode transactionMode = GetCurrentTransactionMode();

            //little hack here
            CultureInfo userCulture = Thread.CurrentThread.CurrentCulture;

            NopContext.Current.SetCulture(new CultureInfo("en-US"));
            try
            {
                Invoice invoice = new Invoice();

                BillTo to = new BillTo();
                to.FirstName = paymentInfo.BillingAddress.FirstName;
                to.LastName  = paymentInfo.BillingAddress.LastName;
                to.Street    = paymentInfo.BillingAddress.Address1;
                to.City      = paymentInfo.BillingAddress.City;
                to.Zip       = paymentInfo.BillingAddress.ZipPostalCode;
                if (paymentInfo.BillingAddress.StateProvince != null)
                {
                    to.State = paymentInfo.BillingAddress.StateProvince.Abbreviation;
                }
                invoice.BillTo = to;

                if (paymentInfo.ShippingAddress != null)
                {
                    ShipTo to2 = new ShipTo();
                    to2.ShipToFirstName = paymentInfo.ShippingAddress.FirstName;
                    to2.ShipToLastName  = paymentInfo.ShippingAddress.LastName;
                    to2.ShipToStreet    = paymentInfo.ShippingAddress.Address1;
                    to2.ShipToCity      = paymentInfo.ShippingAddress.City;
                    to2.ShipToZip       = paymentInfo.ShippingAddress.ZipPostalCode;
                    if (paymentInfo.ShippingAddress.StateProvince != null)
                    {
                        to2.ShipToState = paymentInfo.ShippingAddress.StateProvince.Abbreviation;
                    }
                    invoice.ShipTo = to2;
                }

                invoice.InvNum = orderGuid.ToString();
                decimal orderTotal = Math.Round(paymentInfo.OrderTotal, 2);
                invoice.Amt = new PayPal.Payments.DataObjects.Currency(orderTotal, CurrencyManager.PrimaryStoreCurrency.CurrencyCode);

                string creditCardExp = string.Empty;
                if (paymentInfo.CreditCardExpireMonth < 10)
                {
                    creditCardExp = "0" + paymentInfo.CreditCardExpireMonth.ToString();
                }
                else
                {
                    creditCardExp = paymentInfo.CreditCardExpireMonth.ToString();
                }
                creditCardExp = creditCardExp + paymentInfo.CreditCardExpireYear.ToString().Substring(2, 2);
                CreditCard credCard = new CreditCard(paymentInfo.CreditCardNumber, creditCardExp);
                credCard.Cvv2 = paymentInfo.CreditCardCvv2;
                CardTender tender = new CardTender(credCard);
                // <vendor> = your merchant (login id)
                // <user> = <vendor> unless you created a separate <user> for Payflow Pro
                // partner = paypal
                UserInfo userInfo = new UserInfo(user, vendor, partner, password);
                string   url      = GetPaypalUrl();
                PayflowConnectionData payflowConnectionData = new PayflowConnectionData(url, 443, null, 0, null, null);

                Response response = null;
                if (transactionMode == TransactMode.Authorize)
                {
                    response = new AuthorizationTransaction(userInfo, payflowConnectionData, invoice, tender, PayflowUtility.RequestId).SubmitTransaction();
                }
                else
                {
                    response = new SaleTransaction(userInfo, payflowConnectionData, invoice, tender, PayflowUtility.RequestId).SubmitTransaction();
                }

                if (response.TransactionResponse != null)
                {
                    if (response.TransactionResponse.Result == 0)
                    {
                        processPaymentResult.AuthorizationTransactionId     = response.TransactionResponse.Pnref;
                        processPaymentResult.AuthorizationTransactionResult = response.TransactionResponse.RespMsg;

                        if (transactionMode == TransactMode.Authorize)
                        {
                            processPaymentResult.PaymentStatus = PaymentStatusEnum.Authorized;
                        }
                        else
                        {
                            processPaymentResult.PaymentStatus = PaymentStatusEnum.Paid;
                        }
                    }
                    else
                    {
                        processPaymentResult.Error     = string.Format("{0} - {1}", response.TransactionResponse.Result, response.TransactionResponse.RespMsg);
                        processPaymentResult.FullError = string.Format("Response Code : {0}. Response Description : {1}", response.TransactionResponse.Result, response.TransactionResponse.RespMsg);
                    }
                }
                else
                {
                    processPaymentResult.Error     = "Error during checkout";
                    processPaymentResult.FullError = "Error during checkout";
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                NopContext.Current.SetCulture(userCulture);
            }
        }
 /// <summary>
 ///     Constructor.
 /// </summary>
 /// <param name="userInfo">User Info object populated with user credentials.</param>
 /// <param name="payflowConnectionData">Connection credentials object.</param>
 /// <param name="paRes">PaRes Value</param>
 /// <param name="requestId">Request Id</param>
 /// <remarks>
 ///     When the user authenticates on the secure authentication server, the server
 ///     returns back a Payer authentication Signature (PaRes). You must send this value of PaRes
 ///     to validate the authentication to the payment gateway during the Validate Authentication.
 ///     The gateway will then return the authentication status of the user in the response.
 ///     You should send this authntication information from the response into you main transaction.
 ///     For more information, please refer to the Payflow Developers' Guide.
 /// </remarks>
 /// <example>
 ///     This example shows how to create and perform a Verify Eknrollment transaction.
 ///     <code lang="C#" escaped="false">
 ///         ..........
 ///         ..........
 ///         //Populate required data objects.
 ///         ..........
 ///         ..........
 ///
 ///         //Create a new validate Auhtentication Transaction.
 ///          BuyerAuthVATransaction Trans = new BuyerAuthVATransaction(
 ///                                                 UserInfo,
 ///                                                 PayflowConnectionData,
 ///                                                 Pares,
 ///                                                 RequestId);
 ///         //Submit the transaction.
 ///         Trans.SubmitTransaction();
 ///
 ///         // Get the Response.
 ///         Response Resp = Trans.Response;
 ///         if (Resp != null)
 ///         {
 ///             // Get the Transaction Response parameters.
 ///             TransactionResponse TrxnResponse =  Resp.TransactionResponse;
 ///             if (TrxnResponse != null)
 ///             {
 ///                 Console.WriteLine("RESULT = " + TrxnResponse.Result);
 ///                 Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg);
 ///             }
 ///
 ///
 ///             // Get the Buyer auth Response parameters.
 ///             BuyerAuthResponse BAResponse = Resp.BuyerAuthResponse;
 ///             if (BAResponse != null)
 ///             {
 ///                 Console.WriteLine("AUTHENTICATION_STATUS = " + BAResponse.Authentication_Status);
 ///                 Console.WriteLine("AUTHENTICATION_ID = " + BAResponse.Authentication_Id);
 ///             }
 ///         }
 ///         // Get the Context and check for any contained SDK specific errors.
 ///         Context Ctx = Resp.TransactionContext;
 ///         if (Ctx != null ++ Ctx.getErrorCount() > 0)
 ///         {
 ///             Console.WriteLine(Environment.NewLine + "Errors = " + Ctx.ToString());
 ///         }
 /// </code>
 ///     <code lang="Visual Basic" escaped="false">
 ///         ..........
 ///         ..........
 ///         'Populate required data objects.
 ///         ..........
 ///         ..........
 ///
 ///         'Create a new Validate Authentication Transaction.
 ///         Dim Trans as New BuyerAuthVATransaction(
 ///                                                 UserInfo,
 ///                                                 PayflowConnectionData,
 ///                                                 Pares,
 ///                                                 RequestId)
 ///         ' Submit the transaction.
 ///         Trans.SubmitTransaction()
 ///         ' Get the Response.
 ///         Dim Resp As Response = Trans.Response
 ///
 ///         If Not Resp Is Nothing Then
 ///         ' Get the Transaction Response parameters.
 ///
 ///             Dim TrxnResponse As TransactionResponse = Resp.TransactionResponse
 ///
 ///             If Not TrxnResponse Is Nothing Then
 ///                 Console.WriteLine("RESULT = " + TrxnResponse.Result)
 ///                 Console.WriteLine("RESPMSG = " + TrxnResponse.RespMsg)
 ///             End If
 ///             ' Get the Buyer auth Response parameters.
 ///             Dim BAResponse As BuyerAuthResponse = Resp.BuyerAuthResponse;
 ///             If Not BAResponse Is Nothing Then
 ///                 Console.WriteLine("AUTHENTICATION_STATUS = " + BAResponse.Authentication_Status)
 ///                 Console.WriteLine("AUTHENTICATION_ID = " + BAResponse.Authentication_Id)
 ///             End If
 ///         End If
 ///         ' Get the Context and check for any contained SDK specific errors.
 ///         Dim Ctx As Context = Resp.TransactionContext
 ///
 ///         If Not Ctx Is Nothing AndAlso Ctx.getErrorCount() > 0 Then
 ///             Console.WriteLine(Constants.vbLf + "Errors = " + Ctx.ToString())
 ///         End If
 ///  </code>
 /// </example>
 public BuyerAuthVaTransaction(UserInfo userInfo, PayflowConnectionData payflowConnectionData, string paRes,
                               string requestId) : base(PayflowConstants.TrxtypeBuyerauthVa, userInfo, payflowConnectionData, requestId)
 {
     _mPaRes = paRes;
 }
        public ActionResult PayOrder(int orderId)
        {                        
            var model = new PaymentFormModel();

            try
            {
                model.OrderId = orderId;

                var order = _orderService.GetOrderById(orderId);

                if (order == null || order.Deleted)
                    return View("~/Plugins/Payments.PayPalAdvanced/Views/PaymentPayPalAdvanced/PaymentForm.cshtml", model);

                if (_workContext.CurrentCustomer.Id != order.CustomerId)
                    return new HttpUnauthorizedResult();

                if (order.OrderStatus == OrderStatus.Cancelled || order.PaymentStatus != PaymentStatus.Pending)
                    return RedirectToRoute("OrderDetails", new { orderId = order.Id });

                                                                
                // Create a new Invoice data object with the Amount, Billing Address etc. details.
                Invoice inv = new Invoice();
                decimal orderTotal = 0.0M;

                try
                {                    
                    // Set Amount.
                    orderTotal = Math.Round(order.OrderTotal, 2);
                    PayPal.Payments.DataObjects.Currency amt = new PayPal.Payments.DataObjects.Currency(orderTotal);
                    inv.Amt = amt;                    
                }
                catch (Exception ex)
                {
                    throw new Exception("Unable to create invoice amount: " + ex.Message);
                }

                inv.PoNum = order.Id.ToString();
                inv.InvNum = order.Id.ToString();

                try
                {
                    // Check license
                    bool isLicensed = this._licenseService.IsLicensed(HttpContext.Request.Url.Host);
                    if (!isLicensed && orderTotal > 5.00M)
                    {
                        return ShowLicenseInfo();
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("Unable to verify plugin's license: " + ex.Message);
                }

                // Set the Billing Address details.
                BillTo billTo = new BillTo();

                // optional fields
                try
                {
                    billTo.FirstName = order.Customer.BillingAddress.FirstName;
                }
                catch { }
                try
                {
                    billTo.LastName = order.Customer.BillingAddress.LastName;
                }
                catch { }
                try
                {
                    billTo.Street = order.Customer.BillingAddress.Address1;
                }
                catch { }
                try
                {
                    billTo.City = order.Customer.BillingAddress.City;
                }
                catch { }
                try
                {
                    billTo.State = order.Customer.BillingAddress.StateProvince.Abbreviation;
                }
                catch { }
                try
                {
                    billTo.Zip = order.Customer.BillingAddress.ZipPostalCode;
                }
                catch { }
                try
                {
                    billTo.BillToCountry = order.Customer.BillingAddress.Country.NumericIsoCode.ToString();
                }
                catch { }

                inv.BillTo = billTo;

                // Set the Shipping Address details.
                //if (order.Customer.ShippingAddress != null)
                //{
                //    if (order.Customer.ShippingAddress.StateProvince != null && order.Customer.ShippingAddress.Country != null)
                //    {
                //        ShipTo shipTo = new ShipTo();
                //        shipTo.ShipToFirstName = order.Customer.ShippingAddress.FirstName;
                //        shipTo.ShipToLastName = order.Customer.ShippingAddress.LastName;
                //        shipTo.ShipToStreet = order.Customer.ShippingAddress.Address1;
                //        //shipTo.ShipToStreet2 = order.Customer.ShippingAddress.Address2;
                //        shipTo.ShipToCity = order.Customer.ShippingAddress.City;
                //        shipTo.ShipToState = order.Customer.ShippingAddress.StateProvince.Abbreviation;
                //        shipTo.ShipToZip = order.Customer.ShippingAddress.ZipPostalCode;
                //        shipTo.ShipToCountry = order.Customer.ShippingAddress.Country.NumericIsoCode.ToString();
                //        inv.ShipTo = shipTo;
                //    }
                //}


                // Create the Payflow Data Objects.
                // Create the User data object with the required user details.
                UserInfo payflowUser = null;
                try
                {
                    payflowUser = _payPalHelper.GetUserInfo();
                }
                catch (Exception ex)
                {
                    throw new Exception("Unable to create Payflow User object, check the configuration: " + ex.Message);
                }

                // Create the Payflow Connection data object with the required connection details.                        
                PayflowConnectionData payflowConn = null;
                try
                {
                    payflowConn = new PayflowConnectionData(_payPalHelper.GetPayflowProHost());
                }
                catch (Exception ex)
                {
                    throw new Exception("Unable to create Payflow connection, check the web.config: " + ex.Message);
                }

                string payflowRequestId = PayflowUtility.RequestId;
                Response resp;

                if (_payPalAdvancedPaymentSettings.TransactMode == TransactMode.Authorize)
                {
                    // Create a new Auth Transaction.
                    AuthorizationTransaction trans = null;
                    try
                    {
                        trans = new AuthorizationTransaction(payflowUser, payflowConn, inv, null, payflowRequestId);

                        trans.AddToExtendData(new ExtendData("CREATESECURETOKEN", "Y"));
                        trans.AddToExtendData(new ExtendData("SECURETOKENID", payflowRequestId));
                        if (_payPalAdvancedPaymentSettings.EnableMobileOptimizedLayout && this.IsMobileDevice())
                            trans.AddToExtendData(new ExtendData("TEMPLATE", "MOBILE"));

                        // Submit the Transaction
                        resp = trans.SubmitTransaction();
                    }
                    catch (Exception ex)
                    {
                        throw new Exception("Error processing AuthorizationTransaction: " + ex.Message);
                    }
                }
                else
                {
                    // Create a new Sale Transaction.
                    SaleTransaction trans = null;
                    try
                    {
                        trans = new SaleTransaction(payflowUser, payflowConn, inv, null, payflowRequestId);

                        trans.AddToExtendData(new ExtendData("CREATESECURETOKEN", "Y"));
                        trans.AddToExtendData(new ExtendData("SECURETOKENID", payflowRequestId));
                        if (_payPalAdvancedPaymentSettings.EnableMobileOptimizedLayout && this.IsMobileDevice())
                            trans.AddToExtendData(new ExtendData("TEMPLATE", "MOBILE"));

                        // Submit the Transaction
                        resp = trans.SubmitTransaction();
                    }
                    catch (Exception ex)
                    {
                        throw new Exception("Error processing SaleTransaction: " + ex.Message);
                    }
                }

                string paypalSecureToken = string.Empty;
                string paypalContent = string.Empty;

                // Process the Payflow response.
                if (resp != null)
                {
                    // Get the Transaction Response parameters.
                    TransactionResponse trxResp = resp.TransactionResponse;
                    if (trxResp != null)
                    {
                        if (trxResp.Result == 0)
                        {
                            paypalSecureToken = (from ExtendData edEntry in resp.ExtendDataList
                                                 where edEntry.ParamName == "SECURETOKEN"
                                                 select edEntry.ParamValue).FirstOrDefault();

                            model.PayflowSecureToken = paypalSecureToken.Trim();
                            model.PayflowSecureTokenId = payflowRequestId.Trim();
                            model.PayflowMode = _payPalAdvancedPaymentSettings.UseSandbox ? "TEST" : "LIVE";
                            model.PayflowUrl = _payPalHelper.GetPayflowLinkHost();
                            model.Success = true;
                        }
                        else
                        {
                            // Show error msg
                            model.ErrorMsg = string.Format("Error: {0} - {1}", trxResp.Result, trxResp.RespMsg != null ? trxResp.RespMsg : "");

                            // Log resp error
                            order.OrderNotes.Add(new OrderNote
                            {
                                Note = "Failed fetching PayPal Secure Token: " + model.ErrorMsg,
                                DisplayToCustomer = false,
                                CreatedOnUtc = DateTime.UtcNow
                            });

                            if (_orderService != null)
                            {
                                _orderService.UpdateOrder(order);
                            }

                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex.Message, ex);
                model.ErrorMsg = "An error has occurred, please check System Log for more information.";
            }                       
            
            return View("~/Plugins/Payments.PayPalAdvanced/Views/PaymentPayPalAdvanced/PaymentForm.cshtml", model);
        }
Пример #39
0
		public PaymentResult Pay(CreditCardInfo info, int orderId)
		{
			Logger.WriteInfo(String.Format("Payment started. OrderId [{0}], UserId [{1}]", orderId, _securityContext.CurrentUser.Id));


			UserInfo user = new UserInfo(_configurationHelper.PayPalUser, _configurationHelper.PayPalVender, "PayPal", _configurationHelper.PayPalUserPassword);
			PayflowConnectionData connection = new PayflowConnectionData(_configurationHelper.PayPalUrl);

			Invoice invoice = new Invoice()
			{
				Amt = new Currency(info.Amount),
				BillTo = new BillTo()
				{
					BillToCity = info.City,
					BillToFirstName = info.FirstName,
					BillToStreet = info.StreetAddress,
					BillToZip = info.ZIP,
					BillToLastName = info.LastName,
					BillToState = info.State
				}
			};

			CreditCard creditCard = new CreditCard(info.CreditCardNumber, info.ExpirationDate.ToString("MMyy"));
			creditCard.Cvv2 = info.CVVCSCCode;
			CardTender cardTender = new CardTender(creditCard);

			SaleTransaction trans = new SaleTransaction(user, connection, invoice, cardTender, PayflowUtility.RequestId);

			// Set the transaction verbosity to HIGH to display most details.
			trans.Verbosity = "HIGH";

			// Try to submit the transaction up to 3 times with 5 second delay.  This can be used
			// in case of network issues.  The idea here is since you are posting via HTTPS behind the scenes there
			// could be general network issues, so try a few times before you tell customer there is an issue.
			int trxCount = 1;
			bool respRecd = false;
			while (trxCount <= 3 && !respRecd)
			{
				// Notice we set the request id earlier in the application and outside our loop.  This way if a response was not received
				// but PayPal processed the original request, you'll receive the original response with DUPLICATE set.

				Response resp = trans.SubmitTransaction();

				if (resp != null)
				{
					Logger.WriteInfo(String.Format("Payment completed. OrderId [{0}], UserId [{1}], requestId [{2}], Request [{3}], Response [{4}]",
							orderId, _securityContext.CurrentUser.Id, resp.RequestId, resp.RequestString, resp.ResponseString));

					respRecd = true; // Got a response.
					TransactionResponse trxnResponse = resp.TransactionResponse;

					if (trxnResponse != null)
					{
						if (trxnResponse.Result == 0)
						{
							return new PaymentResult() { IsApproved = true, TransactionId = trxnResponse.Pnref };
						}
						else
						{
							return new PaymentResult() { IsApproved = false, TransactionId = trxnResponse.Pnref, Message = trxnResponse.RespMsg };
						}
					}
				}


				Thread.Sleep(5000); // let's wait 5 seconds to see if this is a temporary network issue.
				trxCount++;
			}

			return new PaymentResult() { IsApproved = false, TransactionId = null, Message = "Time out" };
		}