/// <summary> /// Saves the express checkout data to persistent session state. /// </summary> /// <param name="user">The user to associate with the express checkout session</param> public void Save(User user) { UserSettingCollection acUserSettings = user.Settings; SetPayPalSettings(acUserSettings, this.Token, this.TokenExpiration, this.PayerID, this.Payer, user.UserId); WebTrace.Write("Saved token for user " + user.UserId); }
/// <summary> /// Deletes the express checkout data from persistent session state. /// </summary> /// <param name="user">The user to delete express checkout session for</param> public static void Delete(User user) { UserSettingCollection acUserSettings = user.Settings; RemovePayPalSettings(acUserSettings); WebTrace.Write("Deleted token for user " + user.UserId); }
public ExpressCheckoutResult SetExpressCheckout() { HttpContext context = HttpContext.Current; User user = Token.Instance.User; Basket basket = user.Basket; //MAKE SURE BASKET IS PROPERLY PACKAGED FOR CHECKOUT basket.Package(); //GET EXISTING SESSION IF IT IS PRESENT ExpressCheckoutSession existingSession = ExpressCheckoutSession.Current; if (existingSession != null) { WebTrace.Write("Existing session token: " + existingSession.Token); } //CREATE THE EXPRESS CHECKOUT REQUEST OBJECT SetExpressCheckoutRequestType expressCheckoutRequest = new SetExpressCheckoutRequestType(); expressCheckoutRequest.SetExpressCheckoutRequestDetails = new SetExpressCheckoutRequestDetailsType(); if (existingSession != null) { expressCheckoutRequest.SetExpressCheckoutRequestDetails.Token = existingSession.Token; } expressCheckoutRequest.Version = "1.0"; //GET THE CURRENCY FOR THE TRANSACTION string baseCurrencyCode = Token.Instance.Store.BaseCurrency.ISOCode; CurrencyCodeType baseCurrency = PayPalProvider.GetPayPalCurrencyType(baseCurrencyCode); //BUILD THE REQUEST DETAILS SetExpressCheckoutRequestDetailsType expressCheckoutDetails = expressCheckoutRequest.SetExpressCheckoutRequestDetails; LSDecimal basketTotal = basket.Items.TotalPrice(); WebTrace.Write("Basket Total: " + basketTotal.ToString()); expressCheckoutDetails.OrderTotal = new BasicAmountType(); expressCheckoutDetails.OrderTotal.currencyID = baseCurrency; expressCheckoutDetails.OrderTotal.Value = string.Format("{0:##,##0.00}", basketTotal); expressCheckoutDetails.MaxAmount = new BasicAmountType(); expressCheckoutDetails.MaxAmount.currencyID = baseCurrency; expressCheckoutDetails.MaxAmount.Value = string.Format("{0:##,##0.00}", basketTotal + 50); //SET THE URLS string storeUrl = GetStoreUrl(); expressCheckoutDetails.ReturnURL = storeUrl + "/PayPalExpressCheckout.aspx?Action=GET"; expressCheckoutDetails.CancelURL = storeUrl + "/PayPalExpressCheckout.aspx?Action=CANCEL"; //SET THE CUSTOM VALUE TO THE USER ID FOR MATCHING DURING GET expressCheckoutDetails.Custom = "UID" + basket.UserId.ToString(); //SET THE CUSTOMER ADDRESS Address billingAddress = user.PrimaryAddress; AddressType address = new AddressType(); address.Name = billingAddress.FirstName + " " + billingAddress.LastName; address.Street1 = billingAddress.Address1; address.Street2 = billingAddress.Address2; address.CityName = billingAddress.City; address.PostalCode = billingAddress.PostalCode; if (billingAddress.Country != null) { address.Country = PayPalProvider.GetPayPalCountry(billingAddress.CountryCode); } else { address.Country = CountryCodeType.US; } address.CountrySpecified = true; expressCheckoutDetails.BuyerEmail = billingAddress.Email; expressCheckoutDetails.Address = address; //SET THE PAYMENT ACTION expressCheckoutDetails.PaymentAction = this.UseAuthCapture ? PaymentActionCodeType.Sale : PaymentActionCodeType.Authorization; expressCheckoutDetails.PaymentActionSpecified = true; //EXECUTE REQUEST SetExpressCheckoutResponseType expressCheckoutResponse; context.Trace.Write("DO SOAP CALL"); expressCheckoutResponse = (SetExpressCheckoutResponseType)SoapCall("SetExpressCheckout", expressCheckoutRequest); context.Trace.Write("CHECK SOAP RESULT"); if (expressCheckoutResponse == null) { ErrorType[] customErrorList = new ErrorType[1]; ErrorType customError = new ErrorType(); customError.ErrorCode = "NORESP"; customError.ShortMessage = "No Response From Server"; customError.LongMessage = "The PayPal service is unavailable at this time."; customErrorList[0] = customError; return(new ExpressCheckoutResult(0, string.Empty, customErrorList)); } //IF ERRORS ARE IN RESPONSE, RETURN THEM AND EXIT PROCESS if (expressCheckoutResponse.Errors != null) { return(new ExpressCheckoutResult(0, string.Empty, expressCheckoutResponse.Errors)); } //NO ERRORS FOUND, PUT PAYPAL DETAILS INTO SESSION context.Trace.Write("Store PayPal Token In Session"); ExpressCheckoutSession newSession = new ExpressCheckoutSession(); newSession.Token = expressCheckoutResponse.Token; newSession.TokenExpiration = DateTime.UtcNow.AddHours(3); newSession.Save(); context.Trace.Write("Saved PayPal Token:" + newSession.Token); context.Trace.Write("Token Expiration:" + newSession.TokenExpiration.ToLongDateString()); //RETURN TO CALLER INCLUDING REDIRECTION URL string redirectUrl = "https://www" + (this.UseSandbox ? ".sandbox" : string.Empty) + ".paypal.com/webscr?cmd=_express-checkout&token=" + expressCheckoutResponse.Token; return(new ExpressCheckoutResult(0, redirectUrl, null)); }