Exemplo n.º 1
0
        public void CloseOrderReference(AmazonPayClient client, string orderReferenceId)
        {
            var request = new CloseOrderReferenceRequest();

            request.SellerId = client.Settings.SellerId;
            request.AmazonOrderReferenceId = orderReferenceId;

            var response = client.Service.CloseOrderReference(request);
        }
Exemplo n.º 2
0
        public OrderReferenceDetails SetOrderReferenceDetails(AmazonPayClient client, string orderReferenceId, decimal?orderTotalAmount,
                                                              string currencyCode, string orderGuid = null, string storeName = null)
        {
            var request = new SetOrderReferenceDetailsRequest();

            request.SellerId = client.Settings.SellerId;
            request.AmazonOrderReferenceId = orderReferenceId;

            var attributes = new OrderReferenceAttributes();

            //attributes.SellerNote = client.Settings.SellerNoteOrderReference.Truncate(1024);
            attributes.PlatformId = AmazonPayCore.PlatformId;

            if (orderTotalAmount.HasValue)
            {
                attributes.OrderTotal = new OrderTotal
                {
                    Amount       = orderTotalAmount.Value.ToString("0.00", CultureInfo.InvariantCulture),
                    CurrencyCode = currencyCode ?? "EUR"
                };
            }

            if (orderGuid.HasValue())
            {
                attributes.SellerOrderAttributes = new SellerOrderAttributes
                {
                    SellerOrderId = orderGuid,
                    StoreName     = storeName
                };
            }

            request.OrderReferenceAttributes = attributes;

            var response = client.Service.SetOrderReferenceDetails(request);

            if (response != null && response.IsSetSetOrderReferenceDetailsResult())
            {
                var detailsResult = response.SetOrderReferenceDetailsResult;

                if (detailsResult.IsSetOrderReferenceDetails())
                {
                    return(detailsResult.OrderReferenceDetails);
                }
            }
            return(null);
        }
Exemplo n.º 3
0
        public OrderReferenceDetails SetOrderReferenceDetails(AmazonPayClient client, string orderReferenceId, string currencyCode, List <OrganizedShoppingCartItem> cart)
        {
            decimal  orderTotalDiscountAmountBase   = decimal.Zero;
            Discount orderTotalAppliedDiscount      = null;
            List <AppliedGiftCard> appliedGiftCards = null;
            int     redeemedRewardPoints            = 0;
            decimal redeemedRewardPointsAmount      = decimal.Zero;

            decimal?shoppingCartTotalBase = _orderTotalCalculationService.GetShoppingCartTotal(cart,
                                                                                               out orderTotalDiscountAmountBase, out orderTotalAppliedDiscount, out appliedGiftCards, out redeemedRewardPoints, out redeemedRewardPointsAmount);

            if (shoppingCartTotalBase.HasValue)
            {
                return(SetOrderReferenceDetails(client, orderReferenceId, shoppingCartTotalBase, currencyCode));
            }

            return(null);
        }
Exemplo n.º 4
0
        public string Refund(AmazonPayClient client, RefundPaymentRequest refund, RefundPaymentResult result)
        {
            result.NewPaymentStatus = refund.Order.PaymentStatus;

            string amazonRefundId = null;
            var    store          = _services.StoreService.GetStoreById(refund.Order.StoreId);

            var request = new RefundRequest();

            request.SellerId          = client.Settings.SellerId;
            request.AmazonCaptureId   = refund.Order.CaptureTransactionId;
            request.RefundReferenceId = GetRandomId("Refund");
            //request.SellerRefundNote = client.Settings.SellerNoteRefund.Truncate(255);

            request.RefundAmount = new Price
            {
                Amount       = refund.AmountToRefund.ToString("0.00", CultureInfo.InvariantCulture),
                CurrencyCode = store.PrimaryStoreCurrency.CurrencyCode
            };

            var response = client.Service.Refund(request);

            if (response != null && response.IsSetRefundResult() && response.RefundResult.IsSetRefundDetails())
            {
                var details = response.RefundResult.RefundDetails;

                amazonRefundId = details.AmazonRefundId;

                if (details.IsSetRefundStatus() && details.RefundStatus.IsSetState())
                {
                    if (refund.IsPartialRefund)
                    {
                        result.NewPaymentStatus = Core.Domain.Payments.PaymentStatus.PartiallyRefunded;
                    }
                    else
                    {
                        result.NewPaymentStatus = Core.Domain.Payments.PaymentStatus.Refunded;
                    }
                }
            }
            return(amazonRefundId);
        }
Exemplo n.º 5
0
        public OrderReferenceDetails GetOrderReferenceDetails(AmazonPayClient client, string orderReferenceId, string addressConsentToken = null)
        {
            var request = new GetOrderReferenceDetailsRequest();

            request.SellerId = client.Settings.SellerId;
            request.AmazonOrderReferenceId = orderReferenceId;
            request.AddressConsentToken    = addressConsentToken;

            var response = client.Service.GetOrderReferenceDetails(request);

            if (response != null && response.IsSetGetOrderReferenceDetailsResult())
            {
                var detailsResult = response.GetOrderReferenceDetailsResult;

                if (detailsResult.IsSetOrderReferenceDetails())
                {
                    return(detailsResult.OrderReferenceDetails);
                }
            }
            return(null);
        }
