Пример #1
0
        public AmazonPayApiData ParseNotification(HttpRequestBase request)
        {
            string json = null;

            using (var reader = new StreamReader(request.InputStream))
            {
                json = reader.ReadToEnd();
            }

            var parser  = new OffAmazonPaymentsNotifications.NotificationsParser();
            var message = parser.ParseRawMessage(request.Headers, json);

            var data = new AmazonPayApiData()
            {
                MessageType = message.NotificationType.ToString(),
                MessageId   = ((OffAmazonPaymentsNotifications.IpnNotificationMetadata)message.NotificationMetadata).NotificationReferenceId
            };

            if (message.NotificationType == OffAmazonPaymentsNotifications.NotificationType.AuthorizationNotification)
            {
                var details = ((OffAmazonPaymentsNotifications.AuthorizationNotification)message).AuthorizationDetails;

                data.AuthorizationId = details.AmazonAuthorizationId;
                data.CaptureId       = details.IdList.SafeGet(0);
                data.ReferenceId     = details.AuthorizationReferenceId;
                data.CaptureNow      = details.CaptureNow;
                data.Creation        = details.CreationTimestamp;

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

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

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

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

                if (details.AuthorizationStatus != null)
                {
                    data.ReasonCode        = details.AuthorizationStatus.ReasonCode;
                    data.ReasonDescription = details.AuthorizationStatus.ReasonDescription;
                    data.State             = details.AuthorizationStatus.State;
                    data.StateLastUpdate   = details.AuthorizationStatus.LastUpdateTimestamp;
                }
            }
            else if (message.NotificationType == OffAmazonPaymentsNotifications.NotificationType.CaptureNotification)
            {
                var details = ((OffAmazonPaymentsNotifications.CaptureNotification)message).CaptureDetails;

                data.CaptureId   = details.AmazonCaptureId;
                data.ReferenceId = details.CaptureReferenceId;
                data.Creation    = details.CreationTimestamp;

                if (details.CaptureFee != null)
                {
                    data.Fee = new AmazonPayApiPrice(details.CaptureFee.Amount, details.CaptureFee.CurrencyCode);
                }

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

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

                if (details.CaptureStatus != null)
                {
                    data.ReasonCode        = details.CaptureStatus.ReasonCode;
                    data.ReasonDescription = details.CaptureStatus.ReasonDescription;
                    data.State             = details.CaptureStatus.State;
                    data.StateLastUpdate   = details.CaptureStatus.LastUpdateTimestamp;
                }
            }
            else if (message.NotificationType == OffAmazonPaymentsNotifications.NotificationType.RefundNotification)
            {
                var details = ((OffAmazonPaymentsNotifications.RefundNotification)message).RefundDetails;

                data.RefundId    = details.AmazonRefundId;
                data.ReferenceId = details.RefundReferenceId;
                data.Creation    = details.CreationTimestamp;

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

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

                if (details.RefundStatus != null)
                {
                    data.ReasonCode        = details.RefundStatus.ReasonCode;
                    data.ReasonDescription = details.RefundStatus.ReasonDescription;
                    data.State             = details.RefundStatus.State;
                    data.StateLastUpdate   = details.RefundStatus.LastUpdateTimestamp;
                }
            }

            return(data);
        }
Пример #2
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);
        }
Пример #3
0
        public string ToInfoString(AmazonPayApiData data)
        {
            var sb = new StringBuilder();

            try
            {
                string[] strings = _localizationService.GetResource("Plugins.Payments.AmazonPay.MessageStrings").SplitSafe(";");

                string state = data.State.Grow(data.ReasonCode, " ");
                if (data.ReasonDescription.HasValue())
                {
                    state = "{0} ({1})".FormatWith(state, data.ReasonDescription);
                }

                sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.MessageTyp), data.MessageType.NaIfEmpty()));

                sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.State), state));

                var stateDate = _dateTimeHelper.ConvertToUserTime(data.StateLastUpdate, DateTimeKind.Utc);
                sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.StateUpdate), stateDate.ToString()));

                sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.MessageId), data.MessageId.NaIfEmpty()));

                if (data.AuthorizationId.HasValue())
                {
                    sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.AuthorizationID), data.AuthorizationId));
                }

                if (data.CaptureId.HasValue())
                {
                    sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.CaptureID), data.CaptureId));
                }

                if (data.RefundId.HasValue())
                {
                    sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.RefundID), data.RefundId));
                }

                sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.ReferenceID), data.ReferenceId.NaIfEmpty()));

                if (data.Fee != null && data.Fee.Amount != 0.0)
                {
                    bool isSigned = (data.MessageType.IsCaseInsensitiveEqual("RefundNotification") || data.MessageType.IsCaseInsensitiveEqual("GetRefundDetails"));
                    sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.Fee), (isSigned ? "-" : "") + data.Fee.ToString()));
                }

                if (data.AuthorizedAmount != null && data.AuthorizedAmount.Amount != 0.0)
                {
                    sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.AuthorizedAmount), data.AuthorizedAmount.ToString()));
                }

                if (data.CapturedAmount != null && data.CapturedAmount.Amount != 0.0)
                {
                    sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.CapturedAmount), data.CapturedAmount.ToString()));
                }

                if (data.RefundedAmount != null && data.RefundedAmount.Amount != 0.0)
                {
                    sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.RefundedAmount), data.RefundedAmount.ToString()));
                }

                if (data.CaptureNow.HasValue)
                {
                    sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.CaptureNow), data.CaptureNow.Value.ToString()));
                }

                var creationDate = _dateTimeHelper.ConvertToUserTime(data.Creation, DateTimeKind.Utc);
                sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.Creation), creationDate.ToString()));

                if (data.Expiration.HasValue)
                {
                    var expirationDate = _dateTimeHelper.ConvertToUserTime(data.Expiration.Value, DateTimeKind.Utc);
                    sb.AppendLine("{0}: {1}".FormatWith(strings.SafeGet((int)AmazonPayMessage.Expiration), expirationDate.ToString()));
                }
            }
            catch (Exception exc)
            {
                exc.Dump();
            }
            return(sb.ToString());
        }
Пример #4
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);
        }