/// <remarks/> public void DoDirectPaymentAsync(DoDirectPaymentReq DoDirectPaymentReq) { this.DoDirectPaymentAsync(DoDirectPaymentReq, null); }
/// <remarks/> public void DoDirectPaymentAsync(DoDirectPaymentReq DoDirectPaymentReq, object userState) { if ((this.DoDirectPaymentOperationCompleted == null)) { this.DoDirectPaymentOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDoDirectPaymentOperationCompleted); } this.InvokeAsync("DoDirectPayment", new object[] { DoDirectPaymentReq}, this.DoDirectPaymentOperationCompleted, userState); }
/// <summary> /// Authorizes the 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> /// <param name="authorizeOnly">A value indicating whether to authorize only; true - authorize; false - sale</param> protected void AuthorizeOrSale(PaymentInfo paymentInfo, Customer customer, Guid orderGuid, ProcessPaymentResult processPaymentResult, bool authorizeOnly) { InitSettings(); DoDirectPaymentReq req = new DoDirectPaymentReq(); req.DoDirectPaymentRequest = new DoDirectPaymentRequestType(); req.DoDirectPaymentRequest.Version = this.APIVersion; DoDirectPaymentRequestDetailsType details = new DoDirectPaymentRequestDetailsType(); req.DoDirectPaymentRequest.DoDirectPaymentRequestDetails = details; details.IPAddress = NopContext.Current.UserHostAddress; if (authorizeOnly) details.PaymentAction = PaymentActionCodeType.Authorization; else details.PaymentAction = PaymentActionCodeType.Sale; details.CreditCard = new CreditCardDetailsType(); details.CreditCard.CreditCardNumber = paymentInfo.CreditCardNumber; details.CreditCard.CreditCardType = GetPaypalCreditCardType(paymentInfo.CreditCardType); details.CreditCard.ExpMonthSpecified = true; details.CreditCard.ExpMonth = paymentInfo.CreditCardExpireMonth; details.CreditCard.ExpYearSpecified = true; details.CreditCard.ExpYear = paymentInfo.CreditCardExpireYear; details.CreditCard.CVV2 = paymentInfo.CreditCardCvv2; details.CreditCard.CardOwner = new PayerInfoType(); details.CreditCard.CardOwner.PayerCountry = GetPaypalCountryCodeType(paymentInfo.BillingAddress.Country); details.CreditCard.CreditCardTypeSpecified = true; details.CreditCard.CardOwner.Address = new AddressType(); details.CreditCard.CardOwner.Address.CountrySpecified = true; details.CreditCard.CardOwner.Address.Street1 = paymentInfo.BillingAddress.Address1; details.CreditCard.CardOwner.Address.Street2 = paymentInfo.BillingAddress.Address2; details.CreditCard.CardOwner.Address.CityName = paymentInfo.BillingAddress.City; if (paymentInfo.BillingAddress.StateProvince != null) details.CreditCard.CardOwner.Address.StateOrProvince = paymentInfo.BillingAddress.StateProvince.Abbreviation; else details.CreditCard.CardOwner.Address.StateOrProvince = "CA"; details.CreditCard.CardOwner.Address.Country = GetPaypalCountryCodeType(paymentInfo.BillingAddress.Country); details.CreditCard.CardOwner.Address.PostalCode = paymentInfo.BillingAddress.ZipPostalCode; details.CreditCard.CardOwner.Payer = paymentInfo.BillingAddress.Email; details.CreditCard.CardOwner.PayerName = new PersonNameType(); details.CreditCard.CardOwner.PayerName.FirstName = paymentInfo.BillingAddress.FirstName; details.CreditCard.CardOwner.PayerName.LastName = paymentInfo.BillingAddress.LastName; details.PaymentDetails = new PaymentDetailsType(); details.PaymentDetails.OrderTotal = new BasicAmountType(); details.PaymentDetails.OrderTotal.Value = paymentInfo.OrderTotal.ToString("N", new CultureInfo("en-us")); details.PaymentDetails.OrderTotal.currencyID = PaypalHelper.GetPaypalCurrency(IoC.Resolve<ICurrencyService>().PrimaryStoreCurrency); details.PaymentDetails.Custom = orderGuid.ToString(); details.PaymentDetails.ButtonSource = "nopCommerceCart"; //ShoppingCart cart = IoC.Resolve<IShoppingCartService>().GetShoppingCartByCustomerSessionGUID(ShoppingCartTypeEnum.ShoppingCart, NopContext.Current.Session.CustomerSessionGUID); //PaymentDetailsItemType[] cartItems = new PaymentDetailsItemType[cart.Count]; //for (int i = 0; i < cart.Count; i++) //{ // ShoppingCartItem item = cart[i]; // cartItems[i] = new PaymentDetailsItemType() // { // Name = item.ProductVariant.FullProductName, // Number = item.ProductVariant.ProductVariantID.ToString(), // Quantity = item.Quantity.ToString(), // Amount = new BasicAmountType() // { // currencyID = PaypalHelper.GetPaypalCurrency(IoC.Resolve<ICurrencyService>().PrimaryStoreCurrency), // Value = (item.Quantity * item.ProductVariant.Price).ToString("N", new CultureInfo("en-us")) // } // }; //}; //details.PaymentDetails.PaymentDetailsItem = cartItems; //shipping if (paymentInfo.ShippingAddress != null) { if (paymentInfo.ShippingAddress.StateProvince != null && paymentInfo.ShippingAddress.Country != null) { AddressType shippingAddress = new AddressType(); shippingAddress.Name = paymentInfo.ShippingAddress.FirstName + " " + paymentInfo.ShippingAddress.LastName; shippingAddress.Street1 = paymentInfo.ShippingAddress.Address1; shippingAddress.CityName = paymentInfo.ShippingAddress.City; shippingAddress.StateOrProvince = paymentInfo.ShippingAddress.StateProvince.Abbreviation; shippingAddress.PostalCode = paymentInfo.ShippingAddress.ZipPostalCode; shippingAddress.Country = (CountryCodeType)Enum.Parse(typeof(CountryCodeType), paymentInfo.ShippingAddress.Country.TwoLetterIsoCode, true); shippingAddress.CountrySpecified = true; details.PaymentDetails.ShipToAddress = shippingAddress; } } DoDirectPaymentResponseType response = service2.DoDirectPayment(req); string error = string.Empty; bool Success = PaypalHelper.CheckSuccess(response, out error); if (Success) { processPaymentResult.AVSResult = response.AVSCode; processPaymentResult.AuthorizationTransactionCode = response.CVV2Code; if (authorizeOnly) { processPaymentResult.AuthorizationTransactionId = response.TransactionID; processPaymentResult.AuthorizationTransactionResult = response.Ack.ToString(); processPaymentResult.PaymentStatus = PaymentStatusEnum.Authorized; } else { processPaymentResult.CaptureTransactionId = response.TransactionID; processPaymentResult.CaptureTransactionResult = response.Ack.ToString(); processPaymentResult.PaymentStatus = PaymentStatusEnum.Paid; } } else { processPaymentResult.Error = error; processPaymentResult.FullError = error; } }