Exemplo n.º 6
0
        public void Capture(AmazonPayClient client, CapturePaymentRequest capture, CapturePaymentResult result)
        {
            result.NewPaymentStatus = capture.Order.PaymentStatus;

            var request = new CaptureRequest();
            var store   = _services.StoreService.GetStoreById(capture.Order.StoreId);

            request.SellerId = client.Settings.SellerId;
            request.AmazonAuthorizationId = capture.Order.AuthorizationTransactionId;
            request.CaptureReferenceId    = GetRandomId("Capture");
            //request.SellerCaptureNote = client.Settings.SellerNoteCapture.Truncate(255);

            request.CaptureAmount = new Price
            {
                Amount       = capture.Order.OrderTotal.ToString("0.00", CultureInfo.InvariantCulture),
                CurrencyCode = store.PrimaryStoreCurrency.CurrencyCode
            };

            var response = client.Service.Capture(request);

            if (response != null && response.IsSetCaptureResult() && response.CaptureResult.IsSetCaptureDetails())
            {
                var details = response.CaptureResult.CaptureDetails;

                result.CaptureTransactionId = details.AmazonCaptureId;

                if (details.IsSetCaptureStatus() && details.CaptureStatus.IsSetState())
                {
                    result.CaptureTransactionResult = details.CaptureStatus.State.ToString().Grow(details.CaptureStatus.ReasonCode, " ");

                    if (details.CaptureStatus.State == PaymentStatus.COMPLETED)
                    {
                        result.NewPaymentStatus = Core.Domain.Payments.PaymentStatus.Paid;
                    }
                }
            }
        }
Exemplo n.º 7
0
        public RefundDetails GetRefundDetails(AmazonPayClient client, string refundId, out AmazonPayApiData data)
        {
            data = new AmazonPayApiData();

            RefundDetails details = null;
            var           request = new GetRefundDetailsRequest();

            request.SellerId       = client.Settings.SellerId;
            request.AmazonRefundId = refundId;

            var response = client.Service.GetRefundDetails(request);

            if (response != null && response.IsSetGetRefundDetailsResult())
            {
                var result = response.GetRefundDetailsResult;
                if (result != null && result.IsSetRefundDetails())
                {
                    details = result.RefundDetails;
                }
            }

            try
            {
                data.MessageType = "GetRefundDetails";

                if (response.IsSetResponseMetadata() && response.ResponseMetadata.IsSetRequestId())
                {
                    data.MessageId = response.ResponseMetadata.RequestId;
                }

                if (details != null)
                {
                    if (details.IsSetAmazonRefundId())
                    {
                        data.RefundId = details.AmazonRefundId;
                    }

                    if (details.IsSetRefundReferenceId())
                    {
                        data.ReferenceId = details.RefundReferenceId;
                    }

                    if (details.IsSetFeeRefunded())
                    {
                        data.Fee = new AmazonPayApiPrice(details.FeeRefunded.Amount, details.FeeRefunded.CurrencyCode);
                    }

                    if (details.IsSetRefundAmount())
                    {
                        data.RefundedAmount = new AmazonPayApiPrice(details.RefundAmount.Amount, details.RefundAmount.CurrencyCode);
                    }

                    if (details.IsSetCreationTimestamp())
                    {
                        data.Creation = details.CreationTimestamp;
                    }

                    if (details.IsSetRefundStatus())
                    {
                        data.ReasonCode        = details.RefundStatus.ReasonCode;
                        data.ReasonDescription = details.RefundStatus.ReasonDescription;
                        data.State             = details.RefundStatus.State.ToString();
                        data.StateLastUpdate   = details.RefundStatus.LastUpdateTimestamp;
                    }
                }
            }
            catch (Exception exc)
            {
                exc.Dump();
            }
            return(details);
        }
Exemplo n.º 8
0
        public AuthorizationDetails GetAuthorizationDetails(AmazonPayClient client, string authorizationId, out AmazonPayApiData data)
        {
            data = new AmazonPayApiData();

            AuthorizationDetails details = null;
            var request = new GetAuthorizationDetailsRequest();

            request.SellerId = client.Settings.SellerId;
            request.AmazonAuthorizationId = authorizationId;

            var response = client.Service.GetAuthorizationDetails(request);

            if (response.IsSetGetAuthorizationDetailsResult())
            {
                var result = response.GetAuthorizationDetailsResult;

                if (result != null && result.IsSetAuthorizationDetails())
                {
                    details = result.AuthorizationDetails;
                }
            }

            try
            {
                data.MessageType = "GetAuthorizationDetails";

                if (response.IsSetResponseMetadata() && response.ResponseMetadata.IsSetRequestId())
                {
                    data.MessageId = response.ResponseMetadata.RequestId;
                }

                if (details != null)
                {
                    if (details.IsSetAmazonAuthorizationId())
                    {
                        data.AuthorizationId = details.AmazonAuthorizationId;
                    }

                    if (details.IsSetAuthorizationReferenceId())
                    {
                        data.ReferenceId = details.AuthorizationReferenceId;
                    }

                    if (details.IsSetIdList() && details.IdList.IsSetmember())
                    {
                        data.CaptureId = (details.IdList.member != null && details.IdList.member.Count > 0 ? details.IdList.member[0] : null);
                    }

                    if (details.IsSetAuthorizationFee())
                    {
                        data.Fee = new AmazonPayApiPrice(details.AuthorizationFee.Amount, details.AuthorizationFee.CurrencyCode);
                    }

                    if (details.IsSetAuthorizationAmount())
                    {
                        data.AuthorizedAmount = new AmazonPayApiPrice(details.AuthorizationAmount.Amount, details.AuthorizationAmount.CurrencyCode);
                    }

                    if (details.IsSetCapturedAmount())
                    {
                        data.CapturedAmount = new AmazonPayApiPrice(details.CapturedAmount.Amount, details.CapturedAmount.CurrencyCode);
                    }

                    if (details.IsSetCaptureNow())
                    {
                        data.CaptureNow = details.CaptureNow;
                    }

                    if (details.IsSetCreationTimestamp())
                    {
                        data.Creation = details.CreationTimestamp;
                    }

                    if (details.IsSetExpirationTimestamp())
                    {
                        data.Expiration = details.ExpirationTimestamp;
                    }

                    if (details.IsSetAuthorizationStatus())
                    {
                        data.ReasonCode        = details.AuthorizationStatus.ReasonCode;
                        data.ReasonDescription = details.AuthorizationStatus.ReasonDescription;
                        data.State             = details.AuthorizationStatus.State.ToString();
                        data.StateLastUpdate   = details.AuthorizationStatus.LastUpdateTimestamp;
                    }
                }
            }
            catch (Exception exc)
            {
                exc.Dump();
            }
            return(details);
        }
Exemplo n.º 9
0
        /// <summary>Asynchronous as long as we do not set TransactionTimeout to 0. So transaction is always in pending state after return.</summary>
        public void Authorize(AmazonPayClient client, ProcessPaymentResult result, List <string> errors, string orderReferenceId, decimal orderTotalAmount, string currencyCode, string orderGuid)
        {
            var request = new AuthorizeRequest();

            request.SellerId = client.Settings.SellerId;
            request.AmazonOrderReferenceId   = orderReferenceId;
            request.AuthorizationReferenceId = GetRandomId("Authorize");
            request.CaptureNow = (client.Settings.TransactionType == AmazonPayTransactionType.AuthorizeAndCapture);
            //request.SellerAuthorizationNote = client.Settings.SellerNoteAuthorization.Truncate(256);

            request.AuthorizationAmount = new Price()
            {
                Amount       = orderTotalAmount.ToString("0.00", CultureInfo.InvariantCulture),
                CurrencyCode = currencyCode ?? "EUR"
            };

            var response = client.Service.Authorize(request);

            if (response != null && response.IsSetAuthorizeResult() && response.AuthorizeResult.IsSetAuthorizationDetails())
            {
                var details = response.AuthorizeResult.AuthorizationDetails;

                result.AuthorizationTransactionId   = details.AmazonAuthorizationId;
                result.AuthorizationTransactionCode = details.AuthorizationReferenceId;

                if (details.IsSetAuthorizationStatus())
                {
                    var status = details.AuthorizationStatus;

                    if (status.IsSetState())
                    {
                        result.AuthorizationTransactionResult = status.State.ToString();
                    }

                    if (request.CaptureNow && details.IsSetIdList() && details.IdList.IsSetmember() && details.IdList.member.Count() > 0)
                    {
                        result.CaptureTransactionId = details.IdList.member[0];
                    }

                    if (status.IsSetReasonCode())
                    {
                        if (status.ReasonCode.IsCaseInsensitiveEqual("InvalidPaymentMethod") || status.ReasonCode.IsCaseInsensitiveEqual("AmazonRejected") ||
                            status.ReasonCode.IsCaseInsensitiveEqual("ProcessingFailure") || status.ReasonCode.IsCaseInsensitiveEqual("TransactionTimedOut") ||
                            status.ReasonCode.IsCaseInsensitiveEqual("TransactionTimeout"))
                        {
                            if (status.IsSetReasonDescription())
                            {
                                errors.Add("{0}: {1}".FormatWith(status.ReasonCode, status.ReasonDescription));
                            }
                            else
                            {
                                errors.Add(status.ReasonCode);
                            }
                        }
                    }
                }
            }

            // The response to the Authorize call includes the AuthorizationStatus response element, which will be always be
            // set to Pending if you have selected the asynchronous mode of operation.

            result.NewPaymentStatus = Core.Domain.Payments.PaymentStatus.Pending;
        }